我有一个有趣的案例,e2fsck
拒绝识别 qcow2 图像文件内的文件系统。使用testdisk
我可以看到分区,因此会留下一些标记。
出现这个问题的原因首先是因为虚拟机的主机挂掉了。
所以我选择None
分区的“类型”并得到以下结果。
TestDisk 6.14, Data Recovery Utility, July 2013
Christophe GRENIER <[email protected]>
http://www.cgsecurity.org
Disk /dev/loop0 - 120 GB / 112 GiB - 235156929 sectors
The harddisk (120 GB / 112 GiB) seems too small! (< 4079258 TB / 3710063 TiB)
Check the harddisk size: HD jumpers settings, BIOS detection...
The following partitions can't be recovered:
Partition Start End Size in sectors
> ext3 640 251657855 251657216 [DATA]
ext3 1864062 253521277 251657216 [DATA]
ext3 1864064 253521279 251657216 [DATA]
ext3 2387454 254044669 251657216 [DATA]
ext3 2387456 254044671 251657216 [DATA]
ext3 2911614 254568829 251657216 [DATA]
ext3 2911616 254568831 251657216 [DATA]
ext3 3435774 255092989 251657216 [DATA]
ext3 3435776 255092991 251657216 [DATA]
ext3 3959934 255617149 251657216 [DATA]
[ Continue ]
ext3 blocksize=4096 Large file Sparse superblock, 128 GB / 119 GiB
看起来超级区块仍然存在并且完好无损,但mount
只要我不知道它们位于哪里,我如何才能说服使用其中一个超级区块呢?
kpartx
在我对 qcow2/dev/loop0
执行常规操作后,没有看到任何内容。losetup -o 32256 /dev/loop0 imagefile
图像本身是(qemu-img info
):
file format: qcow2
virtual size: 120G (128849018880 bytes)
disk size: 112G
cluster_size: 65536
Format specific information:
compat: 0.10
注意:我确实有备份,但它们已经有几周了,如果可能的话,我会将磁盘上的内容与备份进行比较。大多数是 Git 和 Mercurial 存储库,因此可以从其他地方再次获取它们。
答案1
好吧,很抱歉这么快回答我自己的问题,但我注意到一些令人震惊的事情。该.qcow2
文件的大小为 120400379904 字节,而图像的转换为qemu-img convert -O raw
我提供了大小为 128849018880 字节的图像。
差别很大。
现在,如果我们获取 找到的扇区大小testdisk
,我们确实会注意到 512*251657216 是 128848494592,这恰好比“原始”图像的文件大小多 512 字节。我心想,这看起来很有希望。
我几年前生成了这些文件,所以我不确定是否将它们创建为稀疏图像。不过,如果qemu-img info
是这样的话,我心想,还是尝试一下转换一下图像格式吧。请记住,这不会更改原始文件!
qemu-img convert -O raw input output
完成这项工作,尽管速度很慢。
再次运行testdisk
该文件效果出奇的好,尽管我仍然无法说服 mount 使用不同的超级块,尽管-o sb=...
.
TestDisk 6.14, Data Recovery Utility, July 2013
Christophe GRENIER <[email protected]>
http://www.cgsecurity.org
Disk bigdata/vm_disk_vdb.img - 128 GB / 120 GiB - CHS 15666 255 63
Partition Start End Size in sectors
>P ext3 0 1 1 15664 239 62 251657216 [DATA]
Structure: Ok.
Keys T: change type, P: list files,
Enter: to continue
ext3 blocksize=4096 Large file Sparse superblock, 128 GB / 119 GiB
之后,我可以将testdisk
文件复制到一个目录中,并将其与我的备份进行比较。
有一些腐败,例如:
ext2fs_read_inode(ino=384492884) failed with error 2133571369.
还有其他小问题,但这些问题只影响所有文件和文件夹的大约 0.1%。按以下步骤开始testdisk
,以便能够找出哪些文件必须被视为已损坏:
testdisk /log imagefile.img