我有一个 RAID1 ZFS 池,其中有 2 个 5TB 镜像驱动器和 2 个 1TB 镜像驱动器,我想用 4TB 驱动器替换这两个 1TB 设备。由于zpool add
无法撤消[1],因此必须在以所需布局重新创建池后销毁池。
所以
- 我
zpool detach
编辑了镜像设备并用它们创建了一个新池。 - 由于挂载点重叠,以下命令失败后,我使用备用根目录重新导入了它
zpool import -R /mnt/data1
- 我创建了一个快照
migrate1
以便能够运行sudo zfs send -R data@migrate1 | sudo zfs receive -F data1
当前正在进行的操作。
现在,我想知道zfs send
管道完成后的最佳程序,因为根据我的理解,我必须让旧池data
在备用根上挂载,并data1
在重新启动后让新池不带备用根挂载,以便能够删除旧池并使其设备可连接到新池。也许还有其他方法。
我正在使用在 Ubuntu 17.10 上从源代码构建的 ZFS 0.7.0-182_gc0daec32f8 和 SPL 0.7.0-20_g35a44fcb,以及 Linux 4.13.0-16-generic。
我检查了
- 我可以安全地将 ZFS 池从 FreeBSD 迁移到 Ubuntu 吗?这是关于 Ubuntu 与 FreeBSD 格式的比较,而我仍然使用相同的 Ubuntu
- 将 LVM 迁移到 ZFS它不存在重叠挂载点和需要
ALTROOT
我知道这很复杂,并且将 1TB 设备保留在池中也不会有什么坏处,但这不是问题的一部分。
[1] 我将此作为 ZFSOnLinux 问题请求于https://github.com/zfsonlinux/zfs/issues/6857提供背后复杂计划/路线图的链接
答案1
我有一个 RAID1 ZFS 池,其中有 2 个 5TB 镜像驱动器和 2 个 1TB 镜像驱动器,我想用 4TB 驱动器替换这两个 1TB 设备。由于 zpool add 不可撤销[1],因此必须在以所需布局重新创建池后销毁池。
这听起来更像是条带镜像 (2x2),而不是 RAIDZ1 (至少 3x1)。无论哪种方式,您都可以通过一次移除和替换一个磁盘来扩展这两种配置。等待每个重新镀银完成,然后替换下一个磁盘。最后,在更换所有磁盘后,zpool offline
池然后将zpool online -e
其扩展到新大小(或autoexpand=true
在扩展之前设置):
zpool online [-e] pool device...
Brings the specified physical device online. This command is not
applicable to spares.
-e Expand the device to use all available space. If the
device is part of a mirror or raidz then all devices must
be expanded before the new space will become available to
the pool.
当然,您首先需要重新连接已拆卸的设备,因为只有在具有足够冗余的情况下才有可能进行替换。
除此之外,您还可以动态设置和更改挂载点,并且可以销毁具有活动挂载点的池(只要它们上没有活动 I/O)。如果它不起作用,zpool export
/zpool import
在大多数情况下都可以,重新启动也可以(如果您允许,并且这不是根池)。