我有一个关于文件系统的ext2的问题。我需要很好的了解这件事。我想我能理解这上面的一切。但有件事困扰着我。正如您从第一张图片中可以看到的那样,这个文件系统将卷划分为一些“块组”。它们中的每一个都相互有一个Inode表节。我想知道的是,块组0的Inode表与块组1(2,3)的Inode表是否相同。(除0外)。它们是一样还是不一样?如果它们是相同的,那么如何找到哪个Inode_table对应于一个i_node。如果不是,在这种情况下,似乎有超过一个相同的i_node。如果你确切知道答案,让我知道你的想法的基础,如网站或书籍,你可以证明你是正确的。


发布于 2016-08-30 17:26:55
如果您询问inode表相对于块组的开头是否总是处于相同的偏移量,这意味着在它必须具有固定大小之前的所有内容。块和inode位图总是一个块。块组描述符表不固定。文件上是这样写的:
根据定义了多少块组,此表可能需要多个存储块。在有疑问的情况下,一定要参考超级块。
假设您想为给定的inode查找inode表,您需要知道inode属于哪个块组。如果您知道块组的数目、块大小(S_日志_区块_大小)和每个块组的块数量(S_区块_每_组),就可以找到块组的开始,块组描述符表位于其中。它包含此块组(bg_inode_表格)的inode表的第一个块的块id。
Ext文件系统内部布局文档:http://www.nongnu.org/ext2-doc/ext2.html
发布于 2019-05-28 19:29:26
(发帖后,我意识到我迟了几年,无论如何,我会把这个答案留在这里)如果我正确理解了你的问题,就会对组描述符表中的内容和位图所指的内容产生混淆。
每个块组包含一个超级块、一组组描述符、块和inode位图以及一个inode表。组描述符集用于所有块组(超级块和组描述符是备份副本),但位图和inode表仅用于该块组。
因此,例如,如果您对第四个块组感兴趣,那么您可以从一个组描述符表中读取第四个条目(要么是磁盘开头的主表,要么是备份副本),然后从其中读取块号和inode位图所在位置。
注意:我上面写的并不完全正确,因为稀疏选项通常是默认设置的,而且并非所有块组都有一个超级块(以节省空间)。很容易在一个块中读取,因为它是一个超级块,测试超级块的s_magic字段,看看它是否等于EXT2_SUPER_MAGIC,如果它不正确,那么这个块组以位图开始。
Hoov发布的链接是一个很好的链接,这里还有另一个有用的链接-- http://cs.smith.edu/~nhowe/Teaching/csc262/oldlabs/ext2.html --它有几个令人困惑的方面,但是与Hoov的链接结合使用,应该可以帮助您启动和运行。https://wiki.osdev.org/Ext2也是好的。
https://unix.stackexchange.com/questions/306681
复制相似问题