e2image 恢复文件系统元数据

e2image 恢复文件系统元数据

我正在尝试在虚拟磁盘上重新创建文件系统元数据。我可以使用 e2image 保存此元数据,并且 e2image 手册页告诉我可以使用它e2image -I来恢复文件系统。不幸的是,手册页没有提供有关如何使用此参数的任何信息。我​​尝试了以下内容(命令结果缩进以便于阅读):

msk $ e2image /dev/nbd1 -I test.qcow2
  e2image 1.42.5 (29-Jul-2012)
  e2image: Wrong magic number for Ext2 Image Header while trying to open test.qcow2
msk $ sudo e2image /dev/nbd1 -I test.qcow2
  e2image 1.42.5 (29-Jul-2012)
  e2image: Wrong magic number for Ext2 Image Header while trying to open test.qcow2
msk $ sudo e2image test.qcow2 -I /dev/nbd1
  e2image 1.42.5 (29-Jul-2012)
  e2image: Wrong magic number for Ext2 Image Header while trying to open /dev/nbd1

我的文件系统实际上是 ext4,但手册页显示以下内容:

The e2image program will save critical ext2, ext3, or ext4

我使用以下命令来创建图像:

sudo e2image -Q /dev/mapper/nbd0p1 test.qcow2

答案1

e2image 支持三种不同的格式;默认情况下,它会创建一个“普通”的自定义 e2image 文件格式。使用 -r 它会创建一个大型稀疏文件,其中包含适当偏移量的元数据,使用 -Q 它会创建一个 qcow2 格式的文件。(-Q 选项是最近添加的,以使大型文件系统映像更易于移植)。

尽管从手册页中根本看不清楚,但 -I 选项仅对“正常”的 e2image 文件格式有效 - 即没有使用 -r 或 -Q 创建的图像。

由于您有一个 qcow2 图像,您可以使用 qemu-img 将其写回块设备:

# qemu-img convert -O raw test.qcow2 /dev/nbd1

然而,你应该知道你的 e2image 生成的图像包含仅元数据,即根本没有文件数据。您将写出指向 /dev/nbd1 上文件数据的各个块的元数据,因此文件将包含先前位于 /dev/nbd1 上这些块中的任何数据。

所以我已经告诉你如何去做,但请确保这确实是你想要做的!

答案2

可以使用 恢复创建的 QCOW2 映像e2image -Qe2image -r例如:

# e2image -Q /dev/sdb1 image.qcow2
# e2image -r image.qcow2 /dev/sdb2

请注意,我使用1.42.12e2fsprogs 版本对此进行了测试。

从 开始>= 1.42.9e2image还支持-a允许您除了元数据之外还包含文件系统数据的标志:

# e2image -Qa /dev/sdb1 image-full.qcow2
# e2image -r image-full.qcow2 /dev/sdb2

我验证了在这种情况下e2image -r只将分配的块写回目标,而qemu-img convert似乎写入了整个逻辑文件系统。这可以为部分使用的文件系统节省大量 I/O。

相关内容