Zpool

zpool中的兩個同名設備,不能替換

  • July 28, 2014

今天我在伺服器上發現了這個(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 和單個磁碟之間條帶化,我認為您不值得花時間嘗試排序出故障磁碟。你最好把你的數據放到一個單獨的池/磁碟/伺服器上,然後銷毀/重新創建這個池。

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