首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

深入解析 ext2 文件系统(4)

深入解析 ext2 文件系统(4)

看上图,debugfs出来的信息,Group 2,并没有所谓的组描述符。而Group1,用8194和8195两个块来存储。OK,我们看下,里面存储的是什么东西。
       

            Group 0里面第2和第3块存储的是组描述符,也就说从0x000800~0x001000是组描述符块的内容。
       
                       
                           
  •                                 000800 04 01 00 00 05 01 00 00 06 01 00 00 ef 1d e5 07
                           
  •                                 000810 02 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 块组0的组描述符
                           
  •                                 -----------------------------------------------------------------------                       
  •                                 000820 04 21 00 00 05 21 00 00 06 21 00 00 fd 1d f0 07
                           
  •                                 000830 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 块组1的组描述符
                           
  •                                 -----------------------------------------------------------------------                       
  •                                 000840 01 40 00 00 02 40 00 00 03 40 00 00 00 1f f0 07
                           
  •                                 000850 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 块组2的组描述符
                           
  •                                 ------------------------------------------------------------------------                       
  •                                 000860 04 61 00 00 05 61 00 00 06 61 00 00 fd 1d f0 07
                           
  •                                 000870 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00
                           
  •                                 000880 01 80 00 00 02 80 00 00 03 80 00 00 00 1f f0 07
                           
  •                                 000890 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00
                           
  •                                 0008a0 04 a1 00 00 05 a1 00 00 06 a1 00 00 fd 1d f0 07
                           
  •                                 0008b0 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00
                           
  •                                 0008c0 01 c0 00 00 02 c0 00 00 03 c0 00 00 00 1f f0 07
                           
  •                                 0008d0 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00
                           
  •                                 0008e0 04 e1 00 00 05 e1 00 00 06 e1 00 00 fd 1d f0 07
                           
  •                                 0008f0 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00
                           
  •                                 000900 01 00 01 00 02 00 01 00 03 00 01 00 00 1f f0 07
                           
  •                                 000910 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00
                           
  •                                 000fb0 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00
                           
  •                                 000fc0 01 c0 07 00 02 c0 07 00 03 c0 07 00 ff 0e f0 07                       
  •                                 000fd0 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 块组62的组描述符
                           
  •                                 -----------------------------------------------------------------------                       
  •                                 000fe0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                       
  •                        
  •                                 *                                                     没有块组63                       
  •                                 ----------------------------------------------------------------------                       
  •                                 001000 04 20 00 00 04 60 00 00 04 a0 00 00 04 e0 00 00                       
  •                
       
     04 01 00 00 转换成可读的十进制是0x104=259,表示数据位图位于第259块block。inode位图位于260,和debugfs出来的信息是一样的(不算启动块)。0x1def=7663个空闲数据块....
       

            各位看官可以自己解析任何一个块组的相关信息,可以证明和debugfs出来的块组的信息是一致的。现在我们确定了,组描述符以数组的形式存储在K个快上,对于我们只有63个组块,每个组块需要32个字节,只需要2个1KB的block就足够了。这就是说,其实组描述符和超级块一样,其实是冗余的。也就是说,其他存储组描述符的两个block,信息和块组0中的组描述符的两个block是一样的。下面我来证明。
       

            块组25也有组描述符块,204802和204803两个块,记录了63个块组的组描述符信息。内容应该和前面的块组0的两个块一致。我已经取出了这两个block的内容,大家自己比较吧,结果是内容是一样的。

       
                   
  •                         Group 25: (Blocks 204801-212992)
                   
  •                           备份 superblock at 204801, Group descriptors at 204802-204803
                   
  •                           保留的GDT块位于 204804-205059
                   
  •                           Block bitmap at 205060 (+259), Inode bitmap at 205061 (+260)
                   
  •                           Inode表位于 205062-205315 (+261)
                   
  •                           7677 free blocks, 2032 free inodes, 0 directories
                   
  •                           可用块数: 205316-212992
                   
  •                           可用inode数: 50801-52832       


                                                点击(此处)折叠或打开               
       
                       
                           
  •                                 root@libin:/mnt/bean# dd if=/dev/loop0 bs=1k skip=204802 count=2|od -tx1 -Ax > /tmp/dump_hex_                       
  •                                 记录了2+0 的读入                       
  •                                 记录了2+0 的写出                       
  •                                 2048字节(2.0 kB)已复制,0.000160205 秒,12.8 MB/秒                       
  •                                 root@libin:/mnt/bean# vi /tmp/dump_hex_                        
  •                        
  •                        
  •                                 000000 04 01 00 00 05 01 00 00 06 01 00 00 ef 1d e5 07                       
  •                                 000010 02 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00                       
  •                                 000020 04 21 00 00 05 21 00 00 06 21 00 00 fd 1d f0 07                       
  •                                 000030 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00                       
  •                                 000040 01 40 00 00 02 40 00 00 03 40 00 00 00 1f f0 07                       
  •                                 000050 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00                       
  •                                 000060 04 61 00 00 05 61 00 00 06 61 00 00 fd 1d f0 07                       
  •                                 000070 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00                       
  •                                 000080 01 80 00 00 02 80 00 00 03 80 00 00 00 1f f0 07                       
  •                                 000090 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00                       
  •                                 0000a0 04 a1 00 00 05 a1 00 00 06 a1 00 00 fd 1d f0 07                       
  •                                 0000b0 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00                       
  •                                 ....                       
  •                        
  •                                 0007c0 01 c0 07 00 02 c0 07 00 03 c0 07 00 ff 0e f0 07                       
  •                                 0007d0 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00                       
  •                                 0007e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                       
  •                                 *                       
  •                                 000800               
       

          

            最后,最后的最后,解释以下,为什么每个块组中的块数blocks per group 是8192,因为,我们用1个块作为位图保存本块组 block的使用情况(bit为1表示对应的block被使用,bit为0表示对应的block空闲),1个block是1024字节,共有1024*8=8192个bit,所以,每个块组最多只能是81292个块。
       

            同样道理如果用户使用的是4094大小的块,那么,4096*8=32768个bit,所以每个块组会有32K个块。证据在下面。
继承事业,薪火相传
返回列表