Linux

從“FAULTED”zfs 池中恢復。“-F”選項似乎被忽略了

  • March 14, 2020

在 Ubuntu 上,我最近開始在外部 USB 硬碟上試用 ZFS。我現在似乎有一個損壞的 zfs 池,這可能只是因為我關閉了我的電腦(使用poweroff)。

$ zpool import
  pool: zfs
    id: 1234512345123451234
 state: FAULTED
status: The pool metadata is corrupted.
action: The pool cannot be imported due to damaged devices or data.
   The pool may be active on another system, but can be imported using
   the '-f' flag.
  see: http://zfsonlinux.org/msg/ZFS-8000-72
config:

       zfs                      FAULTED  corrupted data
         usb-Disk_Name_etc-0:0  ONLINE

嘗試導入它時,我收到一條有用的消息,說明我將失去大約 1 秒的數據(這很好),並且我可以嘗試使用“-F”選項進行恢復:

$ zpool import zfs
cannot import 'zfs': I/O error
   Recovery is possible, but will result in some data loss.
   Returning the pool to its state as of Thu 12 Mar 2020 00:58:03 GMT
   should correct the problem.  Approximately 1 seconds of data
   must be discarded, irreversibly.  Recovery can be attempted
   by executing 'zpool import -F zfs'.  A scrub of the pool
   is strongly recommended after recovery.

使用空執行標誌,我確認 -F 應該工作:

$ zpool import -Fn zfs
Would be able to return zfs to its state as of Thu 12 Mar 2020 00:58:03 GMT.
Would discard approximately 1 seconds of transactions.

但是,當我嘗試真實的東西時,它似乎完全忽略了“-F”選項並重複了原始消息:

$ zpool import -F zfs
cannot import 'zfs': I/O error
   Recovery is possible, but will result in some data loss.
   Returning the pool to its state as of Thu 12 Mar 2020 00:58:03 GMT
   should correct the problem.  Approximately 1 seconds of data
   must be discarded, irreversibly.  Recovery can be attempted
   by executing 'zpool import -F zfs'.  A scrub of the pool
   is strongly recommended after recovery.

我發現從這個答案中提到了“-X”選項:https ://serverfault.com/a/645866/74394但我繼續收到完全相同的消息。我已經嘗試了所有這些選項組合,包括池名稱 (zfs) 和數字 ID 號(如 1234512345123451234),我總是得到與上面建議使用 -F 選項完全相同的消息。

-F -FX -f -fF -fFX

我在這裡做明顯錯誤的事情嗎?如果我因為系統關閉而導致 1 秒的數據失去而無法挽回地失去了整個磁碟,那麼 ZFS 似乎非常不穩定!我沒有池的備份副本,因為我才剛剛開始嘗試 ZFS。謝謝你的幫助。

如果那個 USB 設備在送出上撒謊,那麼所有的賭注都沒有了,因為寫入可以重新排序,並且在寫入重新排序和關於障礙的謊言之間,所有的賭注都是關於元數據是否被丟棄。

試試:zdb -e zfs -ul

這有望列出一些 txgs。

然後嘗試:zpool import -f -FX -N -T

$$ txg_number $$ 您從上面的 zdb 獲得 txg_number 的位置。

其他嘗試:將 ZFS 更新到最新的 0.8.3。Ubuntu 附帶的東西非常古老,自該版本以來已經有很多修復和改進。

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