ZYB ARTICLES REPOS

笔记: Ext2文件系统

结构

关于super block备份

在ext2文档里说super block备份在特定编号的group里,描述这个编号规则的原文为:the groups chosen are 0, 1 and powers of 3, 5 and 7.

经过实验 superblock 备份的group的编号为: 1,3,5,7,9,25,27,49,81,125,243,343,625,729,…

实验的方式如下

dd if=/dev/zero of=hd.img bs=1G count=16
mke2fs hd.img -b 1024
dumpe2fs hd.img|grep Backup -B 1 |grep Blocks |awk '{print $2}'  | sed  's/://g'

总结就是 编号在这个集合中 {0, 1, 3^n, 5^n, 7^n | n 为从1开始的自然数 }

如果一个group里superblock的备份,那么它会占据该group的第0个block,其它group数据结构从第1个block开始存。反之,如果一个group里没有superblock备份,则group数据结构从第0个block开始存。

特别说明,第0个group里的superblock所在的block有不同的情况。如果blocksize为1024,则存在该group的第1个block,block内的偏移为0,否则存在该group的第0个block,偏移位置为1024。这是因为每个分区前1024字节都是引导扇区,superblock需要放在其后面,如果ext2在格式化文件系统时选的blocksize 为 2048, 4096,很明显将superblock放在第0个block能省一点空间。 总结来说,第0个group的superblock要放在分区开始的1024字节的地方,至于这个地方的block编号是0还是1,则根据格式化的blocksize不同而不同。

ext2的特殊inode

ext2的super block里有一个s_first_ino字段,用来指示第一个非保留inode编号,换句话说,它表示可以被普通文件或目录使用的最小的inode编号。这个值通常是11,即编号>= 11的inode可以被普通文件或目录使用。

因此特殊inode编号及其作用如下:

  1. 第0号inode:保留的空闲inode,不用于任何文件或目录。在文件系统创建时,所有的inode位图都会将第0位设置为已使用,以防止分配这个特殊的inode。
  2. 第1号inode:用于表示“bad blocks inode”。这个inode用于存储文件系统中损坏的块列表。当文件系统检测到一个损坏的块时,它会将这个块的信息添加到bad blocks inode中。这样,文件系统就可以跟踪损坏的块,并确保它们不会被分配给其他文件或目录。通常情况下,用户和程序不会直接与bad blocks inode进行交互,而是通过文件系统工具(如fsck)来处理损坏的块。
  3. 第2号inode:这是根目录的inode编号。根目录是文件系统的顶层目录,包含了所有其他目录和文件的层次结构。根目录的inode包含了与目录相关的元数据,如权限、时间戳、链接计数等,以及指向存储目录内容的数据块的指针。
  4. 第3~10号inode:在大多数情况下并没有特定的用途,它们被保留作为未来扩展和兼容性考虑。在实际使用中,这些inode通常是空闲的,不会被普通文件或目录使用。这里需要注意的是,虽然3~10号inode没有特定的用途,但是在某些特殊情况下,它们可能会被用于特定目的。例如,在某些定制的文件系统或嵌入式系统中,这些保留的inode可能会被用于存储特定的元数据或其他信息。然而,在大多数标准的ext2文件系统中,这些inode通常是空闲的。

fragment

在ext2文件系统中,fragment(片段)指的是一个比块(block)更小的存储单元。片段的设计目的是为了更高效地处理小文件和非连续数据,以减少磁盘空间浪费和提高文件系统性能。

在ext2文件系统的早期版本中,片段(fragment)被用作存储小文件或非连续数据的基本单元。当一个文件的大小小于一个块的大小时,使用片段而不是块来存储文件可以节省磁盘空间。然而,这种方法会增加文件系统的复杂性,并可能导致更多的磁盘碎片。

在后续的ext2文件系统版本中,片段的概念被逐渐废弃。取而代之的是,文件系统使用固定大小的块作为存储单元,并通过预分配和延迟分配等技术来提高磁盘空间利用率和性能。在这些版本中,块和片段的大小通常被设置为相等,因此片段的概念实际上已经不存在。