Zpool
zpool中的兩個同名設備,不能替換
今天我在伺服器上發現了這個(FreeBSD 8.2 STABLE):
NAME STATE READ WRITE CKSUM data DEGRADED 1.38K 0 0 raidz1-0 DEGRADED 1.38K 0 0 ad10 ONLINE 1.38K 0 0 ad12 ONLINE 0 0 0 ad14 ONLINE 0 0 0 ad16 REMOVED 0 0 0
我迅速拉下錯誤的硬碟並放入一個新硬碟。之後,我輸入了這個不幸的命令:
zpool add data ad16
結果是池中出現了一個新的 ad16 設備:
NAME STATE READ WRITE CKSUM data DEGRADED 0 0 0 raidz1-0 DEGRADED 0 0 0 ad10 ONLINE 0 0 0 ad12 ONLINE 0 0 0 ad14 ONLINE 0 0 0 ad16 FAULTED 0 0 0 corrupted data ad16 ONLINE 0 0 0
第一個 ad16 設備出現故障,屬於 data/raidz1-0 卷的一部分。第二台 ad16 設備處於聯機狀態,不屬於任何卷。問題是它們具有相同的名稱,因此替換命令不起作用:
gw# zpool replace -f data ad16 ad16 invalid vdev specification the following errors must be manually repaired: /dev/ad16 is part of active pool 'data'
我認為我應該先移除 ONLINE ad16 磁碟,然後才能更換 FAULTED ad16 磁碟。但這不起作用,因為我無法將其離線,也無法將其刪除:
gw# zpool offline data ad16 gw# zpool status pool: data state: DEGRADED status: One or more devices has been taken offline by the administrator. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Online the device using 'zpool online' or replace the device with 'zpool replace'. scan: scrub in progress since Thu Apr 18 03:23:06 2013 26.1G scanned out of 3.13T at 50.7M/s, 17h52m to go 0 repaired, 0.81% done config: NAME STATE READ WRITE CKSUM data DEGRADED 0 0 0 raidz1-0 DEGRADED 0 0 0 ad10 ONLINE 0 0 0 ad12 ONLINE 0 0 0 ad14 ONLINE 0 0 0 ad16 OFFLINE 0 0 0 ad16 ONLINE 0 0 0 errors: No known data errors gw# zpool remove data ad16 cannot remove ad16: only inactive hot spares, cache, top-level, or log devices can be removed
我猜想“offline ad16”命令是針對故障設備的。但我想離線另一個。我還嘗試將系統引導到單使用者模式,並刪除了這個新磁碟,但這導致兩個 ad16 設備都不可用,並且整個池不可用(這很奇怪,因為有足夠的磁碟使它工作.. .)
‘zpool add’ 命令用於將新設備 (vdevs) 添加到池中。當您最初執行該命令時,您向池中添加了一個新的 vdev(僅包含 ad16)。您從一個 4 磁碟 raidz 開始,其中一個磁碟發生故障,但現在您有一個池,其中數據在 raidz 和 ad16 之間條帶化。失去該 ONLINE ad16 磁碟將使整個池發生故障。
由於現在無法刪除 ad16(您無法從池中刪除 vdev),而且我懷疑您是否希望您的數據在 4 磁碟 raidz 和單個磁碟之間條帶化,我認為您不值得花時間嘗試排序出故障磁碟。你最好把你的數據放到一個單獨的池/磁碟/伺服器上,然後銷毀/重新創建這個池。