旧服务器上的数据要搬得又快又稳,核心思路是“先并行全量同步,再持续增量追平,最后切换收尾”,绝不要停服死等一次性拷贝。
旧服务器换新机、机房搬迁、业务上云,数据迁移这一步躲不开,很多人一上来就启动 scp 或拖拽整个目录,结果小文件一多,进度条走一天,业务还不敢停,问题不在于命令不够快,而在于你的迁移方式根本没针对旧服务器的实际环境做优化。
旧服务器数据迁移为什么慢?瓶颈不在网速,在“读写模式”
先别急着换千兆万兆网卡,先看看慢在哪,业内专家指出,数据迁移速度的瓶颈通常有三个层次:
- 磁盘IO能力:旧服务器多为机械硬盘,随机读写小文件时,IOPS只有几十到几百,哪怕网络带宽再大,磁盘读不出来也白搭。
- 单线程传输限制:一个
scp进程只用一个TCP连接,遇到高延迟网络或丢包,吞吐量立刻掉下来。 - 海量小文件的元数据开销:假设有100万个文件,每个文件都要打开、读取、关闭、写入,光系统调用就要几小时,这还不算实际数据量。
行业共识认为,迁移500GB数据,如果全是50KB的小图片,耗时甚至比迁5TB的大视频更久,要把“快”建立在“并行”和“增量”上。
旧服务器数据迁移最快方法:先并行全量同步,再增量追平
不要一次性拷完直接切,按下面三个阶段走,既能提速又能保证一致性。
第一阶段:用rsync并行通道做全量同步
rsync 是Linux下最可靠的数据同步工具,它默认单线程,但你可以通过拆分任务实现并行。
- 按目录拆分:把数据分成十几个子目录,每个子目录单独跑一个
rsync进程,后台并行执行。 - 按文件数量拆分:使用
find按文件名规律分组,find /data -name "a"和find /data -name "b",分别同步,避免一个进程处理所有目录。
实际做法示例:
rsync -avH --delete /data/user/ root@新服务器IP:/data/user/ & rsync -avH --delete /data/order/ root@新服务器IP:/data/order/ & wait
这里用了 -H 保留硬链接,-a 保留权限和时间戳,--delete 让目标端文件和源端完全一致,同时启动多个任务,让磁盘队列排队读取,整体吞吐量能提升3到5倍。
第二步:利用快照或文件锁,避免同步过程中数据变化

业务还在跑,旧服务器上的文件一直在更新,直接全量同步完,再跑一次增量同步,才能追平差异。
- 如果旧服务器是XFS或ZFS文件系统,用 LVM 做快照,再对快照目录做首次全量同步,这样新服务器得到的是一个时间点完全一致的副本。
- 如果无法做快照,那就选一个流量低峰期,先停写操作(或只读模式),再跑最后一次增量同步,把这段时间产生的变化补过去。
这一阶段不要急着切流量,让新旧服务器并行运行一段时间,观察数据是否一致。
第三步:增量追平后,校验文件数量与大小
很多迁移失败不是数据丢了,而是文件数和大小对不上。
# 源端统计 find /data -type f | wc -l du -sh /data # 目标端统计 ssh 新服务器 "find /data -type f | wc -l" ssh 新服务器 "du -sh /data"
数量一致后,还要抽样几个关键目录用 diff -r 对比内容,大型目录用 diff -qr 打印差异文件清单,比逐个校验效率高得多。
服务器数据迁移工具哪个好?别被花哨功能带偏
市面上有各种迁移工具,但核心就三类,选哪一类,看你的场景。
| 工具类别 | 代表 | 适合场景 | 速度特点 |
|---|---|---|---|
| 命令行性价比之王 | rsync | Linux文件级同步 | 单线程慢,并行快,小文件表现优秀 |
| 整体镜像工具 | dd、Partclone | 整块磁盘复制、系统盘迁移 | 速度取决于磁盘IO,适合同大小磁盘 |
| 专业迁移软件 | StarWinds、DiskGenius | Windows与Linux混合环境、虚拟机迁移 | 有增量机制,支持断点续传,但需要授权费 |
如果你是Linux服务器到Linux服务器,直接用rsync就够,它免费、稳定、支持断点续传,还能压缩传输节省带宽。
如果是跨平台迁移(Windows Server到Linux),或者物理机转虚拟机,再用专业工具,但注意,这类工具的价格不低,往往按物理CPU核心数或迁移数据量计费,你可以先用rsync测试一下实际带宽和迁移耗时,再决定要不要花钱。

