Linuxのext2ファイルシステム

ディスクには、ファイルを格納するために使用されますが、ディスクは最初にファイルを格納するファイルシステムのフォーマットとしてフォーマットする必要があります。ファイルシステムの目的は、ディスク上のファイルを整理し、管理することです。Linuxシステムでは、最長はext2ファイルシステムのシリーズを表示します。後でその初期のバージョンのext2、ext3の開発とext4の。けれどもEXT2、EXT3、およびext4のは、強化されましたが、そのコア設計が変更されていないので、我々はまだデモオブジェクトなどの古いのext2に基づいています。

基本的な構造

フォーマット時のext2ファイルシステムは、一般的にブロック群(blockgroup)を複数含みます。Ext2ファイルは次のようにややフォーマットした後:

すべて一緒に入れたinodeとブロックの全てが管理する方が面倒になる場合は、ファイル・システムは、非常に大きくなるためです。このため、ファイルシステムは、各ブロックグループが別のinode /ブロック/スーパーシステムを有し、ブロックグループに分割されます。

ブロック
ブロックは、私たちの「あるLinuxファイルシステムの基本的な概念の記事で論理ブロックが導入されました」。ハードディスクは、論理ブロック(ブロック)の最初のパーティションに分割されているext2ファイルシステムの場合、各ブロックは、実際にデータ・ユニット、同じサイズを格納するために使用される、の順0,1,2,3ブロックに番号が付けられています最初のブロックは0番れます。ext2ファイルシステムのサイズは、ファイルシステムの作成時に指定されていない場合、1024バイト、2048バイトと4096バイトのブロックサイズのブロックが、パラメータによって/etc/mke2fs.confからファイルを指定することができるサポート対応する値を読み取ります。原理的には、ブロックのサイズおよび数はフォーマット後に変更することができない、それは、各ブロック内のファイルの唯一のストアデータ(すなわち、データファイルは、同じブロックの2つの場合に置かれていない)であろうファイルサイズがブロックのサイズを超える場合は、ファイルサイズのブロックよりも小さい場合、ブロックは、ファイルを保存するために多くを占めますが、ブロックの上に残っているスペースが無駄にしました。
あなたはブロックのサイズを確認するには、dumpe2fsコマンドを使用することができます。

$ sudoのは、dumpe2fsは/ dev / sda1を| grepの ブロックサイズ:

次のように私の環境では、出力結果は次のとおりです:
ブロックサイズ:1024

ブロックext2ファイルシステムは、主に以下の特徴があり、注意してください:

  • フォーマットのブロックサイズと数は完全に再度変更されないことができる(再フォーマットしない限り)
  • 各ブロック内に配置することができ、ほとんどのデータファイルで、
  • ファイルは、ブロックのサイズよりも大きい場合、そのファイルは、ブロックの数よりも多くを占有します
  • ファイルはブロックよりも小さい場合、ブロックの残容量を再度使用することができません

ブロックグループの
ブロックが論理ブロック数s_block_per_group属性定義スーパーブロックすることにより、特に、各ブロックブロックグループの同じ番号が含まれている、ブロックグループに分割されている(最後のブロックのグループを除いて、最後に残っs_block_per_group未満であってもよいですこれらは、ブロックブロックの最後のグループ)に分けられています。dumpe2fsコマンドリストブロックグループ情報の全てが、統計ではなく、ブロックグループ、現在のファイルシステムが含まれているどのように多くの指定されていませんでした。以下では、ブロックグループの出力は、dumpe2fs抜粋情報です。

...
Group 0: (Blocks 1-8192) [ITABLE_ZEROED]
  Checksum 0xa22b, unused inodes 501
  Primary superblock at 1, Group descriptors at 2-81
  Reserved GDT blocks at 82-337
  Block bitmap at 338 (+337), Inode bitmap at 354 (+353)
  Inode table at 370-497 (+369)
  5761 free blocks, 501 free inodes, 2 directories, 501 unused inodes
  Free blocks: 2432-8192
  Free inodes: 12-512
