web-dev-qa-db-ja.com

あるサーバーから別のサーバーに約300 GBのファイルを転送する

現在、約200,000個のファイルを新しいサーバーに転送しています。私はこれまでにこれほど大規模なことをしたことがなく、どうすればよいかについてアドバイスを求めていました。私は2つのCentos 6ディストリビューション間でそれらを移動しています。それらは国内の異なる場所にあります。元のサーバーにすべてのディレクトリとファイルを1つの大きなtarballに圧縮するのに十分なHDDスペースがないので、私の質問は、これらのファイルをすべて転送する方法を教えてください。 rsync? rsyncを使用するいくつかの特別な方法?それを行う方法についての入力/提案は素晴らしいでしょう。

ありがとう

編集:不思議に思う人のために、私はこのような大きなscreenコマンドを実行するときにrsyncを使用することを強くお勧めします。特に、おかしなことが起こり、rsyncコマンドを実行しているサーバーAへの接続が失われた場合。次に、画面を切り離して、後で再開します。

20
MasterGberry

Simonの肉付け answer を具体化するために、rsyncは仕事に最適なツールです。

   Rsync  is  a  fast  and extraordinarily versatile file copying
   tool.  It can copy locally,  to/from  another  Host  over  any
   remote  Shell,  or to/from a remote rsync daemon.  It offers a
   large number of options  that  control  every  aspect  of  its
   behavior  and permit very flexible specification of the set of
   files to be copied.  It is famous for its delta-transfer algo‐
   rithm,  which reduces the amount of data sent over the network
   by sending only the differences between the source  files  and
   the  existing  files in the destination.  Rsync is widely used
   for backups and mirroring and as an improved copy command  for
   everyday use.

リモートマシンへのsshアクセス権があるとすると、次のようなことを行います。

rsync -hrtplu path/to/local/foo [email protected]:/path/to/remote/bar

これにより、ディレクトリpath/to/local/fooがリモートサーバーの/path/to/remote/barにコピーされます。 bar/fooという名前の新しいサブディレクトリが作成されます。ターゲットにその名前のディレクトリを作成せずに、ディレクトリのcontentsのみをコピーする場合は、末尾にスラッシュを追加します。

rsync -hrtplu path/to/local/foo/ [email protected]:/path/to/remote/bar

これにより、foo/の内容がリモートディレクトリbar/にコピーされます。

いくつかの関連オプション:

 -h,                         output numbers in a human-readable format 
 -r                          recurse into directories
 -t, --times                 preserve modification times
 -p, --perms                 preserve permissions
 -l, --links                 copy symlinks as symlinks
 -u, --update                skip files that are newer on the receiver
 --delete                    delete extraneous files from dest dirs
 -z, --compress              compress file data during the transfer
 -C, --cvs-exclude           auto-ignore files in the same way CVS does
 --progress                  show progress during transfer
 --stats                     give some file-transfer stats
24
terdon

これは、コピーする必要がある速度と使用可能な帯域幅に依存します。

ネットワーク接続が不十分な場合は、テープでいっぱいのトラックの帯域幅を検討してください。 (読む:2.5インチHDDを郵送するか、自分でドライブしてください。300ギガビットドライブは簡単に見つけられるはずです)。

時間がそれほど重要でない場合、または十分な帯域幅がある場合は、rsyncが最適です。エラーがある場合は、以前のファイルを再コピーせずに続行できます。

[編集]コピー中にデータが使用された場合、rsyncを複数回実行できることを忘れてしまいました。

例:
1)使用中のデータ。 Rsync->すべてのデータがコピーされます。これには時間がかかる場合があります。
2)再度rsyncを実行します。変更されたファイルのみがコピーされます。これは速いはずです。

変更がなくなるまでこれを数回行うことができます。または、コピー中にデータを読み取り専用にすることで、スマートで安全な方法で行うことができます。 (たとえば、それが読み取り専用に共有する使用済みの共有セット上にある場合。または、データをrsyncし、夜間に共有を読み取り専用に設定し、2回目に実行する場合)。

14
Hennes

私はrsyncに行きます!私は自分のサーバーをオフサイトサーバーにバックアップするために使用していますが、問題なく動作します。通常、コピーするMBは数MBですが、場合によっては20〜30 GBになり、問題なく動作します。

6
Simon

ギガビット接続を使用したNFSを介したrsyncには、約10時間かかります。 HDDにデータをコピーし、サーバー間で移動することをお勧めします。実際のディスクの1対1のコピーを作成する必要がある場合は、ddなどを使用して、ディスクのrawイメージを作成します。 ssh(scp)を使用すると、大きなオーバーヘッドが発生します。ギガビット接続で実験的にテストされています。 rsyncは、HAまたはバックアップモードで使用される2つのサーバー間で増分同期を行うのに適しています。私は推測する。

0
Pawel

初めてNFSとtar/untarを使用します(NFSはこの場合最も高速なプロトコルです。tarはCPU使用率を増やすことでネットワーク帯域幅を節約します)

tar cf - * | ( cd /target; tar xfp -)

次回はrsyncを使用します

0
jet