恢复包含一些坏块的大文件

恢复包含一些坏块的大文件

我有一个带有 LVM 的 SSD,其中一个 LV 专用于 80Gb 的 Win7 VM .vdi 文件。

底层fsext4.

安装新 SSD 并在迁移中设置新 LV 后,从旧 SSD 进行复制失败,并显示

Input Output Err No.5 

失败于cp, rsync,dd

快速浏览一下

dmesg

[ 5829.294651] sd 2:0:0:0: [sdb] tag#14 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE cmd_age=0s
[ 5829.294653] sd 2:0:0:0: [sdb] tag#14 Sense Key : Medium Error [current] 
[ 5829.294654] sd 2:0:0:0: [sdb] tag#14 Add. Sense: Unrecovered read error - auto reallocate failed
[ 5829.294656] sd 2:0:0:0: [sdb] tag#14 CDB: Read(10) 28 00 51 50 f9 47 00 00 08 00
[ 5829.294658] blk_update_request: I/O error, dev sdb, sector 1364261191 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0 

自测试smartctl导致 LBA 失败

badblocks显示了 6 个坏块,并进一步检查debugfs确认inode所有坏块都属于 .vdi 文件。

该 LV 上没有任何内容,除了当前仍可以正常启动的虚拟机virtualbox(也不会复制虚拟机)。

因此,假设坏块位于虚拟机文件系统中一些很少使用的部分,并且它并不关心(目前),但这一天将会到来。

现在我不能怪我的Linux机器不喜欢Win7虚拟机,但我想拯救这个老女孩,哪怕只是为了感情。

有没有办法恢复 .vdi,也许是在读取错误时默认使用零填充块并跳到下一个块?

刚刚发现

https://serverfault.com/questions/489696/recovering-a-file-with-bad-blocks-in-the-middle

当我打字时......尝试一下

答案1

我没有在 U&L 上找到并回答,但是服务器故障提供了一份。

所以我将把他们的解决方案留在这里供其他人使用。如果 U&L 中存在骗局,请告诉我,在这种情况下,我会将其删除。

解决方案很简单

dd if=Win7.vdi of=~/mnt/Win7.vdi bs=4k conv=noerror,sync

检查块大小正确后。

现在一切都好了。

相关内容