今天我在服务器上发现了这个(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'
我认为我应该先删除联机 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”命令是针对 FAULTED 设备的。但我想离线另一个。我还尝试将系统引导到单用户模式,并删除了这个新磁盘,但这导致两个 ad16 设备都不可用,并且整个池不可用(这很奇怪,因为有足够的磁盘使其工作.. .)
'zpool add' 命令用于将新设备 (vdev) 添加到池中。当您最初运行该命令时,您向池中添加了一个新的 vdev(仅包含 ad16)。您从 4 磁盘 raidz 开始,其中一个磁盘发生故障,但现在您有一个池,其中数据在 raidz 和 ad16 之间条带化。丢失 ONLINE ad16 磁盘将使整个池出现故障。
由于现在无法删除 ad16(您不能从池中删除 vdev),而且我怀疑您是否希望数据在 4 磁盘 raidz 和单个磁盘之间条带化,我认为不值得您花时间尝试排序出故障磁盘。您最好考虑将数据转移到单独的池/磁盘/服务器上并销毁/重新创建该池。
建议:通过 UUID 与逻辑名称引用底层设备。
请参阅: http: //forums.freebsd.org/showthread.php?t=37394