[英]Truncated file in XFS filesystem using dd - how to recover
磁盤布局我的 HDD RAID 陣列即將報廢,我為它購買了一些新磁盤。 舊硬盤我已用作 kvm/qemu 虛擬機的原始磁盤映像的存儲。 RAID 陣列是使用 mdadm 構建的。 在 md 設備上,我有 LVM 的物理卷。 在物理卷上,我有存儲原始磁盤映像的 XFS 文件系統。 每個原始磁盤映像都是由 qemu-img 制作的,並包含 LVM 的物理卷。 一個 PV = 一個 LV = 一個原始磁盤映像內的 VG。
操作當我嘗試使用 cp 進行數據移動時,我在我的 raid 陣列中遇到了壞塊和 i/o 問題,所以我從 cp 切換到 dd,沒有錯誤,同步標志我寫了dd if=/mnt/old/file.img of=/mnt/**old**/file.img bs=4k conv=noerror,sync
問題現在文件 /mnt/old/file.img 在 XFS 文件系統中的大小為零。 有沒有簡單的解決方案來恢復它?
我的感覺是您的 RAID 陣列出現故障。 您可以看到 RAID state 與...
cat /proc/mdstat
由於您看到可能是問題根源的 i/o 錯誤。 最好的前進路徑是為每個 RAID 成員(或至少拋出 i/o 錯誤的成員)制作扇區級副本。 請參閱 Linux ddrescue。 它旨在復制失敗的硬盤驅動器。 然后從副本執行恢復工作。
最后我找到了解決方案,但這並不是很簡單。
Xfs_undelete 沒有匹配我的問題,因為它不支持非常大的文件的 B+Tree 范圍存儲格式 (V3)。
成功解決我的問題的成功半手動程序由以下主要步驟組成:
我已經在GitHub的 LGPL 許可下發布了恢復腳本
PS 由於 inode b+tree extent 記錄損壞,一些數據丟失了,但它們對我來說沒有意義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.