不同CFS文件系统之间的数据迁移
更新时间:2026-03-17
适用场景
适用于不同CFS文件系统之间的数据传输。

基本原理
将CFS挂载至BCC中当做本地目录,利用msrsync工具等进行数据传输。
操作步骤
第一步:连通源端CFS和目的端CFS之间的VPC网络
- 如果源端CFS和目的端CFS在同一VPC网络下,请跳过此步骤
- 若源端CFS和目的端CFS跨地域或跨账号,请参考 跨地域或账号使用文件系统 文档,以连通两个CFS之间的VPC网络。
第二步:在同一VPC及可用区内创建BCC及CFS,并将CFS挂载至BCC中。
第三步:将CFS挂载至BCC中,挂载后的CFS文件系统即可当作一个普通的本地目录来访问和使用。
- Linux系统挂载NFS协议CFS文件系统请见:Linux系统挂载与卸载NFS协议CFS。
第四步:利用msrsync等工具进行数据传输。
实施迁移
本章节主要介绍如何使用msrsync工具实现文件存储CFS NFS协议文件系统之间的数据迁移。
1.策略评估
需要评估以下因素,以采用更合适的方式来迁移数据:
- 迁移期间是否可以暂停对源文件系统的写入。如果可以,则只执行一次全量迁移(迁移方案2.1)。如果不可以,请评估迁移期间的新写入数据量,若数据量很少,可以使用全量迁移+一次增量迁移(迁移方案2.2)。
- 文件系统的数据量。若已有文件系统数据量较大,则分目录进行迁移。每个子目录的迁移,是不相关的,既可同时进行,也可序列化执行。同时,CFS支持多个BCC同时挂载,适当增加BCC的数量来并发执行子目录的迁移,可提高迁移的速度。
2.迁移方案
迁移过程会针对用户对源文件系统是否有写操作而略有不同。下面分别讨论以下几种情况:
2.1 用户没有写IO请求到源文件系统
在源文件系统所挂载的BCC上执行如下命令:
Plain Text
1nohup ./msrsync -P -p 128 --stats -b /ssd1/tmp/ --rsync "-at --inplace --whole-file" /mnt/cfs/sub_folder_1/ /mnt/cfs/sub_folder_2/ 1>rsync.log 2>&1 &
以下是对上述命令参数的含义说明。
| 参数/选项 | 含义 |
|---|---|
| nohup | 使命令在退出终端后继续运行,并将输出重定向到nohup.out文件或指定文件。 |
| ./msrsync | 执行当前目录下的msrsync脚本或程序。 |
| -P | 显示msrsync命令的进度。 |
| -p 128 | 设置并行进程数为 128。 |
| --stats | 统计并显示文件传输的详细信息。 |
| -b ~/tmp | 用于存储每个 rsync 同步的文件列表。 |
| --rsync "-at --inplace --whole-file" | 传递给rsync的选项: -a:归档模式,表示递归复制并保持所有文件属性。 -t:保持文件时间戳。 --inplace:直接更新文件而不是创建临时文件。 --whole-file:传输整个文件,不进行增量复制。 |
| /old_fs/sub_folder_1/ | 原有文件系统的源目录,表示要复制的文件所在目录。 |
| /mnt/cfs/sub_folder_1/ | CFS文件系统的目标目录,表示复制文件的目的目录。 |
| 1>rsync.log | 将标准输出(stdout)重定向到rsync.log文件。 |
| 2>&1 | 将标准错误(stderr)重定向到标准输出(stdout),即将错误信息也重定向到rsync.log文件中。 |
msrsync的详细用法请参考:msrsync。
2.2 用户有少量的写IO请求到源文件系统
若用户有写IO的请求,此时通过msrsync命令,不能保证迁移过程中源文件系统和目的文件系统数据绝对一致。但msrsync内部的算法可以保证两个文件系统数据是大部分一致的。用户可以在第一次msrsync执行完毕后,暂停应用程序的写操作IO到源文件系统。具体步骤如下:
- 用户对源文件系统的写IO可以继续。在源文件系统所挂载的BCC上执行如下命令:
Plain Text
1nohup ./msrsync -P -p 128 --stats -b /ssd1/tmp/ --rsync "-at --inplace --whole-file" /mnt/cfs/sub_folder_1/ /mnt/cfs/sub_folder_2/ 1>rsync.log 2>&1 &
- 当完成第一轮迁移后,暂停用户对源文件系统的写IO。在源文件系统所挂载的BCC上执行如下命令:
Plain Text
1nohup ./msrsync -P -p 128 --stats -b /ssd1/tmp/ --rsync "-at --inplace --whole-file" /mnt/cfs/sub_folder_1/ /mnt/cfs/sub_folder_2/ 1>rsync.log 2>&1 &
第二次执行msrsync操作时,由于已经做过一次迁移操作,第二次会根据计算两个文件的差异,然后进行迁移。因此,第二次执行msrsync操作会快很多。
3.统计结果
每当执行完msrsync后,会显示出这次同步的结果,其中包括:
- 同步花费的时间;
- 传送了多少字节;
- IO传送的速度;
- 一共有多少文件被同步。
