我正在尝试在虚拟磁盘上重新创建文件系统元数据。我可以使用 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 -Q
。e2image -r
例如:
# e2image -Q /dev/sdb1 image.qcow2
# e2image -r image.qcow2 /dev/sdb2
请注意,我使用1.42.12
e2fsprogs 版本对此进行了测试。
从 开始>= 1.42.9
,e2image
还支持-a
允许您除了元数据之外还包含文件系统数据的标志:
# e2image -Qa /dev/sdb1 image-full.qcow2
# e2image -r image-full.qcow2 /dev/sdb2
我验证了在这种情况下e2image -r
只将分配的块写回目标,而qemu-img convert
似乎写入了整个逻辑文件系统。这可以为部分使用的文件系统节省大量 I/O。