我用 SCP 尝试过,但它显示“负文件大小”。
>scp matlab.iso xxx@xxx:/matlab.iso
matlab.iso: Negative file size
还尝试使用 SFTP,工作正常,直到传输了 2 GB 文件,然后停止:
sftp> put matlab.iso
Uploading matlab.iso to /home/x/matlab.iso
matlab.iso -298% 2021MB -16651.-8KB/s 00:5d
o_upload: offset < 0
知道可能出什么问题吗? SCP和SFTP不支持大于2GB的文件吗?如果是这样,那么如何通过 SSH 传输更大的文件?
目标文件系统是ext4。 Linux发行版是CentOS 6.5。文件系统当前有(可访问的)大文件(最大 100 GB)。
答案1
我不确定 SCP 和 SFTP 的文件大小限制,但您可以尝试使用 split 解决该问题:
split -b 1G matlab.iso
这将创建 1 GiB 文件,默认情况下命名为xaa, xab, xac, ...
.然后您可以使用 scp 传输文件:
scp xa* xxx@xxx:
然后在远程系统上使用 cat 重新创建原始文件:
cat xa* > matlab.iso
当然,这种解决方法的代价是 split 和 cat 操作所花费的时间,以及本地和远程系统所需的额外磁盘空间。
答案2
答案3
最初的问题(基于阅读OP问题的所有评论)是scp
64位系统上的可执行文件是32位应用程序。未编译的 32 位应用程序“大文件支持”最终得到的查找指针仅限于2^32 =~ 4GB
.
您可以scp
使用以下命令判断是否是 32 位file
:
file `which scp`
在大多数现代系统上,它将是 64 位的,因此不会发生文件截断:
$ file `which scp`
/usr/bin/scp: ELF 64-bit LSB shared object, x86-64 ...
32位应用程序应该仍然能够支持“大文件”,但它必须从具有大文件支持的源代码进行编译,而本例显然不是。
推荐的解决方案可能是使用完整的标准 64 位发行版,其中应用程序默认编译为 64 位。