在 ZoL 上创建 RAID-Z 池时,我以为以后可以轻松插入其他磁盘。但同时我了解到这还是不可能的。
但是...我在创建初始池时遇到了类似的问题。只有 4 个可用的 SATA 端口,但有一个带有三个 2TB 磁盘的旧 RAID5 和一个带有三个 4TB 磁盘的新 RAIDZ1。解决方案是 a) 降级 RAID5 和 b) 使用稀疏文件作为“虚拟第三个驱动器”构建初始 RAIDZ,该驱动器在创建池后立即脱机:
- 创建稀疏文件:
dd if=/dev/zero of=/zfs1 bs=1 count=1 seek=4100G
- 创建 raidz 池:
zpool create zfspool raidz /dev/disk1 /dev/disk2 /zfs1
- 立即脱掉稀疏文件:
zpool offline zfspool /zfs1
- 将数据迁移到
zfspool
。卸载旧的 RAID5 磁盘,添加第三个新的 4TB 磁盘 - 使用实际的第三个驱动器替换并重新同步池中的稀疏文件:
zpool replace zfspool /zfs1 /dev/disk3
这真是太棒了!现在我了解到,虽然 ZFS 不直接支持向 RAIDz 添加单个磁盘,但它支持逐个用更大的磁盘替换磁盘。
这就是我的计划。有人发现其中有缺陷吗?
- 购买第四个 4TB 磁盘,并从现有池中下线一个磁盘
- 在这两个空闲磁盘上创建 2x2TB 分区。
- 使用这四个“磁盘”构建 RAIDz:3x2TB = 6TB 净存储。
- 出于性能原因:立即将第二个分区之一脱机
- 将最多 6 TB 数据迁移到新池并销毁旧池
- 将离线“2TB 磁盘”替换为旧池中的真正 4TB 磁盘。等待重新镀银。
- 在具有 2 个活动分区的驱动器上:将第二个 2TB 分区脱机,并将其替换为旧池中的第二个 4TB 磁盘。等待重新镀银。
- 逐个:将剩余的 2TB 分区脱机,将分区扩展至 4TB,然后将磁盘重新添加到池中。等待重新镀银。
- 对最后的 2TB 磁盘/分区重复上述操作
这会有用吗?我知道由于过程中缺少冗余,我更容易丢失数据,但我会备份最重要的数据。但对于整个 6TB 的有效载荷来说,这还不够。
并且,在最后一步之后,ZFS 会自动将池扩大到 (3+1)x4TB = 12TB 吗?
答案1
虽然丑陋,但是这会起作用。
除非它不存在;)。
- 指定分区和替换磁盘时要非常小心
- 事先在虚拟机中尝试一下,设置虚拟磁盘(像您的硬件一样)并试运行 1 到 2 次。
- 在开始之前先进行清理,然后查看磁盘的 SMART 信息。您不会对已经不稳定的磁盘尝试此操作。
重要提示:在尝试之前,最好先在其他介质或机器上进行测试备份!
是的,如果最后的 2TB 磁盘或分区被 4TB 磁盘或分区替换,ZFS 将扩大池(如果池的 autoexpand=on)
zpool get autoexpand $pool
zpool set autoexpand=on $pool
附注:您不应在大于 2TB 的磁盘上使用 RAID-Z。更换故障磁盘时,重新同步时出现错误的几率非常高。请考虑使用 RAID-Z2。
答案2
这听起来很糟糕。这是你的数据,所以你想干什么都可以……不过,没有人会认可这个解决方案。
这确实是一个你应该重新开始。
将您的数据暂时移动到某处并重建。