我的任务是为 Windows 编写一个能够读取 ext2 分区的阅读器程序。
对于我的测试,我使用了一个格式化为 ext2 的驱动器和一个使用 mkfs 创建的文件(一个可以在 linux 下挂载并运行良好的文件)
出于某种原因,当我从驱动器(真正的)读取超级块时,我得到了所有正确的元数据(即块大小、inode 计数等),但是对文件执行完全相同的操作会返回错误的结果(这使得没有意义)。
2之间有区别吗?
我使用 \.\X: 打开驱动器,然后使用 mkfs 创建文件。
我的任务是为 Windows 编写一个能够读取 ext2 分区的阅读器程序。
对于我的测试,我使用了一个格式化为 ext2 的驱动器和一个使用 mkfs 创建的文件(一个可以在 linux 下挂载并运行良好的文件)
出于某种原因,当我从驱动器(真正的)读取超级块时,我得到了所有正确的元数据(即块大小、inode 计数等),但是对文件执行完全相同的操作会返回错误的结果(这使得没有意义)。
2之间有区别吗?
我使用 \.\X: 打开驱动器,然后使用 mkfs 创建文件。
分区上的 ext2 和存储在文件中的 ext2 之间应该没有任何区别(实际上没有;我刚刚检查过);但是,IIRC,如果 ext2 安装在裸磁盘上(例如/dev/sda
,而不是/dev/sda1
),则主超级块的偏移量是 2048 而不是 1024。这是为了容纳 MBR 和其他垃圾。(我刚刚在略读的文档中找不到它,但这在我的脑海中是我遇到的问题。)但是,安装到裸驱动器有点不寻常,所以我怀疑这是你的问题。
几年前我写了一些 ext2 实用程序,在开始手工编写之后,我转而使用 Ted Ts'o(ext2 文件系统创建者)的e2fsprogs,它带有头文件/库/等。以更灵活和可靠的方式完成所有这些工作。
您可能还想在0x438
文件/分区的偏移量处检查幻数0xEF53
,如果不存在,则认为它不是 ext2/3 文件系统,然后再拉入整个超级块,就像进行完整性检查一样。
以下是一些可能会有所帮助的文档:http ://www.nongnu.org/ext2-doc/ext2.html