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 设备处于联机状态,并且不属于任何卷。问题是它们具有相同的名称,因此 replace 命令不起作用:

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'

我认为我应该先移除在线的 ad16 磁盘,然后才能更换有故障的 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 设备都不可用,整个池都不可用(这很奇怪,因为有足够的磁盘可以使其工作……)

答案1

“zpool add”命令用于向池中添加新设备 (vdev)。最初运行该命令时,您向池中添加了一个新的 vdev(仅由 ad16 组成)。您开始时使用的是 4 个磁盘 raidz,其中一个磁盘出现故障,但现在您有一个池,其中数据在 raidz 和 ad16 之间进行条带化。丢失该 ONLINE ad16 磁盘将导致整个池出现故障。

由于现在无法移除 ad16(您无法从池中移除 vdev),而且我怀疑您是否希望将数据条带化在 4 磁盘 raidz 和单个磁盘之间,因此我认为不值得您花时间尝试解决该故障磁盘。您最好将数据转移到单独的池/磁盘/服务器上,然后销毁/重新创建该池。

答案2

建议:通过 UUID 与逻辑名称引用底层设备。

看:http://forums.freebsd.org/showthread.php?t=37394

相关内容