如何在无分区qcow2的ext3文件系统中找到替代超级块?

如何在无分区qcow2的ext3文件系统中找到替代超级块?

我有一个有趣的案例,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

相关内容