ZFS 池因磁碟故障而降級,導出和替換不起作用
在嘗試向我的 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>
.