ext2 文件系统

ext2 文件系统

我有一个关于 ext2 文件系统的问题。我需要非常了解这一点。我想我有点理解其中的一切。但有件事困扰着我。正如您从第一张图片中看到的,该文件系统使卷被划分为一些“块组”。其中每一个都有一个Inode Table Section。我想知道的是块组 0 的索引节点表和块组 1 的索引节点表(2、3 .. 除了 0 之外的任何其他)是否相同。它们是否相同?如果相同,如何找到哪个Inode_table对应一个i_node。如果不是,在这种情况下,似乎有超过 1 个相同的 i_node。如果您确切地知道答案,请告诉我您的想法的基础,例如可以证明您是对的网站或书籍。

在此输入图像描述在此输入图像描述

答案1

如果您询问索引节点表相对于块组的开头是否始终处于相同的偏移量,这意味着它之前的所有内容都必须具有固定大小。块和索引节点位图始终是一个块。块组描述符表不固定。文档是这样说的:

根据定义的块组的数量,该表可能需要多个存储块。如有疑问,请始终参考超级块。

假设您想要查找给定 inode 的 inode 表,您需要知道 inode 属于哪个块组。如果您知道块组编号,则块大小(s_log_block_size)和每个块组的块数量(每个组的 s_blocks_s_blocks_per_group),你可以找到一个块组的开始,其中块组描述符表坐着。它包含该块组的索引节点表的第一个块的块ID(bg_inode_表)。

Ext 文件系统内部布局文档:http://www.nongnu.org/ext2-doc/ext2.html

答案2

(发布后,我意识到我晚了几年,无论如何我都会在这里留下这个答案)如果我正确理解你的问题,那么组描述符表中的内容与位图引用的内容也存在混淆。

每个块组包含一个超级块、一组组描述符、块和索引节点位图以及索引节点表。组描述符集适用于所有块组(超级块和组描述符是备份副本),但位图和索引节点表仅适用于该块组。

因此,例如,如果您对第四个块组感兴趣,您可以从组描述符表中读取第四个条目(无论是朝向磁盘开头的主条目还是备份副本),然后从中读取,您可以读取块号和索引节点位图所在的位置。

需要注意的是:我上面写的内容并不完全正确,因为稀疏选项通常是默认设置的,并且并非所有块组都有超级块(以节省空间)。读取一个块很容易,因为它是一个超级块,测试超级块的 s_magic 字段以查看它是否等于 EXT2_SUPER_MAGIC,如果不正确,则该块组以位图开头。

Hoov 发布的链接很好,这里还有另一个有用的链接http://cs.smith.edu/~nhowe/Teaching/csc262/oldlabs/ext2.html 它有几个令人困惑的方面,但与 Hoov 的链接结合使用应该可以让您启动并运行。https://wiki.osdev.org/Ext2也不错。

相关内容