一、背景

在一次跨地域服务器迁移过程中,需要将既有系统中的 V2Ray 运行文件迁移至一台新设备。迁移对象主要包括以下内容:

  • 可执行程序
  • 数据文件(GeoIP / GeoSite)
  • 配置文件

日志文件不参与迁移,因为目标系统会自动重新生成。

迁移环境具有如下特征:

  • 两台 Linux 服务器位于不同国家网络环境
  • 通过 SSH 非标准端口连接
  • 网络延迟较高且链路稳定性一般
  • 目标设备为全新系统

因此,本次迁移的核心问题并非“如何复制文件”,而是:

如何在跨境高延迟网络下稳定、高效、可恢复地完成文件同步。


二、初始方案:SFTP / SCP 拉取

最初采用的方式为:

目标服务器 → SSH 登录 → 从远端 SCP 下载

该模式存在两个问题:

  1. 传输速度较低
  2. 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 提供的差异同步与断点恢复机制,使跨地域服务器迁移从“脆弱操作”转变为可重复、可恢复的标准流程。

对于长期维护的自建基础设施而言,这种同步方式具备更高的稳定性与可控性。

Leave a Reply

Your email address will not be published. Required fields are marked *