eim*_*rek 30 scp sftp large-files
我用 SCP 试过了,但它说“负文件大小”。
>scp matlab.iso xxx@xxx:/matlab.iso
matlab.iso: Negative file size
Run Code Online (Sandbox Code Playgroud)
还尝试使用 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
Run Code Online (Sandbox Code Playgroud)
知道有什么问题吗?SCP 和 SFTP 不支持大于 2 GB 的文件吗?如果是这样,那么我如何通过 SSH 传输更大的文件?
目标文件系统是 ext4。Linux 发行版是 CentOS 6.5。文件系统当前有(可访问的)大文件(最多 100 GB)。
spi*_*nup 30
我不确定 SCP 和 SFTP 的文件大小限制,但您可以尝试解决 split 问题:
split -b 1G matlab.iso
Run Code Online (Sandbox Code Playgroud)
这将创建 1 GiB 文件,默认情况下,这些文件命名为xaa, xab, xac, .... 然后您可以使用 scp 传输文件:
scp xa* xxx@xxx:
Run Code Online (Sandbox Code Playgroud)
然后在远程系统上用 cat 重新创建原始文件:
cat xa* > matlab.iso
Run Code Online (Sandbox Code Playgroud)
当然,这种变通方法的代价是 split 和 cat 操作所花费的时间,以及本地和远程系统上所需的额外磁盘空间。
ari*_*ica 10
最初的问题(基于阅读对 OP 问题的所有评论)是scp64 位系统上的可执行文件是 32 位应用程序。未使用“大文件支持”编译的 32 位应用程序最终会使用仅限于2^32 =~ 4GB.
您可以scp使用以下file命令判断是否为 32 位:
file `which scp`
Run Code Online (Sandbox Code Playgroud)
在大多数现代系统上,它将是 64 位,因此不会发生文件截断:
$ file `which scp`
/usr/bin/scp: ELF 64-bit LSB shared object, x86-64 ...
Run Code Online (Sandbox Code Playgroud)
一个 32 应用程序应该仍然能够支持“大文件”,但它必须从具有大文件支持的源代码编译,而这种情况显然不是。
推荐的解决方案可能是使用完整的标准 64 位发行版,其中应用程序默认编译为 64 位。