公司最近新到了一批服务器,做好了虚拟化,领导一声令下,要把老服务器(老服务存储是有点问题了的)的所有研发环境都迁移到新的服务器上(头大)。只能硬着头皮迁了。实话说,公司研发几年的数据要迁过去是真的麻烦,就一个svn 十几T 的数据,哪怕是局域网传起来也是相当头大。
吐槽归吐槽,活还是要干。
大部分服务器之间传输文件差不多相同的命令 ,无非是调优的问题。
适用于:大量小文件,适当压缩以减少数据量
tar czf - /source/ | pv | ssh user@destination_ip "tar xzf - -C /destination/"
source:源文件目录
destination:目标目录
destination_ip :目标ip
tar czf - /source/:在本地打包,不写入磁盘,直接输出到标准输出
pv:显示传输进度(可选)
ssh user@destination "tar xzf - -C /destination/":在远程服务器解压
优势:
减少 I/O:打包后整体传输,避免单个文件频繁打开/关闭导致的性能损失。
压缩优化:可选 gzip(tar czf),提高传输速度
适用于:带宽充足,速度优先
两台服务器要先安装netcat
yum install nc
yum install pv # 显示进度源服务器安装即可
在目标服务器上运行监听端口:
nc -l 9999 | tar xzf - -C /destination/
9999:设置监听的端口,可以自定义
destination:目标目录
在源服务器上运行传输命令:
tar czf - /source/ | pv | nc destination_ip 9999
source: 源文件目录
destination_ip :目标ip
pv :显示进度
优势:
比 SSH 快,因为 SSH 需要加密,而 nc 直接传输数据。
超高速,适用于局域网。
这个里我主要是用的这两个方法,主要是快。当然还有其他的传送方法,像rsync,scp 等,看个人追求了需要断点传续的话就用rsync了。
下面是一些传输组合,有兴趣可以试试。
| 方案 | 使用场景 | 速度 |
|---|---|---|
| tar + ssh | 常规传输 | *** |
| rsync | 断点续传/增量传输 | ** |
| tar + Netcat | 局域网超高速 | **** |
| tar + pigz + ssh | CPU 多核优化 | *** |
| BBR + SCP | 高延迟/丢包网络 | ** |
局域网:tar + Netcat
远程服务器:tar + ssh 或 rsync
支持断点续传:rsync

