当前位置: 技术问答>linux和unix
文件系统ext2的一些不理解
来源: 互联网 发布时间:2016-05-13
本文导语: 手头只有深入理解linux内核第三版的E文版,所以也只能贴出E文原文来提问了。(第18.2节) Each block in a block group contains one of the following pieces of information: A copy of the filesystem's superblock A copy of the group of bl...
手头只有深入理解linux内核第三版的E文版,所以也只能贴出E文原文来提问了。(第18.2节)
Each block in a block group contains one of the following pieces of information:
A copy of the filesystem's superblock
A copy of the group of block group descriptors
A data block bitmap
An inode bitmap
A table of inodes
A chunk of data that belongs to a file; i.e., data blocks
每个block group 都包含了一个文件系统的superblock的副本,这个可以理解,但是为什么包含一个block group descriptors的副本我就不能理解了。一个block group descriptor包含如下信息:
Block number of block bitmap
Block number of inode bitmap
Block number of first inode table block
Number of free blocks in the group
Number of free inodes in the group
Number of directories in the group
Alignment to word
Nulls to pad out 24 bytes
第4-6项信息分明表达的是自己块组的信息,为什么要让所有的块组都用一个副本呢?
-------------------------------第2个问题的分隔线----------------------------
How many block groups are there? Well, that depends both on the partition size and the block size. The main constraint is that the block bitmap, which is used to identify the blocks that are used and free inside a group, must be stored in a single block. Therefore, in each block group, there can be at most 8xb blocks, where b is the block size in bytes. Thus, the total number of block groups is roughly s/(8xb), where s is the partition size in blocks.
block bitmap用于记录组内哪些block已被或未被使用,那假设1:他只记录了Data blocks的使用状况的话,那一个block group的大小肯定大于8xb,因为还要加上super block等等block的大小。假设2:block bitmap记录了自己所在block group里所有block的使用状态的话,那岂不是诸如group descriptors之类的block必定一直被标为已使用?
Each block in a block group contains one of the following pieces of information:
A copy of the filesystem's superblock
A copy of the group of block group descriptors
A data block bitmap
An inode bitmap
A table of inodes
A chunk of data that belongs to a file; i.e., data blocks
每个block group 都包含了一个文件系统的superblock的副本,这个可以理解,但是为什么包含一个block group descriptors的副本我就不能理解了。一个block group descriptor包含如下信息:
Block number of block bitmap
Block number of inode bitmap
Block number of first inode table block
Number of free blocks in the group
Number of free inodes in the group
Number of directories in the group
Alignment to word
Nulls to pad out 24 bytes
第4-6项信息分明表达的是自己块组的信息,为什么要让所有的块组都用一个副本呢?
-------------------------------第2个问题的分隔线----------------------------
How many block groups are there? Well, that depends both on the partition size and the block size. The main constraint is that the block bitmap, which is used to identify the blocks that are used and free inside a group, must be stored in a single block. Therefore, in each block group, there can be at most 8xb blocks, where b is the block size in bytes. Thus, the total number of block groups is roughly s/(8xb), where s is the partition size in blocks.
block bitmap用于记录组内哪些block已被或未被使用,那假设1:他只记录了Data blocks的使用状况的话,那一个block group的大小肯定大于8xb,因为还要加上super block等等block的大小。假设2:block bitmap记录了自己所在block group里所有block的使用状态的话,那岂不是诸如group descriptors之类的block必定一直被标为已使用?
|
第一个问题:关于磁盘块组描述符的备份问题:
在每个磁盘块组中都记录了EXT2分区中所有块组描述符的备份,它们被连续存放在紧接着超级块后面的磁盘块中,形成磁盘块组描述符表。Linux在使用的时候,仅仅使用第0个磁盘块组中的磁盘块组描述符表。多个磁盘块组描述符信息表形成的冗余可以用来恢复被损坏的磁盘块组描述符表。
第二个问题:
就在于block_bitmap到底是针对一个block_group中所有块的,还是仅仅针对数据块的
在每个磁盘块组中都记录了EXT2分区中所有块组描述符的备份,它们被连续存放在紧接着超级块后面的磁盘块中,形成磁盘块组描述符表。Linux在使用的时候,仅仅使用第0个磁盘块组中的磁盘块组描述符表。多个磁盘块组描述符信息表形成的冗余可以用来恢复被损坏的磁盘块组描述符表。
第二个问题:
就在于block_bitmap到底是针对一个block_group中所有块的,还是仅仅针对数据块的
|
第一个我问题,你的理解错了。应该是说“块组中的每一个块包含下列信息中的一条",而不是说”一个块包含列出来的所有信息“。你觉得这样可能吗?你如果觉得看书没看明白,这个时候你应该去看看代码究竟怎么做的。(我还没看过代码哈)
你还应该看紧接着一段说的"As you can see from Figure 18-1, both the superblock and the group descriptors are duplicated in each block group. ",这是告诉你,每个块组都复制了superblock和group descriptors.
第二个问题,你前面一堆没大看明白,不过对于你的疑问,我的回答是当然的,group descriptors之类所在的块肯定应该被标为已用。另外,bitmap当然是应该是既记录了已用的block,也记录了未用的block,你的假设不成立。其实bitmap就是一个表格,每个block在里面对应一个bit,如果block使用了就标1,如果block空闲就标0. 这是常识哦,建议看源码。
你还应该看紧接着一段说的"As you can see from Figure 18-1, both the superblock and the group descriptors are duplicated in each block group. ",这是告诉你,每个块组都复制了superblock和group descriptors.
第二个问题,你前面一堆没大看明白,不过对于你的疑问,我的回答是当然的,group descriptors之类所在的块肯定应该被标为已用。另外,bitmap当然是应该是既记录了已用的block,也记录了未用的block,你的假设不成立。其实bitmap就是一个表格,每个block在里面对应一个bit,如果block使用了就标1,如果block空闲就标0. 这是常识哦,建议看源码。
|
给你置顶7天
|
懂E文还是好的
|
,group descriptors