Filesystems
如何使用“超級塊讀取失敗”恢復 XFS 文件系統
我有一個來自 Buffalo LinkStation 的磁碟,上面有一個無法掛載的 XFS 分區。
將磁碟插入 Ubuntu 盒子上的 SATA->USB 盒。我得到以下資訊:
$ sudo fdisk -l /dev/sdb Disk /dev/sdb: 500.1 GB, 500107862016 bytes 255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System /dev/sdb1 63 594404 297171 83 Linux /dev/sdb2 594405 1590434 498015 83 Linux /dev/sdb4 1590435 976768064 487588815 5 Extended /dev/sdb5 1590498 1863539 136521 82 Linux swap / Solaris /dev/sdb6 1863603 976494959 487315678+ 83 Linux
問題分區是 /dev/sdb6。
$ sudo xfs_check /dev/sdb6 ERROR: The filesystem has valuable metadata changes in a log which needs to be replayed. Mount the filesystem to replay the log, and unmount it before re-running xfs_check. If you are unable to mount the filesystem, then use the xfs_repair -L option to destroy the log and attempt a repair. Note that destroying the log may cause corruption -- please attempt a mount of the filesystem before doing this.
因此,嘗試 xfs_repair -L 選項讓我陷入無法超越的境地:
$ sudo xfs_repair -L /dev/sdb6 Phase 1 - find and verify superblock... superblock read failed, offset 382252089344, size 131072, ag 89, rval -1 fatal error -- Input/output error
使用 photorec 我已經能夠從該分區中提取一些文件,因此數據在那裡並且磁碟在物理上工作。但是,超級塊存在問題。
我將如何恢復這個分區?
在 XFS 重放錯誤後,根據錯誤消息嘗試再次 MOUNT 分區。
如果一切變得太混亂,我強烈建議下載UFS Explorer以幫助從另一個系統進行深度文件恢復。
當我今天(大約 9.5 小時前)遇到這個問題時,上面的答案對我沒有幫助。我將在這裡介紹對我有用的解決方案,以及上一個答案沒有幫助的原因。
症狀
- 突然之間,
/home
無法保存/編輯中的任何文件等或列出的任何目錄。dmesg``xfs_do_force_shutdown called
在其他一些 xfs 消息周圍的某個地方顯示。xfs_repair
在第 1 階段失敗,superblock read failed
隨後是fatal error -- Input/output error
- 我的磁碟的其餘部分執行完美(包括
/
,即只是/home
不工作)。- 嘗試
mount
會導致superblock cannot be found
(或類似的)錯誤,但沒有提示下一步該做什麼。解決方案
該解決方案基於這篇文章Nigel Smith,XFS 的主要作者(如果我理解正確的話)。如果以前的連結過時,我將在此處重新發布這些步驟。以下所有操作必須以
root
(顯然)的方式執行。
- 執行驅動器的長時間自檢:
smartctl -t long /dev/sda
。可能還要等一下。smartctl -t short /dev/sda
如果有一個相對較新的長測試(如我的情況),您也可以執行一個短測試。- 使用以下選項檢查測試:
smartctl -l selftest /dev/sda
或smartctl -a /dev/sda
(後者顯示所有內容,但您需要的資訊幾乎在最後)。- 測試報告的最後一列稱為
LBA_of_first_error
。這是磁碟上第一個錯誤的位置。從最新的測試(編號為“#1”並位於列表頂部)中,獲取顯示的數字並將其除以 8 並截斷為整數值(參見關於原因的原始文章)。- 然後,您將清零這個特定的塊。這將導致該位置的特定文件損壞。(但是,如果您已經用盡了其他所有方法,那麼一些損壞的文件並不是什麼大問題。)。為此,請執行以下命令:
# dd if=/dev/zero of=/dev/sda conv=sync bs=4096 count=1 seek=*NUMBER_COMPUTED_EARLIER*
- 執行一個簡短的測試並等待一兩分鐘得到結果。重複此操作,直到簡短測試不顯示任何錯誤。或者,您可以檢查錯誤塊的大致數量。
smartctl -A /dev/hda | egrep 'Reallocated|Pending|Uncorrectable'
在我的情況下,我重複了步驟 1 到 4,直到我減少到 24 個錯誤。- 執行
xfs_repair /dev/sda
(不帶標誌-L
)。這可能會報告由於日誌日誌錯誤,您應該嘗試掛載文件系統。- 嘗試安裝該系統。就我而言,那失敗了,所以我不得不執行
xfs_repair -L /dev/sda
刪除日誌日誌(這可能導致數據被刪除)。- 掛載您的文件系統並進行最近的備份!
為什麼上述解決方案不再起作用
- 最初的職位已有幾年曆史。同時,對 XFS 進行了足夠多的更改,SuSE 團隊認為它足夠穩定,可以用作
/home
.xfs_check
已過時,取而代之的是xfs_repair -n
.- Debian 解決方案非常麻煩且浪費時間。到目前為止,Debian不支持 UEFI 引導,並且該資訊不在他們的下載頁面上,也不在他們的主要常見問題頁面上(在他們的 Wiki 上)。因此,為了使用它啟動,您需要在 BIOS 中禁用 UEFI Secureboot,然後使用密鑰啟動。之後,您會注意到預設情況下沒有安裝 xfs 工具。所以你
apt-get install xfsprogs
只會意識到,這是 Debian,他們的“穩定”軟體包實際上落後了很多年。長話短說,xfs_repair /dev/sda
永遠掛了。無法終止程序(即使使用 sigterm)。- UFS Explorer 是付費軟體。
- photorec 僅支持特定的文件類型(與您的 GPG 密鑰說再見)並恢復所有具有任意名稱的文件都在一個文件夾中。祝你順利通過所有這些並找到相關資訊。