Group 1: (Blocks 8193-16384) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
  Checksum 0xea71, unused inodes 512
  Backup superblock at 8193, Group descriptors at 8194-8273
  Reserved GDT blocks at 8274-8529
  Block bitmap at 339 (bg #0 + 338), Inode bitmap at 355 (bg #0 + 354)
  Inode table at 498-625 (bg #0 + 497)
  7855 free blocks, 512 free inodes, 0 directories, 512 unused inodes
  Free blocks: 8530-16384
  Free inodes: 513-1024
...

Group0 占用从 1 到 8192 号的 block。其中的 Superblock 则在 1 号 block 内。
文件系统描述说明(Group descriptors)占用从 2 到 81 号 block。
Block bitmap 和 Inode bitmap 分别在 338 和 354 号 block 上。
Inode table 占用 370-497 号 block。
Group0 当前可用的 block 号为:2432-8192,可用的 inode 号码为:12-512。
Group 内 inode 数的计算方式:
一个 inode 占用 256 Bytes
Inode 占用的 block 数:497 - 370 + 1 = 128
每个 block 的大小为 1024 Bytes
Inode 数为:128 * 1024 / 256 = 512

Boot Block
每个磁盘分区的开头 1024 字节大小都预留为分区的启动扇区,存放引导程序和数据,所以又叫引导块。引导块在第一个 Block,即 Block 0 中存放,但是未必占满这个 Block,原因是 Block 的大小可能大于 1024 字节。
这里是存放开机管理程序的地方,这是个非常重要的设计。因为这样使得我们能够把不同的开机管理程序安装到每个文件系统的最前端,而不用覆盖整颗磁盘唯一的 MBR,这样就能支持多系统启动了。

Block Group 的组成部分

如上图所示,每个 Block Group 都由下面几个组成部分:

  • Superblock(超级块)
  • Group Description(组描述)
  • Block bitmap(块位图)
  • Inode bitmap(inode 位图)
  • Inode table(inode 表)
  • Data Blocks(数据块)

Superblock(超级区块)
Superblock 是记录整个 filesystem 相关信息的地方,其实上除了第一个 block group 内会含有 superblock 之外,后续的 block group 不一定都包含 superblock,如果包含,也是做为第一个 block group 内 superblock 的备份。superblock 记录的主要信息有:

  • block 与 inode 的总量
  • 未使用与已使用的 inode/block 数量
  • block 与 inode 的大小(block 为 1,2,4K,inode 为 128 Bytes 或 256 Bytes)
  • filesystem 的挂载时间、最近一次写入数据的时间、最近一次检验磁盘(fsck)的时间等文件系统的相关信息
  • 一个 valid bit 数值,若此文件系统已被挂载,则 valid bit 为 0,若未被挂载,则 valid bit 为 1

Superblock 的大小为 1024 Bytes,它非常重要,因为分区上重要的信息都在上面。如果 Superblock 挂掉了,分区上的数据就很难恢复了。可以使用 dumpe2fs 命令查看 分区的 Superblock 信息,如果添加选项 -h,dumpe2fs 命令则只输出 Superblock 中的信息:

$ sudo dumpe2fs -h /dev/sdd1

Group Description(组描述)
Group Description 用来描述每个 group 的开始与结束位置的 block 号码,以及说明每个块(superblock、bitmap、inodemap、datablock) 分别介于哪一个 block 号码之间。

Block bitmap(区块对照表)
在创建文件时需要为文件分配 block,届时就会选择分配空闲的 block 给文件使用。如何查看 block 是否已经被使用了呢?此时就需要借助于 block bitmap 了。通过 block bitmap 可以知道哪些 block 是空的,因此系统就能够很快地找到空闲空间来分配给文件。同样的,在删除某些文件时,文件原本占用的 block 号码就要释放出来,此时在 block bitmap 当中相对应到该 block 号码的标志就需要修改成"空闲"。这就是 block bitmap 的作用。

Inode bitmap(inode 对照表)
inode bitmap 与 block bitmap 的功能类似,只是 block bitmap 记录的是使用与未使用的 block 号,而 inode bitmap 则记录的是使用与未使用的 inode 号。

Inode table    
Inode table 中存放着一个个 inode,inode 的内容记录文件的属性以及该文件实际数据是放置在哪些 block 内,inode 记录的主要的文件属性如下:

  • 该文件的读写权限(rwx)
  • 该文件的拥有者和所属组(owner/group)
  • 该文件的容量
  • 该文件的 ctime(创建时间)
  • 该文件的 atime(最近一次的读取时间)
  • 该文件的 mtime(最近修改的时间)
  • 该文件的特殊标识,比如 SetUID 等
  • 该文件真正内容的指向(pointer)

inode 的数量与大小也是在格式化时就已经固定了的,另外 inode 还有如下特点:

  • 每个 inode 大小均固定为 128 Bytes(新的 ext4 为 256 Bytes)
  • 每个文件都仅会占用一个 inode
  • 文件系统能够创建的文件数量与 inode 的数量相关
  • 系统读取文件时需要先找到 inode,并分析 inode 所记录的权限与使用者是否符合,若符合才能够开始读取 block 的内容

Data block
Data block 是用来存放文件内容的地方,Ext2 文件系统 1K、2K 和 4K 大小的 block。在格式化文件系统时 block 的大小就确定了,并且每个 block 都有编号。需要注意的是,由于 block 大小的差异,会导致文件系统能够支持的最大磁盘容量和最大单个文件的大小并不相同。下表描述了 block 大小与文件系统以及单个文件大小的关系:

此外 Ext2 文件系统的 block 还有下面一些限制:

  • block 的大小与数量在格式化后就不能再改变了(除非重新格式化)
  • 每个 block 内最多只能够放置一个文件的数据
  • 如果文件大于 block 的大小,那么一个文件会占用多个 block
  • 若文件小于 block,则该 block 的剩余容量也不能再被使用了(磁盘空间被浪费)

参考:
鸟哥的私房菜
dumpe2fs man page
Linux ext2, ext3, ext4 文件系统解读[1]
Ext2文件系统简单剖析(一)

おすすめ

転載: www.cnblogs.com/sparkdev/p/11212734.html