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

在ZoL上创build我的RAID-Z池时,我可以很容易地在稍后插入其他磁盘。 同时我了解到,这是不可能的。

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

  1. 创build稀疏文件: dd if=/dev/zero of=/zfs1 bs=1 count=1 seek=4100G
  2. 创buildraidz池: zpool create zfspool raidz /dev/disk1 /dev/disk2 /zfs1
  3. 立即取下稀疏文件: zpool offline zfspool /zfs1
  4. 将数据迁移zfspool 。 卸载旧的RAID5磁盘,添加第三个新的4TB磁盘
  5. 使用实际的第三个驱动器replace并popup池中的稀疏文件:
    zpool replace zfspool /zfs1 /dev/disk3

这真是太好了! 现在我了解到,尽pipeZFS不直接支持将单个磁盘添加到RAIDz,但它支持逐个replace较大的磁盘。

所以这是我的计划。 有人看到有缺陷吗?

  • 购买第四个4TB磁盘并从现有池中脱机一个磁盘
  • 在这两个空闲磁盘上创build2x2TB分区。
  • 从这四个“磁盘”中构buildRAIDz:3x2TB = 6TB的networking存储。
  • 出于性能原因:立即脱机第二个分区之一
  • 迁移最大 6TB的数据到新的水池,并摧毁旧的水池
  • replace离线的“2TB磁盘”与一个真正的4TB之一的旧池。 等待重弹。
  • 在具有两个活动分区的驱动器上:使第二个2TB分区脱机,并将其replace为旧池中的第二个4TB磁盘。 等待重复。
  • 一个接一个:使剩余的2TB分区离线,使用4TB增长该分区,并重新添加磁盘池。 等待重复。
  • 冲洗和重复的最后2TB磁盘/分区

这会工作吗? 我知道我在这个过程中由于缺less冗余而更容易丢失数据,但我会备份最重要的数据。 对于整个6TB的有效载荷来说还不够。

在最后一步之后,ZFS会自动将池增长到(3 + 1)x4TB = 12TB?

丑,但这会奏效。

除了没有做到)。

  • 指定分区和更换磁盘时要非常小心
  • 先在虚拟机中尝试一下,像硬件一样设置虚拟磁盘,然后干运行1到2次。
  • 在开始之前进行擦洗,并查看磁盘上的SMART信息。 你不会尝试这个已经flakey磁盘。

重要提示:在尝试之前,您最好在其他介质或机器上进行testing备份!

是的,如果最后一个2TB磁盘或分区被一个4TB磁盘或分区replace(如果池中有autoexpand = on),则ZFS将增加该池。

 zpool get autoexpand $pool zpool set autoexpand=on $pool 

在旁注中:你不应该在大于2TB的磁盘上使用RAID-Z。 在更换出现故障的磁盘时,出现重新同步错误的机会非常高。 请考虑RAID-Z2。

这听起来很糟糕。 这是你的数据,所以你可以按照你的意愿去做…然而,没有人会认可这个解决scheme。

这真的是你应该重新开始的一种情况。

暂时将数据移到某处并重build。