我正在扩展Solaris 10 U8服务器,除了root rpool之外还有一个额外的存储池。
将特定的ZFS文件系统从rpool移动到这个新的存储池最有效/简单/可靠的方法是什么?
可以在线完成,还是应该先closures使用这些池的服务?
关于禁用服务的问题主要取决于服务本身:
无论如何,发送ZFS文件系统可能需要很长时间。 通过大多数时间保持在线状态,可以最大限度地减less服务不可用性:
以递增方式发送第二个快照,这将比以前的传输快得多。 例如:
zfs send -i rpool / filesystem @ snapshot rpool / filesystem @ snapshot2 | zfs接收-F目标池/文件系统
完成后,将文件系统挂载点从旧数据集移到新数据集。 例如:
zfs set mountpoint=/application/directory.old rpool/filesystem
zfs set mountpoint = / application / directory destination / filesystem
您需要确保没有进程绑定到/application/filesystem (例如:访问文件或将其作为当前目录)来实现此目的。
我不认为这可以在线执行,但我的过程将是closures必要的服务,拍摄快照并使用zfs发送/接收进行迁移。 就像是:
zfs send rpool/filesystem@snapshot | zfs receive destinationpool/filesystem
编辑:
如果您安装了“pipe道视图”命令(pv),则可以通过以下方式监视传输的状态:
zfs send rpool/filesystem@snapshot | pv | zfs receive destinationpool/filesystem
我重复了jlliagre所说的大部分内容,但增加了后代文件系统。 (当我忘记时,大部分是我有一个参考。)
如果你有子文件系统,你需要在zfs snapshot命令中使用-r标志,在zfs send命令中使用-r或-R标志。 大写的-R移动所有属性 ,快照和克隆。
要移动整个池:
zfs snapshot -r sourcepool@moving zfs send -R sourcepool@moving | zfs receive -F destpool
然后为了更短的迁移时间同步closures应用程序,closuressamba,nfs
zfs snapshot -r sourcepool@moving2 zfs send -Ri sourcepool@moving sourcepool@moving2 | zfs receive -F destpool
如果要为迁移创build多个中间快照,请阅读有关zfs send -I开关的手册页。
在stream水线中使用诸如“mbuffer”之类的工具也会带来一些好处; 显然,如果ZFS的send / recv性能大大提高,如果两端都可以连续传输数据,而没有使用mbuffer(或者类似的东西),那么你会得到一个乒乓效应,而另一个则不断地阻塞。