Ubuntu

ZFS 池因磁碟故障而降級,導出和替換不起作用

  • February 8, 2019

在嘗試向我的 Ubuntu 伺服器設備添加更多磁碟後,我遇到了麻煩。作為一個完全的初學者,我關閉了伺服器電源,又添加了兩個磁碟並重新啟動系統,但在現有鏡像“FAULTED”中發現其中一個磁碟。


matsojala@amatson:~$ zpool status -v
 pool: tank
state: DEGRADED
status: One or more devices could not be used because the label is missing or
       invalid.  Sufficient replicas exist for the pool to continue
       functioning in a degraded state.
action: Replace the device using 'zpool replace'.
  see: http://zfsonlinux.org/msg/ZFS-8000-4J
 scan: scrub repaired 0B in 21h20m with 0 errors on Fri Feb  8 14:15:04 2019
config:

       NAME                      STATE     READ WRITE CKSUM
       tank                      DEGRADED     0     0     0
         mirror-0                DEGRADED     0     0     0
           sdb                   ONLINE       0     0     0
           12086301109920570165  FAULTED      0     0     0  was /dev/sdb1

errors: No known data errors

我嘗試根據此答案導出和導入(ZFS 池在重新啟動時降級)但導出失敗


matsojala@amatson:~$ sudo zpool export -f tank
umount: /tank: target is busy.
cannot unmount '/tank': umount failed

我不確定應該以哪種方式更換磁碟,因為系統上的磁碟是“活動池的一部分”。


matsojala@amatson:~$ sudo zpool replace -f tank 12086301109920570165 sdc1
invalid vdev specification
the following errors must be manually repaired:
/dev/sdc1 is part of active pool 'tank'

這個也試過了。


matsojala@amatson:~$ sudo zpool replace tank sdb
/dev/sdb is in use and contains a unknown filesystem.

有什麼幫助嗎?該磁碟在斷電前完全工作,它位於名為 /dev/sdc1 的系統中,ID 為“12086301109920570165”。我該怎麼辦?

謝謝。

看起來您一直在使用諸如/dev/sda引用磁碟之類的名稱。這通常不是一個好主意,因為如果您的磁碟在重新啟動或拔出-重新插入循環後被分配了不同的名稱,那麼 ZFS 可能會感到困惑。/dev/disk/by-id/相反,您應該使用、.../by-uuid/或中的設備文件創建您的池.../by-label/

在你的情況下,我不完全確定,但它看起來像是/dev/sdb1在重新啟動後被重新標記/dev/sdc1,這就是為什麼/dev/sdc1它看起來像是池的一部分,即使它沒有出現在zpool status. 您可以嘗試通過拔下您添加的額外磁碟來修復它——這可能會讓標籤恢復到原來的樣子——然後執行一個export後續zpool import -d /dev/disk/by-id tank操作,以強制 ZFS 根據by-id磁碟名稱重新標記池.

如果導出因為忙而無法工作,請確保沒有程序正在訪問池中的文件,然後重試。我不是 Linux 使用者,但似乎還有一些配置文件可用於在重啟期間幫助您執行此操作:Github 上的這篇文章建議設置為USE_DISK_BY_ID='yes'/etc/default/zfs重啟期間強制執行此操作。在最壞的情況下,您可以設置並重新啟動——重新啟動會自動執行導出/導入。

也就是說,如果您無論如何都想更換磁碟,Oracle 文件很好地解釋了“更換鏡像的一個故障磁碟”案例。(只需忽略有關使用 取消配置磁碟的特定於 Solaris 的說明cfgadm。)我認為您錯過的主要步驟是在執行zpool offline tank <faulted disk>之前執行zpool replace tank <new disk>.

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