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は2 GBより大きいファイルをサポートしませんか?もしそうなら、どうすればSSH経由でより大きなファイルを転送できますか?
宛先ファイルシステムはext4です。 LinuxディストリビューションはCentOS 6.5です。ファイルシステムには現在、(アクセス可能な)大きなファイル(最大100 GB)があります。
(OPの質問に対するすべてのコメントの読み取りに基づく)元の問題は、64ビットシステムのscp
実行可能ファイルが32ビットアプリケーションであるということでした。 "large-file support" でコンパイルされていない32ビットアプリケーションは、2^32 =~ 4GB
に制限されたシークポインターで終了します。
scp
コマンドを使用して、file
が32ビットかどうかを確認できます。
file `which scp`
最近のほとんどのシステムでは64ビットであるため、ファイルの切り捨ては発生しません。
$ file `which scp`
/usr/bin/scp: ELF 64-bit LSB shared object, x86-64 ...
32アプリケーションは引き続き「大きなファイル」をサポートできるはずですが、このケースでは明らかにそうではなかった、大きなファイルをサポートするソースからコンパイルする必要があります。
推奨される解決策は、アプリがデフォルトで64ビットとしてコンパイルされる完全な標準64ビットディストリビューションを使用することです。
SCPとSFTPのファイルサイズの制限についてはわかりませんが、分割の問題を回避してみてください。
split -b 1G matlab.iso
これにより、1 GiBファイルが作成され、デフォルトではxaa, xab, xac, ...
。次に、scpを使用してファイルを転送できます。
scp xa* xxx@xxx:
次に、リモートシステムで元のファイルをcatで再作成します。
cat xa* > matlab.iso
もちろん、この回避策のペナルティは、splitとcat操作にかかる時間、およびローカルシステムとリモートシステムに必要な追加のディスク容量です。