如何从池中删除设备

如何从池中删除设备

当我在 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 的可能性。因此,您唯一的选择是销毁池,重新创建它并从备份中恢复。

相关内容