以下是使用 zfs send/receive 将旧存储池 app 完整迁移到新存储池 appdata 的命令流程(假设新旧池均为 ZFS 文件系统):

步骤 1:创建旧池的快照
bash
复制

创建一次性快照(名称可自定义,如 "migration")

zfs snapshot -r app@migration
-r 参数会递归为旧池下所有子数据集(dataset)创建快照。

步骤 2:发送快照到新池
单次全量传输(适用于首次迁移)
bash
复制

将旧池快照完整发送到新池

zfs send -R app@migration | zfs receive -F -v appdata
关键参数:

-R:发送包含所有子数据集及历史快照的完整流。

-F:强制覆盖目标池(确保新池 appdata 已创建且为空)。

-v:显示传输详情。

步骤 3(可选):增量同步
如果旧池在首次迁移后仍有数据变动,可基于旧快照进行增量同步:

bash
复制

1. 创建新快照(如 "migration2")

zfs snapshot -r app@migration2

2. 发送增量数据(从旧快照 "migration" 到新快照 "migration2")

zfs send -R -I app@migration app@migration2 | zfs receive -F -v appdata
-I 表示增量传输(需指定起始快照)。

步骤 4:验证迁移结果
bash
复制

查看新池数据集结构是否与旧池一致

zfs list -r appdata

检查新池是否包含快照

zfs list -t snapshot -r appdata
注意事项
存储池状态:

确保新池 appdata 已提前创建且无重要数据(-F 会覆盖目标池)。

新旧池的 ZFS 版本需兼容(TrueNAS Scale 默认自动处理)。

服务暂停:

迁移前停止所有访问旧池的服务(如 SMB/NFS/Docker),避免数据不一致。

空间要求:

新池容量应 ≥ 旧池已用空间(可通过 zfs list -o used app 查看)。

跨物理机传输:

若新旧池位于不同设备,需通过 SSH 管道传输:

bash
复制
zfs send -R app@migration | ssh user@new_host "zfs receive -F appdata"
迁移后操作
重定向应用:

修改 TrueNAS 应用(如 Docker)、共享服务的存储路径至新池 appdata。

删除旧池(可选):

确认数据无误后,可销毁旧池:

bash
复制
zpool destroy app
通过以上命令,旧池 app 的所有数据(包括子数据集、属性、压缩设置等)将完整复制到新池 appdata,且效率远高于文件级复制工具(如 rsync)。

标签: none

添加新评论