当池拥有超过 1/3 的可用空间时,将具有 3 个驱动器的 ZFS RAIDZ 就地迁移到 4 个磁盘

当池拥有超过 1/3 的可用空间时,将具有 3 个驱动器的 ZFS RAIDZ 就地迁移到 4 个磁盘

在 ZoL 上创建 RAID-Z 池时,我以为以后可以轻松插入其他磁盘。但同时我了解到这还是不可能的。

但是...我在创建初始池时遇到了类似的问题。只有 4 个可用的 SATA 端口,但有一个带有三个 2TB 磁盘的旧 RAID5 和一个带有三个 4TB 磁盘的新 RAIDZ1。解决方案是 a) 降级 RAID5 和 b) 使用稀疏文件作为“虚拟第三个驱动器”构建初始 RAIDZ,该驱动器在创建池后立即脱机:

  1. 创建稀疏文件:dd if=/dev/zero of=/zfs1 bs=1 count=1 seek=4100G
  2. 创建 raidz 池:zpool create zfspool raidz /dev/disk1 /dev/disk2 /zfs1
  3. 立即脱掉稀疏文件:zpool offline zfspool /zfs1
  4. 将数据迁移到zfspool。卸载旧的 RAID5 磁盘,添加第三个新的 4TB 磁盘
  5. 使用实际的第三个驱动器替换并重新同步池中的稀疏文件:
    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

这听起来很糟糕。这是你的数据,所以你想干什么都可以……不过,没有人会认可这个解决方案。

这确实是一个你应该重新开始

将您的数据暂时移动到某处并重建。

相关内容