2013-06-15

大きなファイルを rsync でリモートに転送するときに

大きなファイルを定期的にネットワーク越しに転送する場合には scp ではなく rsync を使いたいところ。
そこで付けておくとよさそうなオプションをまとめてみました。特に bwlimit は大事です。




rsync オプションの簡単な解説
オプション 意味
-a, --archive アーカイブモード。次の7つのオプションをまとめた別名。ディレクトリの再帰的なコピー、シンボリックリンクの作成、パーミッションの同期、ファイル修正時間情報の同期、所有グループの同期 (sudo 時のみ) 、所有者の同期、デバイスファイルの維持。
-v, --verbose コマンドの実行結果を標準出力する。コピーされたファイル名の羅列に加えて "sent 396960643 bytes received 25404 bytes 7420299.94 bytes/sec total size is 396806252 speedup is 1.00" みたいなのも表示される。
-u, --update 転送先のファイルに転送元のファイルよりも新しいタイムスタンプが付いている場合はスキップする。
--delete 転送元のファイルが削除されている場合、転送先のファイルも削除される。意図しないファイルが削除されていないか --dry-run モードで確認したほうがいい。僕はこれを怠って $HOME ディレクトリの dotfiles を消してしまったことがある。どうなるかというと .ssh/ がなくなるのでリモート接続できなくなってしまう。
-n, --dry-run 試運転モード。実際にはコピーや削除は行わずにコマンドを実行した結果だけを表示する。
--bwlimit ネットワークの帯域を食いつぶしてしまって他のサービスに影響がでないように帯域制限を設ける。単位がKBPSなので注意が必要。例の場合は 8000KBps (約80Mbps) 。
nice -n 19 rsync コマンドではないですが転送元のコマンドの相対的な優先度を指定できるコマンドです。重い処理になりがちな rsync とは相性がよさそうです。例の -n 19 は最も優先度が低くなっています。
ionice -c2 -n7 こちらも rsync コマンドではないですが転送元の他のプロセスの I/O を邪魔しないようにできるコマンドです。一般ユーザーでは -c2 -n7 を、管理者権限であれば -c3 が最低優先度になります。

普通に使うなら -av くらいしか付けないかと思いますが、今時のサーバはネットワークがボトルネックになっていることもあるかと思いますので --bwlimit はつけたほうがよさそうです。他のコマンドは用途に応じて。

あとちなみに from は from/ にすると中身のファイルを転送して、 from だとディレクトリ自体を転送します。


参考



@ymkjp