我想知道 ZFS 是否可以处理以下情况。假设我在 zpool 上安装了 FreeBSD,该 zpool 具有两个 500GB 的物理磁盘,采用镜像设置。它们构成根分区,因此实际上最多只使用了 20GB。
我稍后想用镜像设置中的两个小型 SSD 替换物理磁盘。有没有办法在线完成此操作?我的想法是将这些磁盘作为额外镜像添加到 zpool,等待重新同步完成,然后移除旧驱动器。问题是这些新磁盘会比原始磁盘小。
我的一个想法是只对 500GB 的驱动器进行分区,这样 ZFS 在每个物理磁盘上只能获得 30GB 的空间,其余空间则被浪费。这样 SSD 就会有更多空间,因此我不会遇到缩减问题。问题是,这样我需要提前估计未来替换磁盘的大小。有没有办法避免这种情况?
答案1
您说得对,如果 vdev 是整个磁盘,那么当您切换到 SSD 时,它们必须至少有这个大小,您不能“缩小”到更小的磁盘(当然您可以扩展到更大的磁盘)。您说得也对,您可以使用分区,这样 vdev 就比未来的 SSD 小,而且您必须猜测这些 SSD 会有多大。
或者,如果服务器可以同时容纳所有 4 个磁盘,即使时间很短,您现在也可以以任何方式创建 zpool,然后使用发送/接收将数据传输到新的 SSD。这确实要求同时插入所有设备。一个小警告,发送/接收操作只能从快照发送 - 因此您无法复制“活动”磁盘,并且需要为此做出调整(通过增加一点复杂性,停机时间可能会很短)。
更复杂的是,实际上可以将“发送”存储到另一个磁盘上的中间文件,然后从中“接收”。因此,您在任何时候都只需要服务器中的 3 个磁盘。更复杂的是,4 个磁盘可以位于不同的服务器上,并且可以通过 ssh 甚至 netcat 进行发送/接收。
答案2
我想不出任何明显的方法来做到这一点。
目前,由于无论如何您都必须对根磁盘进行分区(以添加引导代码),而且这听起来不像是经常发生的事情,我建议只为根池创建一个小的(<20GB)分区。如果您需要额外的空间,您可以用剩余的空间创建第二个池。当要放入 SSD 时,只需对它们进行分区,添加引导代码,将它们“zfs 附加”到根池,然后“zfs 分离”原始文件(或“zfs 替换”而不是“zfs 附加”和“zfs 分离”)。