企业服务器迁移方案怎么选?按场景套模板
不同场景,最优策略完全不同。
场景A:同机房、内网万兆互联
旧服务器和新服务器在同一网段,路由可达,这是最理想的,速度上限由磁盘决定。
- 直接并行rsync,开启
--compress关闭,因为内网带宽足够,压缩反而消耗CPU。 - 小文件多时,用
tar先打包再传输,减少元数据开销。 - 最后停业务五分钟,跑最后增量同步,切换IP即可。
场景B:跨地域传输,链路不稳定
两机房跨省或跨境,延迟高且偶发丢包。
- 用
rsync --partial --progress支持断点续传,不要用scp,断线就白跑。 - 增加
--bwlimit限速,避免占满带宽影响线上业务。 - 有条件就开启
rsync --compress,压缩率高的文本数据能减少70%传输量。 - 更稳的做法是用
rclone或ossutil先传到对象存储中转,再从对象存储下载到新服务器,两段都走HTTPS,可重复执行。
关于数据迁移价格,如果完全走公网流量,云厂商的费用按上行和下行分别计费,国内主流云服务商上行免费,下行按0.5元/GB左右收费(据公开定价),你在云服务器之间迁移数据,尽量使用内网访问,不产生下行流量费用。
场景C:虚拟化环境下的整机迁移
旧服务器是VMware或KVM虚拟机,希望把整机搬到新平台。
- 不需要文件级同步,直接使用平台自带的导出/导入功能,
vCenter的克隆或迁移。 - 如果跨虚拟化平台,用
qemu-img convert转换磁盘格式,然后传到新宿主机。 - 注意虚拟机磁盘是稀疏文件,迁移前先执行
trim或fstrim回收空闲空间,文件体积能缩小一半。
旧服务器数据迁移注意事项:这几点最容易翻车
权限和属主别丢
rsync加 -a 参数就能保留属主和权限,要是漏了这个,迁移后网站报“Permission denied”,应用起不来,临时改权限会累死人。
软链接别变成普通文件
有些应用用软链接引用共享库或配置文件,rsync在默认情况下会把软链接当作普通文件复制,目标端长出一堆重复文件,务必使用 -l 或直接用 -a(包含 -l)参数,保留软链接本身。
校验机制要提前做好
大规模迁移过程中,磁盘静默错误、网络传输损坏都存在,建议在做完增量同步后,用

md5sum 对源端和目标端的关键文件做抽查,或者用 rsync -c 强制对比校验和一次性检查。
新服务器的文件系统格式
旧服务器用了 ext4,新服务器如果默认是 xfs,个别应用可能遇到兼容性问题(例如硬链接语义差异),迁移前先确认业务需要的文件系统特性,在 /etc/fstab 中设置好挂载参数。
迁移时间窗口预留
即使全程并行,也要按数据量和带宽提前估算,公式估算:总容量 / 可用带宽 / 2(因为同时读写)再乘以系数1.5,不是每个时刻都能跑满带宽,预留缓冲时间才能避免业务侧抱怨。
迁移过程中数据安全怎么保证?用增量手段兜底
要在不停机的情况下保证数据一致,最稳妥的做法是“同步三遍”:
- 第一遍全量同步(此时业务照常写)
- 第二遍增量同步(追平第一遍的差异)
- 第三遍在业务切换前或切换后立即执行,此时旧服务器只读或已停止写入,把最后几秒的增量补上
如果旧服务器上的数据库也在跑,千万别直接用rsync拷贝数据库文件目录,MySQL这类数据库需要先停止或使用 mysqlhotcopy 等方法做物理备份,否则拷贝出的文件不一致,新库可能启动失败。
常见问题解答
旧服务器数据迁移最快方法是什么?
最快的不是命令,而是流程,多路并行rsync做全量,配合快照或只读模式做增量,最后校验切换,如果你只有一台旧服务器和一台新服务器,就在旧服务器上跑4到6个并行rsync进程,覆盖不同数据目录,然后循环跑 rsync -avH --delete 直至输出“ated to check”之外无差异,这个过程中,网络利用率能维持在90%以上,磁盘IO也成为唯一瓶颈。
为什么用rsync比scp快很多?
scp不支持断点续传,无法增量同步,rsync默认情况下只传输改动的文件块,第一次全量时速度差不多,第二次及以后就快几个数量级,更关键的是,scp单线程传输大文件遇到丢包时吞吐量骤降,rsync可以配合 --bwlimit 和并行分片策略,在不可靠网络下表现更好。
数据迁移价格大概多少钱?
如果是自建机房迁移,成本主要是人力工时和迁移时段内的带宽占用,如果使用云服务商提供的数据迁移服务,例如迁移工具或专线,费用从几百元到数万元不等,取决于数据量和是否走公网流量,普通中小型企业迁移2TB以下数据,自己动手用rsync,成本几乎为零,只需承担迁移期间的带宽费用。