rsync 与流式迁移
文件数据迁移的常规方案是 rsync:增量同步、断点续传、保留权限与时间戳,适合反复跑几次做最终切换。大量小文件直接同步会因元数据开销变慢,先打包成流再传输更高效。跨平台迁移时,先把共享目录挂到本地再交给 rsync 处理是常用做法。Linux 全发行版都自带或可安装。
基本信息
| 适用平台 | Linux 全发行版(rsync 包) |
|---|---|
| 基础同步 | rsync -avz 源 目标 |
| 演练模式 | -n 只打印不落地 |
| 续传 | --partial --append-verify |
| 打包流式 | tar 加管道配合 ssh |
典型使用场景
- 整机替换或机房搬迁时的目录迁移
- 首次全量加后续增量的滚动同步,缩短停机窗口
- 大文件跨机传输,网络中断后接着传
- 大量小文件先打包再传,降低元数据开销
- 迁移前用演练模式预演,确认路径与排除项正确
rsync 常用
rsync 常用
rsync -avz --progress /data/ user@10.0.0.9:/data/ # 目录同步,注意尾斜杠
rsync -avz --partial --append-verify big.iso user@10.0.0.9:/data/ # 大文件续传
rsync -avz --exclude '*.tmp' --exclude 'cache/' /data/ user@10.0.0.9:/data/
rsync -avzn /data/ user@10.0.0.9:/data/ | head # 演练,不落地
rsync -avz --delete /data/ user@10.0.0.9:/data/ # 目标端删除多余文件,慎用大量小文件先打包流式传
大量小文件先打包流式传
tar -C /data -czf - . | ssh user@10.0.0.9 'tar -C /newdata -xzf -' # 打包即传输
du -sh /data # 传输后核对体积
diff <(find /data -type f | wc -l) <(ssh user@10.0.0.9 'find /newdata -type f | wc -l') # 核对文件数常用选项对照
| 选项 | 作用 | 注意点 |
|---|---|---|
| -a | 归档模式,保留权限时间 | 属主保持需要目标端 root |
| -v 与 --progress | 显示详情与进度 | 大目录输出量大 |
| --exclude | 排除文件或目录 | 路径模式要与源端写法一致 |
| -n | 演练不落地 | 切换前必做 |
| --delete | 目标端删除多余文件 | 误删风险高,先演练 |
跨 Windows 共享迁移时通常先把共享挂到本地再同步;保持属主与属组需要目标端以 root 执行,迁移后要抽查归属是否正确。
迁移执行流程
- 先用演练模式确认路径与排除项写对了
- 业务低峰做首次全量同步
- 按固定间隔做增量同步,持续缩小差异
- 切换窗口内停写并执行最后一次同步
- 切换后核对文件数量与关键目录属主