一、背景
在一次跨地域服务器迁移过程中,需要将既有系统中的 V2Ray 运行文件迁移至一台新设备。迁移对象主要包括以下内容:
- 可执行程序
- 数据文件(GeoIP / GeoSite)
- 配置文件
日志文件不参与迁移,因为目标系统会自动重新生成。
迁移环境具有如下特征:
- 两台 Linux 服务器位于不同国家网络环境
- 通过 SSH 非标准端口连接
- 网络延迟较高且链路稳定性一般
- 目标设备为全新系统
因此,本次迁移的核心问题并非“如何复制文件”,而是:
如何在跨境高延迟网络下稳定、高效、可恢复地完成文件同步。
二、初始方案:SFTP / SCP 拉取
最初采用的方式为:
目标服务器 → SSH 登录 → 从远端 SCP 下载
该模式存在两个问题:
- 传输速度较低
- SSH 套 SSH 形成链式连接
数据路径实际变为:
本地 → 中间服务器 → 远端服务器
这种结构会导致:
- RTT(往返延迟)叠加
- TCP 窗口增长受限
- 跨境链路丢包放大
实际测速仅达到几十 KB/s。
三、方向调整:改为 Push 模式
随后调整为:
源服务器主动向目标服务器推送文件
即:
源端 rsync → 目标端
跨地域网络中,一个经验规律是:
让网络质量更好的节点主动发送数据。
方向切换后,传输速率立即提升。
四、引入 Rsync
相比 SCP,Rsync 具备以下关键优势:
1. 差异同步(Delta Transfer)
Rsync 不会无条件复制文件,而是:
比较 → 计算差异 → 仅传输变化部分
即使文件体积较大,只要修改较少,传输量也会显著降低。
2. 断点续传能力
跨境链路中断十分常见。
默认 SCP:
中断 = 重新开始
而 Rsync 可通过参数实现安全续传。
五、最终使用命令
迁移采用如下形式:
rsync -avz --info=progress2 --partial --append-verify \
-e "ssh -p <PORT>" \
/usr/local/{bin/v2ray,share/v2ray/geoip.dat,share/v2ray/geosite.dat,etc/v2ray/config.json} \
root@remote:/usr/local/
参数说明:
| 参数 | 作用 |
|---|---|
| -a | 保持权限与结构 |
| -v | 显示过程 |
| -z | 传输压缩 |
| –info=progress2 | 显示总体进度 |
| –partial | 保留未完成文件 |
| –append-verify | 从断点继续并校验 |
| -e ssh | 指定 SSH 通道 |
六、关于“文件被覆盖”的误解
Rsync 默认行为:
| 情况 | 结果 |
|---|---|
| 文件不存在 | 创建 |
| 文件相同 | 跳过 |
| 文件不同 | 更新覆盖 |
| 目录多余文件 | 保留 |
覆盖并非删除重建,而是:
写入临时文件 → 校验完成 → 原子替换
因此不会破坏目录结构。
七、断点续传验证
迁移过程中出现如下进度:
geoip.dat 35%
geosite.dat 39%
v2ray 57%
这表明:
- 文件未从 0% 开始
- 已成功继承历史传输数据
- Rsync 正在追加剩余部分
说明断点续传机制正常工作。
八、跨境传输速率现象分析
实际观察到的速率:
100 KB/s ~ 300 KB/s
该表现属于典型跨地域 SSH 单连接特征。
影响因素包括:
- TCP 慢启动
- 高 RTT
- 丢包恢复机制
- 家庭宽带上行限制
不同文件速度差异明显,是因为:
每个文件都会重新建立 TCP 拥塞窗口
长文件通常速度更高。
九、压缩参数的现实影响
-z 并不总能提升速度。
对于已经压缩的数据文件:
- CPU 开销增加
- 网络收益有限
- 反而可能降低速率
是否启用压缩,应根据链路实际测试决定。
十、实践结论
本次迁移得到以下稳定经验:
✅ 优先使用 Push 而非 Pull
源端主动发送通常更快。
✅ 跨地域同步优先使用 Rsync
而非 SCP。
✅ 必须启用断点续传参数
避免重复传输。
✅ 不同步日志目录
运行时文件应重新生成。
✅ 多次执行同一命令是安全的
Rsync 会自动补齐差异。
十一、总结
在高延迟网络环境中,文件迁移的核心不在带宽,而在:
- 连接方向
- TCP 行为
- 同步策略
Rsync 提供的差异同步与断点恢复机制,使跨地域服务器迁移从“脆弱操作”转变为可重复、可恢复的标准流程。
对于长期维护的自建基础设施而言,这种同步方式具备更高的稳定性与可控性。