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 -b 1G matlab.iso
これにより、defaultという名前の1GiBファイルが作成されますxaa, xab, xac, ...
。その後、scpを使用してファイルを転送できます。
scp xa* xxx@xxx:
次に、リモートシステムでcatを使用して元のファイルを再作成します。
cat xa* > matlab.iso
もちろん、この回避策のコストは、分割操作とキャット操作にかかる時間だけでなく、ローカルシステムとリモートシステムの両方に必要な追加のディスク容量です。
答え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ビットディストリビューションを使用することです。