我的任务是为windows编写一个能够读取ext2分区的阅读器程序。
对于我的测试,我使用一个格式化为ext2的驱动器和一个使用mkfs创建的文件(一个在linux下运行良好的挂载文件)
出于某种原因,当我从驱动器(真正的驱动器)读取超级块时,我得到了所有正确的元数据(即块大小、索引节点计数等),但对文件执行完全相同的操作会返回错误的结果(这毫无意义)。
两者有区别吗?
我使用\打开驱动器。\X:
我用mkfs制作文件。
最佳答案
分区上的ext2和存储在文件中的ext2应该没有任何区别(实际上没有区别;我刚刚检查过);但是,IIRC,如果ext2安装在裸磁盘上(例如/dev/sda
而不是/dev/sda1
),那么主超级块的偏移量是2048而不是1024。这是为了容纳MBR和其他垃圾。(我在刚才浏览的文档中找不到它,但这在我的脑海中很突出,就像我遇到的一样。)不过,安装到光驱上有点不寻常,所以我怀疑这是你的问题。
几年前我编写了一些Ext2实用程序,在开始手写之后,我切换到使用TED TSO(Ext2文件系统创建者)的“AA>”,这是用头文件/库等来做的,以更灵活和可靠的方式来完成这一切。
您可能还希望在偏移量0x438
处检查文件/分区中是否存在幻数0xEF53
,并在拉入整个超级块之前,将其视为不是ext2/3文件系统(如果没有)。
以下是一些可能有用的文档:e2fsprogs
关于linux - ext2“图像”文件与真正的ext2设备,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5234213/