請幫我搶救出故障的硬碟
我儲存所有數據的兩個硬碟驅動器都出現故障。我的系統反复拒絕載入磁碟和掛載分區。我將一個硬碟驅動器移到了另一台電腦上,它被辨識出來的問題較少,但分區有很多錯誤,我仍然在該驅動器的 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 文件系統使硬碟驅動器故障。
你有備份嗎?如果有備份,請從備份中恢復。如果您沒有備份,則必須非常小心地處理這裡。首先要做的是把手從鍵盤上移開,制定一個遊戲計劃。並確保啟動
info
或man
為您要執行的每個命令,尤其是直接接觸硬碟的工具。限制對受損媒體的訪問
如果硬碟出現故障,您應該停止進一步嘗試直接從磁碟訪問文件。您應該停止任何嘗試執行
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
舊磁碟引導到新磁碟,如此處所述。請記住:不要從舊磁碟掛載任何文件系統,以免造成進一步的損壞。