如何在两台Ubuntu服务器间快速传输500+GB大文件?
大文件跨Ubuntu服务器高速迁移方案
针对500GB+数据的跨服务器迁移,以下几种方法比scp更高效,可根据网络环境和需求选择:
1. 优化rsync传输
rsync是增量同步工具,默认比scp高效,通过参数优化可进一步提升速度:
- 核心命令(从旧服务器推送到新服务器):
rsync -avz --progress --block-size=10M user@old-server-ip:/path/to/source/ user@new-server-ip:/path/to/dest/ - 参数说明:
-a:归档模式,保留权限、时间戳等属性-z:启用压缩,适合带宽有限的场景;若带宽充足,改用--no-compress减少CPU消耗--block-size=10M:增大传输块大小,减少网络交互次数--progress:实时显示传输进度
- 更优方式:直接在新服务器上拉取数据,避免本地中转:
rsync -avz --progress --block-size=10M user@old-server-ip:/path/to/source/ /local/dest/path/
2. tar+ssh 管道传输
通过tar打包后直接通过ssh管道传输,减少单文件传输的协议开销:
- 带压缩版本(带宽不足时用):
ssh user@old-server-ip "tar -czf - /path/to/source/" | ssh user@new-server-ip "tar -xzf - -C /path/to/dest/" - 无压缩版本(带宽充足时,CPU占用更低):
ssh user@old-server-ip "tar -cf - /path/to/source/" | ssh user@new-server-ip "tar -xf - -C /path/to/dest/"
3. netcat(nc)轻量传输
netcat是无加密的轻量传输工具,适合信任环境下的高速传输,也可结合openssl加密:
无加密传输(最快)
- 新服务器端监听端口:
nc -l 1234 | tar -xf - -C /path/to/dest/ - 旧服务器端发送数据:
tar -cf - /path/to/source/ | nc new-server-ip 1234
加密传输(兼顾速度与安全)
- 新服务器端:
nc -l 1234 | openssl enc -d -aes-256-cbc -k "your-secure-password" | tar -xf - -C /path/to/dest/ - 旧服务器端:
tar -cf - /path/to/source/ | openssl enc -aes-256-cbc -k "your-secure-password" | nc new-server-ip 1234
4. 优化SSH底层参数
scp和rsync都基于SSH,调整SSH加密算法和参数可提升传输效率:
- 改用更快的加密算法(如chacha20-poly1305),示例rsync命令:
rsync -avz --progress -e "ssh -o Ciphers=chacha20-poly1305@openssh.com -o Compression=no" user@old-server-ip:/path/to/source/ user@new-server-ip:/path/to/dest/ - 若需长期优化,可修改旧服务器
/etc/ssh/sshd_config,添加:
重启sshd服务生效:Ciphers chacha20-poly1305@openssh.com Compression nosudo systemctl restart sshd
额外优化建议
- 非高峰时段传输,避免服务器资源被其他任务占用
- 用
ionice调整传输进程的IO优先级,减少对磁盘的影响:ionice -c 3 rsync -avz --progress ... - 若数据分散为大量小文件,先打包成单个文件再传输,减少文件系统交互开销
内容的提问来源于stack exchange,提问作者Ahmad Zafar
相关产品推荐
相关产品推荐

