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

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

2台のサーバーがあります。そのうちの1つには1,500万個のテキストファイル(約40GB)があります。別のサーバーに移動しようとしています。圧縮してアーカイブを移動してみようかと思いましたが、それが良い考えではないということに気づきました。

だから私は次のコマンドを使用しました。

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

しかし、このコマンドで約50,000個のファイルだけが転送され、接続が失われたことを確認しました。

ファイル全体のコレクションを転送するためのより良いソリューションはありますか?rsyncこれは、接続が失われたときに転送されていないファイルを転送するために同様の方法を使用することを意味します。別の接続が中断されると、すでに正常に転送されたファイルは無視され、ファイルを転送するようにコマンドを再入力します。

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

答え1

あなたが言ったように、以下を使用してください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が彼の答えで述べたように、このソースディレクトリに末尾があることを確認してください。

詳しくはマニュアルページ

答え2

SSH経由でrsyncを使用してください!

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

マニュアルページから:

-ㅏ,--ファイル: これは -rlptgoD と同じです。これは、再帰的でほぼすべてを維持したいことを表現する簡単な方法です(-Hは著しく省略されています)。上記の同等性の唯一の例外は、--files-fromが指定された場合です。この場合、-r は暗示されません。

-V,--言葉が多い:このオプションを使用すると、転送中に提供される情報の量が増えます。デフォルトでは、rsyncは自動的に機能します。単一の -v は、転送されるファイルに関する情報と最後に簡単な要約を提供します。 2つの-vオプションは、スキップされたファイルに関する情報と最後に追加情報を提供します。 rsyncをデバッグする場合にのみ、2つ以上の-vオプションを使用する必要があります。

フォルダの末尾にスラッシュを使用する方法を参照してください。重要

答え3

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

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

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

http://lftp.yar.ru/

答え4

別の方法は、SSHを介して(オプションで圧縮された)tarファイルを転送することです。

tar -czf - ./* | ssh other.host.foo "cd /tmp; tar -xzf-"

関連情報