将 ZFS 文件系统从一个池移动到另一个池

Asg*_*sen 22 solaris zfs

除了根 rpool 之外,我正在使用额外的存储池扩展 Solaris 10 U8 服务器。

将特定 ZFS 文件系统从 rpool 移动到这个新存储池的最有效/简单/可靠的方法是什么?

可以在线完成还是应该先关闭使用这些池的服务?

jll*_*gre 16

关于禁用服务的问题本质上取决于服务本身:

  • 他们是否主动写入您计划移动的文件系统?
  • 它们是否存储了您想要保留的持久数据。

无论如何,发送 ZFS 文件系统可能需要很长时间。通过在大多数时间保持在线状态,可以最大限度地减少服务不可用:

  • 创建快照

  • 以先前建议的方式发送该快照,但同时保持所有服务处于活动状态

  • 当在另一个池上收到 fs 时,禁用与该文件系统的关键服务边界。确保目标池上的新文件系统没有被修改,因为无论如何更改都会被丢弃。

  • 创建第二个快照(例如快照 2)

  • 增量发送第二个快照,这将比前一个传输快得多。例如:

    zfs send -i rpool/filesystem@snapshot rpool/filesystem@snapshot2 \
        | zfs receive -F destinationpool/filesystem
    
    Run Code Online (Sandbox Code Playgroud)
  • 完成后,将文件系统挂载点从旧数据集移动到新数据集。例如:

    zfs set mountpoint=/application/directory.old rpool/filesystem
    zfs set mountpoint=/application/directory destination/filesystem
    
    Run Code Online (Sandbox Code Playgroud)

    您需要确保没有任何进程被绑定/application/directory(例如:访问文件或将其作为其当前目录)来实现这一点。

  • 重新启用服务,你就完成了。

  • 添加到 @dan-buhler 和 @ewwhite 所写的内容 - 您还可以使用“zfs send -Rvn sourcepool@snapshotname”来获取 **总估计大小**。然后使用该值,通过“zfs send -R sourcepool@snapshotname |”将其传递给“pv”。pv -s [总估计大小] | zfs receive -F destpool` 以更好地了解发送何时实际完成。 (2认同)

Dan*_*ler 16

我重复了 jlliagre 所说的大部分内容,但添加了后代文件系统。(主要是因为我忘记时有参考。)

如果您有子文件系统,您将需要使用-rzfs 快照命令中的标志,以及命令中的-ror-R标志zfs send。大写字母-R移动所有属性、快照和克隆。

要移动整个池:

zfs snapshot -r sourcepool@moving
zfs send -R sourcepool@moving | zfs receive -F destpool
Run Code Online (Sandbox Code Playgroud)

然后在较短的迁移期间同步更改关闭应用程序,关闭 samba,nfs

zfs snapshot -r sourcepool@moving2
zfs send -Ri sourcepool@moving sourcepool@moving2 | zfs receive -F destpool
Run Code Online (Sandbox Code Playgroud)

如果您要为迁移创建多个中间快照,请阅读有关zfs send -I交换机的手册页。

  • 在我的实验中,确切的命令似乎是: zfs send -R Pool0@moving | zfs 接收 -dF Pool1 (3认同)

eww*_*ite 11

我不认为这可以在线执行,但我的过程是关闭必要的服务,拍摄快照并使用 zfs 发送/接收进行迁移。就像是:

zfs send rpool/filesystem@snapshot | zfs receive destinationpool/filesystem
Run Code Online (Sandbox Code Playgroud)

编辑:

如果您安装“管道视图”命令 (pv),您可以使用以下命令监控传输状态:

zfs send rpool/filesystem@snapshot | pv | zfs receive destinationpool/filesystem
Run Code Online (Sandbox Code Playgroud)


小智 7

您还会发现在管道中使用“mbuffer”之类的工具有一些好处;显然,如果两端都可以连续地流式传输数据,ZFS 发送/接收性能会显着提高,并且没有 mbuffer(或类似的东西),您会得到一种乒乓效应,其中一个不断阻塞另一个。

  • 这是一个很好的建议,我也将它用于泳池移动。 (5认同)