Filesystems

如何使用“超級塊讀取失敗”恢復 XFS 文件系統

  • May 19, 2019

我有一個來自 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 小時前)遇到這個問題時,上面的答案對我沒有幫助。我將在這裡介紹對我有用的解決方案,以及上一個答案沒有幫助的原因。

症狀

  1. 突然之間,/home無法保存/編輯中的任何文件等或列出的任何目錄。
  2. dmesg``xfs_do_force_shutdown called在其他一些 xfs 消息周圍的某個地方顯示。
  3. xfs_repair在第 1 階段失敗,superblock read failed隨後是fatal error -- Input/output error
  4. 我的磁碟的其餘部分執行完美(包括/,即只是/home不工作)。
  5. 嘗試mount會導致superblock cannot be found(或類似的)錯誤,但沒有提示下一步該做什麼。

解決方案

該解決方案基於這篇文章Nigel Smith,XFS 的主要作者(如果我理解正確的話)。如果以前的連結過時,我將在此處重新發布這些步驟。以下所有操作必須以root(顯然)的方式執行。

  1. 執行驅動器的長時間自檢:smartctl -t long /dev/sda。可能還要等一下。smartctl -t short /dev/sda如果有一個相對較新的長測試(如我的情況),您也可以執行一個短測試。
  2. 使用以下選項檢查測試:smartctl -l selftest /dev/sdasmartctl -a /dev/sda(後者顯示所有內容,但您需要的資訊幾乎在最後)。
  3. 測試報告的最後一列稱為LBA_of_first_error。這是磁碟上第一個錯誤的位置。從最新的測試(編號為“#1”並位於列表頂部)中,獲取顯示的數字並將其除以 8 並截斷為整數值(參見關於原因的原始文章)。
  4. 然後,您將清零這個特定的塊。這將導致該位置的特定文件損壞。(但是,如果您已經用盡了其他所有方法,那麼一些損壞的文件並不是什麼大問題。)。為此,請執行以下命令:# dd if=/dev/zero of=/dev/sda conv=sync bs=4096 count=1 seek=*NUMBER_COMPUTED_EARLIER*
  5. 執行一個簡短的測試並等待一兩分鐘得到結果。重複此操作,直到簡短測試不顯示任何錯誤。或者,您可以檢查錯誤塊的大致數量。smartctl -A /dev/hda | egrep 'Reallocated|Pending|Uncorrectable'在我的情況下,我重複了步驟 1 到 4,直到我減少到 24 個錯誤。
  6. 執行xfs_repair /dev/sda不​​帶標誌-L)。這可能會報告由於日誌日誌錯誤,您應該嘗試掛載文件系統。
  7. 嘗試安裝該系統。就我而言,那失敗了,所以我不得不執行xfs_repair -L /dev/sda刪除日誌日誌(這可能導致數據被刪除)。
  8. 掛載您的文件系統並進行最近的備份!

為什麼上​​述解決方案不再起作用

  • 最初的職位已有幾年曆史。同時,對 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 密鑰說再見)並恢復所有具有任意名稱的文件都在一個文件夾中。祝你順利通過所有這些並找到相關資訊。

引用自:https://serverfault.com/questions/469460