- 论坛徽章:
- 0
|
本帖最后由 splendid12 于 2012-03-04 00:06 编辑
--------------------------------------------------------------------------------------------------------------------------------------------
第 1 个问题:
首先明确一个问题,那就是这样图:
以我的虚拟机硬盘为例,dumpe2fs /dev/sda1 的结果:
...
first inode 11
...
Group 0:
...
inode table at 5-255
...
必须清楚,这些数值是指 block 号:一个文件系统的最小存储单位就是 block,从 0 开始编号。
好,第一个 inode,即在 group 0 中的 inode ,编号 5-255,但是上面确实显示的是 first inode 11,即第一个 inode 应该在 11 号 block,
为什么?
这是标准规定的:
inode 2,后面解释根目录;因此所有的分区,跟目录都是 inode 2
inode 5,是 boot loader inode
注意:inode 是从 1 开始编号的!而 block 是从 0 开始编号的!
看看 ls -id / /boot
发现 2 / 2 /boot,说明 /boot 是一个根目录, / 又是一个根目录,但是他们处在不同的文件系统
标准规定,第一个 inode 是从 11 开始的
(其实这里面还有一个小小的问题,其实 first inode 是依据一个 super block 中的值决定到底是多少的,但是你可以简单地理解成从 11 开始)
--------------------------------------------------------------------------------------------------------------------------------
第 2 个问题:
Group descriptor 是一个 group 的描述符,里面有极其重要的信息。
但是每个 group 在存放 Group descriptor 时,并不只是存放自己的 Group 的 Group descriptor!
每个 group 都有 Group descriptor table,为什么是 table,因为他是一个 Group descriptor 的集合嘛:
每个 table 存储了本文件系统的所有 group 的 group descriptor。
而且 标准 规定,需要在group 号为 0,1,3,5,7,
以及3 5 7的指数的 group block 号中做拷贝,如 9,25,49,... 作备份,
(标准还规定,super block 的备份 和 Group descriptor table 的备份 使用相同的策略,也就是说,super block 也存放了本文件系统所有的元信息)
这是为什么?
为了备份:适当的数据冗余增加了健壮性。
题外话,这就是为什么你是对称的:即使你有一个手坏了,你还有另一个;备份是宇宙的法则 —— 适用于一切系统。
以我的虚拟机硬盘为例,如下图:
每个 desc table 占用 1 个 block size,block size 没忘吧,就是一个文件系统的最小储存单位。
------------------------------------------------------------------------------------------------------------------------------------------
如果你想搞清楚更多细节问题,请详细地阅读我的这篇文章:(最好具有 C 和 数据结构 的基础)
http://lizeaaaa.blog.163.com/blo ... 218201211052844840/
对 ext2/3 文件系统的 数据结构的 研究,我只学了3天的 Linux 就能看懂了,我花了 40+ 个小时(2天只睡了5小时)才完成上面链接的文章。
你只需要花比我少的时间,在这篇文章的帮助下,也许更快就能搞懂 ext2/3 的文件系统的 数据结构了。
加油搞啊! |
|