2台のサーバーがあります。それらの1つには、1500万のテキストファイル(約40 GB)があります。それらを別のサーバーに転送しようとしています。それらを圧縮してアーカイブを転送することを検討しましたが、これは良い考えではないことに気付きました。
そこで、次のコマンドを使用しました。
scp -r usrname@ip-address:/var/www/html/txt /var/www/html/txt
しかし、このコマンドは約50,000ファイルを転送するだけで、接続が失われることに気付きました。
ファイルのコレクション全体を転送できるより良いソリューションはありますか?接続が失われたときに転送されなかったファイルを転送するには、rsync
のようなものを使用することを意味します。別の接続の割り込みが発生した場合は、コマンドを再度入力してファイルを転送し、既に正常に転送されたファイルは無視します。
これは、常に最初のファイルから始まるため、scp
では不可能です。
あなたが言うように、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が答えで述べているように、末尾に/
ソースディレクトリ(両方とも問題ありません)。
詳細は man page から
Sshではなくrsyncを使用してください!
rsync -av username@ip:/var/www/html/txt /var/www/html/
Manページから:
-a、-archive:これは-rlptgoDと同等です。これは、再帰が必要で、ほとんどすべてを保持したいという簡単な方法です(-Hは重要な省略です)。上記の同等の唯一の例外は、-files-fromが指定されている場合です。その場合、-rは暗黙指定されません。
-v、-verbose:このオプションは、転送中に提供される情報の量を増やします。デフォルトでは、rsyncはサイレントで動作します。 -vを1つ指定すると、転送されているファイルに関する情報と、最後に簡単な概要が表示されます。 2つの-vオプションを使用すると、スキップされるファイルに関する情報と、最後に少し多くの情報が表示されます。 2つを超える-vオプションは、rsyncをデバッグする場合にのみ使用してください。
フォルダーの最後にスラッシュを使用した方法に注意してください- 重要 です。
Lftpを使用します。これはrsyncよりはるかに高速で、Webサイトのミラーリング(多くの小さなファイル)に最適です。複数の接続を使用して並列に転送することもできます。
lftp -u username,password sftp://ip-address -e 'mirror --only-newer --no-dereference --parallel=5 /remote/path/ /destination/;quit'
1つの接続が切断されると、再接続して続行します。転送を中断すると、既存のファイルがスキップされて続行されます。
別の方法は、(オプションで圧縮された)tarファイルをsshにパイプすることです。
tar -czf - ./* | ssh other.Host.foo "cd /tmp; tar -xzf-"