当我在 raidz 池中添加新设备时,我认为 ZFS 应该自动执行此操作,但我犯了一个错误。
:~# zpool status
pool: data
state: ONLINE
scan: resilvered 78,3G in 2h4m with 0 errors on Tue May 10 18:12:31 2016
config:
NAME STATE READ WRITE CKSUM
data ONLINE 0 0 0
raidz2-0 ONLINE 0 0 0
c2t2d0 ONLINE 0 0 0
c2t3d0 ONLINE 0 0 0
c2t4d0 ONLINE 0 0 0
c2t5d0 ONLINE 0 0 0
c2t6d0 ONLINE 0 0 0
c2t7d0 ONLINE 0 0 0
c2t8d0 ONLINE 0 0 0
c2t9d0 ONLINE 0 0 0
c2t10d0 ONLINE 0 0 0
c2t11d0 ONLINE 0 0 0
c2t13d0 ONLINE 0 0 0
spares
c2t12d0 AVAIL
c2t14d0 AVAIL
我想 c2t13d0 不在 raidz 池中,是吗?如何将其从数据池中删除?
感谢您的帮助。
答案1
你不能。它现在作为单驱动器 vdev 位于池中。无法从池中删除 vdev。
这是坏消息。
raidz2-0
更糟糕的消息是,您现在已经通过vdev 和vdev实际上获得了 RAID-0 c2t13d0
。不是很好。这是双加不好。
您的选择是:
- 与你创建的泳池一起生活
- 备份、销毁并重新创建池以及恢复。
这两种选择都不好。备份/重新创建/恢复是正确的从长远来看,这是一个选项,但需要大量的停机时间(避免这种情况的唯一方法是创建一个相同大小或更大的第二个池zfs send
)。
顺便说一句,解决冗余问题的一件事是将镜像附加到 vdev c2t13d0
。如果尺寸相同,也许可以使用其中一个备件。
使用类似的东西:
zpool attach data c2t13d0 anotherdisk
这远非理想,但使用镜像 vdev 进行条带化的 RAIDZ2 vdev 具有冗余(仍然令人厌恶,但不会吃掉您的数据),而使用单驱动器进行条带化的 RAIDZ2 没有任何可靠的冗余(您的一些数据)仅在单驱动器 vdev 上。这将始终是您最有价值且不可替代的数据)。
它确实使第一个选项(“忍受它”)变得不那么糟糕......至少现在是这样。从长远来看,您会想要重建您的游泳池。
我无权访问 Solaris 手册页,但这里有来自 ZFS On Linux 版本zpool
手册页的相关摘录(我添加了粗体以示强调)。 Solaris 版本应该相同或非常相似:
zpool attach [-f] [-o property=value] pool device new_device
将 new_device 连接到现有的 zpool 设备。现有设备不能是 raidz 配置的一部分。如果设备当前不是镜像配置的一部分,则设备会自动转换为设备和 new_device 的双向镜像。如果设备是双向镜像的一部分,则附加 new_device 将创建三向镜像,依此类推。无论哪种情况,new_device 都会立即开始重新同步。
答案2
你是对的,你的池由两个 vdev 组成,即磁盘 c2t13d0 和 raidz2-0,它们是条带化的。
不幸的是,ZFS(尚未)提供从池中删除 vdev 的可能性。因此,您唯一的选择是销毁池,重新创建它并从备份中恢复。