sshを介した大きな(8 GB)ファイルの転送


27

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)。


5
サイズの可変オーバーランのように見えます。しかし、知る限りscp / sftpにはサイズ制限がありません。宛先ファイルシステムとは何ですか?LARGEFILESをサポートしていますか?
Milind Dumbare

1
アプリケーションsftpとscpはどうですか?これは、バイナリに対してfileコマンドを使用して確認できます。
mdpc

1
@shepherd-はい。
mdpc

2
32ビットアプリケーションは、でコンパイルされている場合、大きなファイルにアクセスできます-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64。あなたは、64ビット6.5システムを実行している場合しかし、おそらく、管理者がインストール持つことが容易になるだろうopenssh-5.3p1-94.el6_6.1.x86_64openssh-server-5.3p1-94.el6_6.1.x86_64、標準のリポジトリから。
マークPlotnick

1
ファイルサイズに符号付き整数を使用したソフトウェアの笑
モニカとの明度の

回答:


9

元の問題(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ビットディストリビューションを使用することです。


33

Rsyncは、何らかの理由で中断された転送を続行できるため、sshを介した大きなファイルの転送に非常に適しています。ハッシュ関数を使用して等しいファイルブロックを検出するため、継続機能は非常に堅牢です。

sftp/ scpバージョンが大きなファイルをサポートしていないように思われるのは驚くべきことです。32ビットバイナリであっても、LFSのサポートは今日ではかなり標準的なはずです。


4
ファイルの大部分が既に転送されていることを考えると、これrsyncは良い考えです。この-Pオプションを使用して、進行状況の表示を取得し、転送が再び中断された場合に不完全なファイルを保持するように受信者に指示します。
サイモンリヒター

25

SCPとSFTPのファイルサイズの制限についてはわかりませんが、splitの問題を回避してみてください。

split -b 1G matlab.iso

これにより、デフォルトでという名前の1つのGiBファイルが作成されますxaa, xab, xac, ...。その後、scpを使用してファイルを転送できます。

scp xa* xxx@xxx:

次に、リモートシステムでcatを使用して元のファイルを再作成します。

cat xa* > matlab.iso

もちろん、この回避策のペナルティは、分割操作と猫操作にかかる時間、およびローカルシステムとリモートシステムに必要な追加のディスク領域です。


1
良いアイデア。私はすでにUSBドライブでファイルを転送しましたが、これはおそらくもっと便利だったでしょう。ただし、scpとsftpを正しく動作させるほど便利ではありません。
eimrek
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.