从 zfs 池中永久删除磁盘

Removing disk from zfs pool permanently

我尝试通过 ZIL 将 SSD 添加到 zpool,但我做错了。

我预计.. zpool 添加区域日志 c0t1d0
但是我做了... zpool add zones c0t1d0

我尝试执行区域删除、分离、脱机命令,但失败了。
如何在 zpool 中移除 SSD 而不会丢失数据?

$ zpool status
pool: zones
state: ONLINE
scan : non requested
config:
   NAME          STATE     READ  WRITE CKSUM
   zones          ONLINE      0      0      0
       c0t0d0     ONLINE      0      0      0
       c0t1d0     ONLINE      0      0      0


$ zpool iostat -v               
capacity     operations    bandwidth
pool        alloc   free   read  write   read  write
----------  -----  -----  -----  -----  -----  -----
zones        280G   109G     40    139  1.28M  13.7M  
     c0t0d0  263G  15.3G     39     35  1.25M  2.61M  
     c0t1d0 17.6G  93.4G      0    104  20.9K  11.1M
----------  -----  -----  -----  -----  -----  -----

不幸的是,你将不得不摧毁并重新创造。您可以使用 zfs send/recv 迁移所有数据并保留所有快照、元数据等,并且复制速度比正常 cp.

更新:ZoL 0.8.0 版本将包含此功能。

@user121391 是正确的 今天 这是不可能的,除非通过 send/recv 存储迁移。

但是,Matt Ahrens(OpenZFS 社区负责人)开发的一项新功能即将登陆 master 分支,最终将进入其他平台(FreeBSD / Linux / macOS / 等)。这里有一个 link 到 pull request on Github.

集成后,您将能够 运行 zpool remove 在任何顶级 vdev 上,这会将其存储迁移到池中的不同设备并添加来自旧设备的间接映射位置到新的。如果您要删除的 vdev 已经充满了数据,那就不好了(因为访问任何数据都必须通过间接映射),但它的设计非常适合您正在谈论的用例(您很快注意到的错误配置)。