硬盘Block及Inode详解

通常而言,操作系统对于文件数据的存放包括两个部分:文件内容、权限及文件属性。操作系统文件存放是基于文件系统,文件系统会将文件的实际内容存储到Block中,而将权限与属性等信息存放至Inode中。

在硬盘分区中,还有一个超级区块 (SuperBlock) ,SuperBlock会记录整个文件系统的整体信息,包括 Inode、Block 总量、使用大小、剩余大小等信息,每个 inode 与 block 都有编号对应,方便Linux系统快速定位查找文件。

  • Superblock:记录文件系统的整体信息,包括inode与block的总量、使用大小、剩余大小, 以及文件系统的格式与相关信息等;
  • Inode:记录文件的属性,权限,同时会记录该文件的数据所在的block编号;
  • Block:存储文件的内容,如果文件超过默认Block大小,会自动占用多个Block。

因为每个 inode 与 block 都有编号,而每个文件都会占用一个 inode ,inode 内则有文件数据放置的 block 号码。如果能够找到文件的 inode,就可以找到该文件所放置数据的block号码,从而读取该文件内容。

操作系统进行格式化分区时,操作系统自动将硬盘分成两个区域。一个是数据Block区,用于存放文件数据;另一个是Inode Table区,用于存放inode包含的元信息。

每个inode节点的大小,可以在格式化时指定,默认为128Bytes或256Bytes,/boot分区Inode默认为128Bytes,其他分区默认为256Bytes,查看Linux系统Inode方法如下:

dumpe2fs /dev/sda1 |grep ” Inode size ”

tune2fs -l /dev/sda1 |grep ” Inode size”

stat /boot/|grep “Inode”

格式化磁盘时,可以指定默认Inode和Block的大小,-b指定默认Block值,-I指定默认Inode值,如图7-2所示,命令如下:

mkfs.ext4 -b 4096 -I 256 /dev/sdb

图7-2 格式化硬盘指定Inode和Block