我尝试在 ext3 文件系统中通过命令“dd”查看超级块。
dd if=/dev/sda3 bs=4096 skip=1 count=1 of=superblock
但是超级块文件中的结果不正确(我比较了从 dumpe2fs 获得的 Inodes 计数值)。设备文件 /dev/sda3 是从引导块开始的,然后是从 group0 的超级块开始的?另一个问题是引导块和超级块的大小都是 BLOCKSIZE(这里是 4096)?ext2/ext3 的磁盘格式(我认为它们相同)如下所示:
答案1
ext2/ext3 文件系统的启动块长度为 1024 字节,而不是 4096 字节。使用
$ sudo tune2fs -l /dev/sda3
将文件系统参数视为块大小,以及
$ sudo dumpe2fs -hx /dev/sda3
获取超级块。此外
$ sudo dd if=/dev/sda3 bs=1k skip=1 count=4
将获得超级块。
答案2
感谢 dtmilano 的回答。我在提问之前已经尝试过了。但我认为结果是错误的。问题是我忘记转换小端字节序了!!
下面我把我的步骤写下来供大家参考:
$ sudo dd if=/dev/sda3 bs=1k skip=1 count=4
超级块中的第一行是:0000000: 0000 3a04 fdc4 3904 a616 3600 45f6 fc00 ..:...9...6.E...
因此根据 ext3_fs.h 中的 struct ext3_super_block 声明:/00/ __le32 s_inodes_count; /* Inode 数量/__le32 s_blocks_count;/块数 */
inode 数量为 043a0000 = 70909952(0000 3a04 应转换为 043a0000)块数量为 0439c4fd = 70894845
它与 dumpe2fs 的输出相同:Inode 计数:70909952 块计数:70894845