如何识别 ext4 分区的相关部分

如何识别 ext4 分区的相关部分

背景:我需要使用 uboot 从 eMMC 克隆 ext4 分区(如果需要,还需要自定义裸机代码)。我使用复制了整个分区mmc read,发现大部分分区都是空的,但是有一些数据块(例如 inode 表)分布在分区上。这意味着我需要复制整个分区(这太慢了,我需要经常这样做)或确定分区的哪些部分是相关的。

与此问题最类似的问答建议使用dd创建稀疏图像或管道到gzip,但我没有运行操作系统,因此我需要了解文件系统布局。我可以使用这些位图块来识别哪些内容已使用,哪些内容是免费的吗? ext4的文档似乎一涉及到细节就参考了linux内核代码。

我最好使用 uboot 代码来完成此操作,但我也可以编写一些可以从 uboot 执行的裸机代码。

还有一个边界条件:分区克隆的目标不为空,因此如果原点上有只有零的块,而这些块需要为零,我需要在目标上覆盖那些带有零的块。

答案1

如果您无法在您的环境中挂载原始文件系统,您可以用来debugfs检查文件系统布局以及copy目标文件。通过一些工作,您可以编写脚本debugfs来列出、遍历、将原始文件系统复制到临时位置,然后用于mke2fs -d将其写入新文件系统,或者直接将其复制到目标位置。

如果您愿意编写自己的代码,您可以使用libext2fs打开文件系统,读取目录树,并将其递归复制到目标文件系统(也可以使用 libext2fs 打开)。这将是很多比编写任何自己的代码来处理磁盘上的 ext4 格式更容易。

如果在您的环境中将 eMMC 设备作为块设备访问存在障碍(抱歉,我对此一无所知,只知道 ext4 方面),那么您可以为 libext2fs 编写一个自定义 IO 驱动程序(如lib/ext2fs/unix_io.c.../nt_io.c),该驱动程序可以读取/直接编写eMMC设备,然后使用debugfs+scripts或自定义的libext2fs复制工具。

答案2

用于e2image -ar复制文件系统的相关部分。它了解文件系统并复制所有需要的元数据和文件使用的数据块,同时跳过未使用的空间。

相关内容