我想知道ZFS是否可以处理以下内容。 假设我在一个zpool上安装了FreeBSD,并在镜像设置中安装了两个物理500GB磁盘。 这些形成了根分区,所以实际上最多只能使用20GB。
我稍后想要用镜像设置中的两个小SSDreplace物理磁盘。 有没有办法做到这一点在线? 我的想法是将这些磁盘添加到zpool作为额外的镜像,等待重新同步完成,然后删除旧的驱动器。 问题是,这些新的磁盘将比原来的小。
我的想法是将500GB的硬盘分区,这样ZFS就只能在每个物理磁盘上获得30GB的空间,其余的都被浪费了。 这样的SSD将有更多的空间,所以我不会收缩的问题。 问题是这样我需要事先估计未来更换磁盘的大小。 有没有办法避免这种情况?
你是正确的,如果vdev是整个磁盘,当你切换到固态硬盘,他们将不得不至less这个大小,你不能“缩小”到较小的磁盘(当然,你可以增长到更大的磁盘)。 你也可以使用分区,所以vdevs比未来的SSD要小,你必须猜测这些SSD会有多大。
或者,如果服务器可以同时容纳所有4个磁盘,即使是短时间,也可以按照您现在想要的方式创buildzpool,然后使用send / receive将数据传输到新的SSD。 这确实要求所有设备同时插入。 一个小警告,发送/接收操作只能从快照发送 – 所以你不能复制一个“活的”磁盘,并需要为此做出调整(通过增加一点复杂性,停机时间可以很短)。
更复杂的是,实际上可以将“发送”存储到另一个磁盘上的中间文件,然后“接收”。 所以在任何时候你只需要3个磁盘在服务器上。 而更复杂的是,4个磁盘可以在不同的服务器上,发送/接收可以通过SSH或甚至netcatpipe道。
我想不出任何明显的做法。
就目前来看,无论如何你都必须对根磁盘进行分区(为了增加启动代码),而且听起来不像是经常发生的事情,我只是build议为根池创build一个小的(<20GB)分区。 如果你需要额外的空间,你可以创build一个剩余空间的第二个池。 当把SSD插入时,只需对它们进行分区,添加引导代码,'zfs attach'到根池,然后'zfs detach'原件(或'zfsreplace'而不是'zfs attach'和'zfs detach' )。