Filesystems
恢復包含一些壞塊的大文件
我有一個帶有 LVM 的 SSD,其中一個 LV 專用於 80Gb 的 Win7 VM .vdi 文件。
底層
fs
是ext4
.安裝新 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
(也不會複製虛擬機)。所以假設壞塊位於VM文件系統的一些很少使用的部分中,它並不關心(還),但那一天會到來。
現在我不能責怪我的 Linux 機器不喜歡 Win7 虛擬機,但如果只是為了感情,我想拯救這個老女孩。
有沒有辦法恢復.vdi,也許是在讀取錯誤時預設為零填充塊並跳到下一個塊?
剛發現
https://serverfault.com/questions/489696/recovering-a-file-with-bad-blocks-in-the-middle
我一打字……試一試
我沒有在 U&L 上找到並回答,但serverfault提供了一個。
所以我會把他們的解決方案留給其他人。讓我知道 U&L 中是否存在欺騙,在這種情況下,我會將其刪除。
解決方案很簡單
dd if=Win7.vdi of=~/mnt/Win7.vdi bs=4k conv=noerror,sync
檢查塊大小是否正確後。
現在一切都好。