rsyncコマンドは、データを同期させる際にたまに使用するコマンドです。たまに使用するがゆえに、有効なオプションや使用法を忘れてしまいますので、覚書として記載します。
rsyncコマンドの初回に使用するコマンド
基本的には、A(ここでは、/etc/aaa とします) からB(ここでは、/etc/bbb とします)にデータを同期するコマンドです。具体的なコマンドラインは、
$ rsync -av /etc/aaa/ /etc/bbb/
となります。
ここで、オプションの「-a」は、アーカイブモード(「-rlptgoD -no-H -no-A -no-X」相当)で、とりあえず可能な限りデータ(パーミッションやタイムスタンプなど)を同じにしたい場合は、付与しておきます。
「-v」は、動作内容を表示するので、現在どのファイルをコピーしているのか等の情報を画面上に表示します。なお、バックグラウンドで動かす(コマンドの最後に&を付ける)場合は、このオプションは不要です。
rsyncのディレクトリのスラッシュ(/)の有無の違いについて
コピー元の aaaの後のスラッシュ(/)があるのとないので、コピーの挙動が変わる事もお伝えします。なお、コピー先のbbbの後のスラッシュ(/)は、あってもなくても同じ挙動となりますので、気にしなくて良いです。
具体的には、
$ rsync -av /etc/aaa/ /etc/bbb/
であれば、ディレクトリaaa の中身が bbb にコピーされます。逆に言えば、aaaというディレクトリ自体はコピーされません。
$ rsync -av /etc/aaa /etc/bbb/
であれば、ディレクトリaaa 自体が bbbにコピーされます。ですので、コピー後は、/etc/bbb/aaa というディレクトリ構造になります。
このあたり、どのようにデータを同期したいかによって、スラッシュを付けるかどうかが変わりますので、ご認識ください。
rsyncコマンドの2回目以降に使用するコマンド
初回は、データを同期する方向に誤りがないかを確認することと、とにかくデータをコピーすることに集中したい(容量が少なければ気にすることはありませんが、容量が多いとオプションの数が多いほど低速になる)ので、非常にシンプルなオプションのみで実行しました。
しかしながら、2回目以降は、データの同期の精度をより高めたいので次のようなオプションを付与して実行します。
$ rsync -avc --delete /etc/aaa/ /etc/bbb/
オプションの「-c」は、チェックサムで変更の有無をチェックして違っていればコピーします。もしこれを付与していないと、簡単なチェックしかしていないので、完全なファイルの同期ではなくなってしまいます。
また、「–delete」は、コピー元(つまり/etc/aaa)から削除されたファイルは、コピー先(/etc/bbb)からも削除するオプションになります。このオプションを付与することで、完全に同期を図れることになります。
リモートの領域にrsyncで同期を取るコマンド(SSH)
これまでは、同じサーバ内でデータを同期するコマンドを紹介しましたが、サーバのリプレース作業で、別のサーバの領域へ同期したい場合も多いかと思います。ここでは、そのオプションを紹介します。
注意点としましては、送信元、送信先のそれぞれのサーバで、syncコマンドがインストールされていることが前提となります。もしインストールされていなければ、
# dnf install rsync
で事前にインストールしておきましょう。
ここでは、あえて、旧サーバ(コピー元)の /etc/aaa から、新サーバ(コピー先)の/etc/bbb に、新サーバ側から取りに行く、という想定で記載します。
# rsync -e 'ssh -i /root/ed25519' --rsync-path="sudo rsync" -a --partial --inplace --log-file /tmp/backup.log ユーザ名@192.168.100.100:/etc/aaa /etc/bbb
ここでリモートの場合は、「-e」オプションを使用して、ssh で接続してファイルを同期します。ssh の 「-i」オプションは、証明書認証でログインするためのキーを指定しています。
次に、「–rsync-path」で、”sudo rsync”を指定しているのは、sshで接続するユーザはrootではなく、一般ユーザである方がよいですが、コピーするファイルは管理者権限でないとアクセスできない場合も多いので、sudoで管理者権限になるように指定しています。(アクセス先のサーバで別途sudoの設定は必要です)
「–partial」は、途中まで送付されたファイルを上書きしないオプションで、デフォルトでは同期途中に同期できなくなったファイルは削除されるためです。 「–inplace」 は、ファイルを上書きするオプションです。rsync はコピーの際、ファイルを一時ファイルとしてコピーし、コピー完了後に置き換える動作をします。–inplace オプションで直接上書きコピーするため、大きなサイズのファイルを同期するとき高速化されます。
「–log-file」は、文字通り、コピーの履歴をログファイルとして残しておきたい場合に使用します。
こちらも2回目以降は、「-c」や「–delete」を付与して実行します。
今回はここまでです。最後までお読みいただきありがとうございました。