SSH経由で大容量ファイル(8GB)を転送する

SSH経由で大容量ファイル(8GB)を転送する

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

同期何らかの理由で中断された転送を続行できるため、SSH経由で大容量ファイルを転送するのに適しています。連続機能はハッシュ関数を使用して同じファイルブロックを検出するため、非常に強力です。

驚くべきことに、あなたのsftp/バージョンはscp32ビットバイナリでも大容量ファイルをサポートしていないようです。LFSサポート今はかなり標準になります。

答え3

元の問題(OPの質問のすべての説明を読んだ結果)は、scp64ビットシステムの実行可能ファイルが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ビットディストリビューションを使用することです。

関連情報