あるサーバーから別のサーバーに数百万のファイルを転送する


15

2台のサーバーがあります。そのうちの1つには1500万のテキストファイル(約40 GB)があります。それらを別のサーバーに転送しようとしています。それらを圧縮してアーカイブを転送することを検討しましたが、これは良い考えではないことに気付きました。

そこで、次のコマンドを使用しました。

scp -r usrname@ip-address:/var/www/html/txt /var/www/html/txt

しかし、私はこのコマンドが約50,000個のファイルを転送するだけで、その後接続が失われることに気付きました。

ファイルのコレクション全体を転送できるより良いソリューションはありますか?rsync接続が失われたときに転送されなかったファイルを転送するようなものを使用することを意味します。別の接続割り込みが発生した場合、ファイルを転送するためにコマンドを再度入力し、すでに正常に転送されたファイルを無視します。

scp常に最初のファイルから始まるため、これは不可能です。

回答:


33

あなたが言うように、使用してrsyncください:

rsync -azP /var/www/html/txt/ username@ip-address:/var/www/html/txt

オプションは次のとおりです。

-a : enables archive mode, which preserves symbolic links and works recursively
-z : compress the data transfer to minimise network usage
-P : to display a progress bar and enables you to resume partial transfers

@aimが彼の答えで述べているよう/に、ソースディレクトリの末尾にあることを確認してください(両方とも問題ありません)。

マニュアルページの詳細


1
-h人間が読める単位を使用するようにフラグを追加することをお勧めします。さらに詳細な情報が必要な場合は、いくつかのオプションがあります:-iand / or -v/ -vv
nyuszika7h 14年

2
一般に、scpの代わりに常にrsyncを使用しない理由はほとんどありません。基本的な使い方は同じで、多くの便利な機能が追加されています。
ピムロット14年

もしsshあなたとあなたが暗号化を必要とするか、したくないあなたは私のスクリプトを試すことができますのためのオプションではありませんs3.amazonaws.com/skaperen/rsendを
Skaperen

7

ssh経由でrsyncを使用するだけです!

rsync -av username@ip:/var/www/html/txt /var/www/html/

manページから:

-a、 - アーカイブ:これは-rlptgoDと同等です。これは、再帰が必要であり、ほとんどすべてを保持したいという簡単な方法です(-Hは省略しやすい)。上記の同等性の唯一の例外は、-files-fromが指定されている場合です。この場合、-rは暗黙指定されません。

-v-verbose:このオプションは、転送中に提供される情報の量を増やします。デフォルトでは、rsyncはサイレントに動作します。単一の-vは、転送されるファイルに関する情報と、最後に簡単な要約を提供します。2つの-vオプションを使用すると、スキップされるファイルに関する情報と、最後にわずかに多くの情報が表示されます。3つ以上の-vオプションは、rsyncをデバッグする場合にのみ使用してください。

フォルダの最後でスラッシュをどのように使用したかに注意してください-それは重要です。


末尾のスラッシュの重要性に関する情報を追加する必要があります。rsyncマニュアルページから:「ソースの末尾のスラッシュはこの動作を変更し、宛先で追加のディレクトリレベルを作成しないようにします。ソースの末尾/は、「名前でディレクトリをコピーします」が、どちらの場合も、格納先ディレクトリの属性は宛先の格納先ディレクトリに転送されます。」
nyuszika7h

...そしてフラグの意味は-av
MrWhite 14年

0

rftpよりも高速で、ウェブサイトのミラーリングに最適なlftpを使用してください(多くの小さなファイル)。複数の接続を使用して並行して転送することもできます。

lftp -u username,password sftp://ip-address -e 'mirror --only-newer --no-dereference --parallel=5 /remote/path/ /destination/;quit'

1つの接続が切断されると、再接続して続行されます。転送を中断すると、既存のファイルをスキップして続行します。

http://lftp.yar.ru/


0

別の方法は、(オプションで圧縮された)tarファイルをsshでパイピングすることです:

tar -czf - ./* | ssh other.host.foo "cd /tmp; tar -xzf-"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.