【ssh】在两个远程服务器之间传输文件的便捷方法
2026/6/3 17:56:47 网站建设 项目流程

在 Slurm 集群上,大体量的tar | ssh管道传输非常容易被系统“杀掉”,即使你人没断线,后台 I/O / 网络 / login node 的限额也会把进程 SIGKILL,导致tar 包尾部缺失 →Unexpected EOF

例如,在Slurm 集群上迁移 conda 环境(几十 GB):

❌ 不推荐:

  • tar -czf(压缩太慢、CPU+IO重)

  • tar | ssh(login node 很容易 kill)

  • 单次scp(不支持断点)

推荐靠谱方案:rsync + --partial + --inplace


具体做法:rsync+ 断点续传

这是HPC 官方推荐方式,假设源服务器服务端口为3022,目的服务器服务端口为2022。

在 2022 端口(源)执行:

rsync -avh \ --partial \ --inplace \ --delete \ --numeric-ids \ --progress \ -e "ssh -p 3022" \ #连接目的服务器端口执行命令 /home/user/miniconda3/envs/my_env/ \ #源服务器文件夹/文件地址 lzh@209.167.43.117:/home/lzh/miniconda3/envs/my_env/ #目的服务器目的地址

为什么这个一定成功?

  • --partial:中断不丢数据

  • --inplace:避免重复写(大文件关键)

  • rsync逐文件校验,不会生成损坏状态

  • 即使被 Slurm 杀掉,重新执行同一条命令会从断点继续,直至传完文件。

💡你可以反复跑这条命令,直到命令很快结束,传输文件列表为空,仅sent少量Bytes(表示没有文件可传,仅发送一些控制信息),意味着文件传完,如下:

sending incremental file list share/gdb/auto-load/home/ sent 3.68M bytes received 7.92K bytes 19.17K bytes/sec total size is 8.48G speedup is 2,298.80 (DRY RUN)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询