Windows下WinSCP传输大文件速度远优于Fedora下scp/rsync的问题求助
Windows下WinSCP传输大文件速度远优于Fedora下scp/rsync的问题求助
这问题我碰到过好多次,核心原因是WinSCP默认对SFTP传输做了不少针对性优化,而Linux下默认的scp/rsync参数并没有适配大文件传输场景,尤其是你用的rsync参数还踩了个小坑。下面给你拆解原因和解决办法:
为什么速度差这么大?
- WinSCP默认会自动调整SFTP的缓冲区大小,还优化了TCP连接参数,减少小数据包的传输次数,同时它的SFTP实现对大文件传输做了专门适配。
- 你用的
rsync -avz里的-z参数是关键问题之一:你的文件是.tif格式,本身已经是压缩过的,再用rsync压缩会额外占用本地和远程的CPU资源,反而拖慢传输速度,变成CPU瓶颈。 - 默认的scp和rsync缓冲区都很小,频繁的小批量数据传输会让网络利用率上不去,自然速度就被限制住了。
具体解决办法
1. 优化scp命令
增大传输缓冲区,减少网络交互次数:
scp -B 8192 user@remote.hpc:/grab/path/object.tif /target/path/
这里的8192是缓冲区大小(单位是KB,也就是8MB),你可以根据网络情况调到16384(16MB)试试,找到最适合的数值。
2. 修正rsync命令
去掉无用的压缩参数,加上直接传输(跳过增量检查,单个大文件不需要这个)和大缓冲区:
rsync -avW --progress --buffer-size=8M user@remote.hpc:/grab/path/object.tif /target/path/
-W:直接传输整个文件,不做增量比对,节省CPU和时间--buffer-size=8M:增大传输缓冲区,提升网络利用率
3. 用Fedora自带的SFTP客户端优化
如果你习惯图形界面拖放,可以在GNOME文件管理器里的SFTP连接中调整设置:
- 打开连接后,进入设置(一般是右键连接图标),找到SFTP缓冲区大小,设置为8MB或16MB
- 或者用FileZilla这类图形化SFTP工具,它默认的优化比系统自带的文件管理器好很多,和WinSCP的速度差距会很小
4. 持久化优化SSH配置
如果经常传文件,可以修改本地的SSH配置~/.ssh/config,添加针对这个HPC的优化参数:
Host remote.hpc User your_username SftpBufferSize 8388608 # 8MB,单位是字节 TCPKeepAlive yes ServerAliveInterval 30
这样每次连接这个HPC时都会自动应用这些优化,不用每次输参数。
试完这些方法,速度应该能接近WinSCP的水平了!
备注:内容来源于stack exchange,提问作者P. May




