Ext4

請幫我搶救出故障的硬碟

  • April 7, 2021

我儲存所有數據的兩個硬碟驅動器都出現故障。我的系統反复拒絕載入磁碟和掛載分區。我將一個硬碟驅動器移到了另一台電腦上,它被辨識出來的問題較少,但分區有很多錯誤,我仍然在該驅動器的 dmesg 上收到 E/S 錯誤。

用於啟動的分區有一個壞的超級塊,但可以用另一個超級塊讀取它,它會顯示更多錯誤,所以我首先在外部硬碟驅動器上對分區進行了主備份。出於這個原因,我對 ddrescue 進行了兩次傳遞,根據日誌,它只有一個 512 字節的錯誤退出,我認為這是有希望的。

使用 lsblk 列出備份看起來更有希望:

損壞分區的 lsblk 顯示:

$lsblk -f
NAME   FSTYPE   LABEL        UUID                                 MOUNTPOINT
...
sda                                                               
└─sda1  
...                                                         
                                                

現在的主人展示的地方:

sdc                                                               
├─sdc1 ext4     new          8cab6f75-1ea7-4451-9f48-2bbcce167184 

現在我從這個主分區做了另一個備份到同一個驅動器的末尾,所以 lsblk 的實際輸出是:

lsblk -f
NAME   FSTYPE   LABEL        UUID                                 MOUNTPOINT
fd0                                                               
loop0  squashfs                                                   /snap/anbox-installer/25
loop2  squashfs                                                   /snap/core/9669
loop3  squashfs                                                   /snap/core/10911
sda                                                               
└─sda1                                                            
sdb                                                               
├─sdb1 ext4     Debian_copia ce2c8e8f-f3ef-4005-9cb1-0bb9d5870f43 /
└─sdb2 swap                  d60a8ad0-5528-4bbc-af5e-092b96282df4 [SWAP]
sdc                                                               
├─sdc1 ext4     new          8cab6f75-1ea7-4451-9f48-2bbcce167184 
└─sdc2 ext4     new          8cab6f75-1ea7-4451-9f48-2bbcce167184 
sr0                                                               

現在這裡是遺漏的地方,我將 fsck 的選項 p 誤認為選項 f 所以我已經完成了

fsck -fy /dev/sdc2

這搞砸了一些事情並刪除了一些節點,在安裝後列出了一半的文件應該是,幸運的是這是損壞硬碟的副本,所以這次我會更加謹慎。

你能告訴我一些好的做法嗎?我的所有數據現在都在賭博,所以請準確。

lsblk 是否對分區進行任何更改?我可以掛載分區而不對其進行任何更改嗎?順便說一句,我有這個連結方便:https ://www.sans.org/blog/how-to-mount-dirty-ext4-file-systems/

如何安全地進行 fsck 以便我可以在這裡贏得一些時間?fsck -n 是否仍然對分區進行更改?磁碟中的分區副本在哪裡有什麼區別嗎?

有沒有辦法在不處理文件系統的情況下恢復文件?我已閱讀有關 photorec 的資訊,但我有許多它無法辨識的大膽文件。沒有更通用的嗎?

不要恐慌

看來您正在嘗試使用臟的 ext4 文件系統使硬碟驅動器故障。

你有備份嗎?如果有備份,請從備份中恢復。如果您沒有備份,則必須非常小心地處理這裡。首先要做的是把手從鍵盤上移開,制定一個遊戲計劃。並確保啟動infoman為您要執行的每個命令,尤其是直接接觸硬碟的工具。

限制對受損媒體的訪問

如果硬碟出現故障,您應該停止進一步嘗試直接從磁碟訪問文件。您應該停止任何嘗試執行fsck。您對硬碟進行的活動越多,您對可能發生故障的硬碟造成的磨損就越大。如果您從這些磁碟之一啟動作業系統,也請停止此活動。從GRML Linux等實時媒體引導。

相反,您應該嘗試對故障硬碟進行映像。這涉及將硬碟逐位複製到另一個儲存設備上的文件中。理想情況下,其他儲存設備應該非常大,因此您可以儲存圖像的多個副本。恢復工具完成盡可能多的數據恢復後,將此圖像標記為只讀。這將成為主副本。你不要碰這個圖像。相反,製作主副本fsck的副本並mount在此工作副本上執行和執行。如果您犯了錯誤,這沒什麼大不了的——您只需從主副本創建一個新的**工作副本。

創建主副本

另請參閱Pourko連結的unix SE 答案

GNU ddrescue非常適合恢復數據硬碟。像這樣執行它:

ddrescue --idirect /dev/sdX /mnt/big-storage-filesystem/sdX.img /mnt/big-storage-filesystem/sdX.mapfile

(這--idirect使 ddrescue 可以更好地控制磁碟訪問。)

一旦 ddrescue 完成,我建議執行chmod a-w sdX.img sdX.mapfile. 這些不應該在之後修改。

嘗試從工作副本中恢復

首先製作你的工作副本

cp /mnt/big-storage-filesystem/sdX.img /mnt/big-storage-filesystem/work/work-sdX.img

然後使用 losttup 將圖像映射到塊設備文件:

losetup -a /mnt/big-storage-filesystem/work/work-sdX.img

您可能需要執行上述命令的輸出所指示的環回設備kpartx -a /dev/loopN在哪裡。/dev/loopN

現在您可以像訪問另一個硬碟一樣訪問該圖像。

檢查lsblk,你應該可以做fsck -y /dev/loop0p1之類的。

如果你很幸運,你可以mount /dev/loop0p1 /mnt/recovery從那裡開始。

如果您不那麼幸運,您可能需要使用取證工具從損壞的文件系統中獲取數據。有關範例,請參閱此unix SE 文章。

從這次經歷中學習

進行備份並驗證您的備份。想像一下,如果您沒有在 unix SE 上提出這個問題,並且不費吹灰之力試圖恢復不可替代的數據,您會做什麼。技術總是在變化,技術不會老化,所以預測數據失去是個好主意。

如果您的磁碟在物理上出現故障,那麼對其進行更多的寫操作(如使用 fsck)只會讓事情變得更糟。為了增加從該磁碟恢復數據的機會,您應該立即停止使用該磁碟。現在解除安裝它。訂購一個新磁碟,當您的新磁碟到貨時,將一個普通的 Linux 發行版引導到命令提示符,並將ddrescue舊磁碟引導到新磁碟,如此所述。請記住:不要從舊磁碟掛載任何文件系統,以免造成進一步的損壞。

引用自:https://unix.stackexchange.com/questions/643386