rsyncコマンドを使用すると同一マシン内での同期(差分)バックアップや、ネットワーク越しのリモートホストへの同期(差分)バックアップをコマンド1つで実現することができます。
以下にrsyncコマンドを使用して、同一マシン内での同期バックアップ方法と、ネットワーク越しの同期バックアップ方法について記します。
Windowsでrsyncと同様な事をしたい場合は、robocopyが便利です。
以下の資料を参考にしてみてください。
rsyncは指定したディレクトリやファイルの内容をそのまま他の場所にコピーするコマンドです。
コピー元パスとコピー先パスの内容の差分を検知して、必要な増減分のみ処理するため、通常のコピーに比べ高速です。
使用例としては、原本(コピー元パス)からUSBメモリなどのバックアップ媒体(コピー先バス)などにすれば、必要な増減分のみコピーするので早く簡単にバックアップを取ることができます。
動作指定のオプションは多数用意されていますが、多くのケースでは以下のオプション指定が適切です。
rsync -a -v コピー元パス名 コピー先パス名
以下に上行のオプションについて説明します。
-r | ディレクトリを再帰的にコピーします。 |
-l | シンボリックリンクをシンボリックリンクのままコピーします。 |
-p | パーミッションをそのままコピーします。 |
-t | 変更時間(mtime)をそのままコピーします。 |
-g | グループをそのままコピーします。 |
-o | 所有者をそのままコピーします。(root権限が必要) |
-D | デバイスファイル・スペシャルファイルをそのままコピーします。(root権限が必要) |
-A | ACLをそのままコピーします。 |
-X | 拡張属性をそのままコピーします。 |
-H | ハードリンクをそのままコピーします。 |
--delete | コピー元に存在しないファイルは削除します。 |
rsyncで特に注意する点は、コピー元パス名の指定方法です。
rsyncコマンドを除くほとんどのLinuxのコマンドは、引数として取るディレクトリ名の最後に / が付いていてもなくても動作に違いはありませんが、
rsyncではコピー元パス名に限り、最後の / のあり・なしで動作に違いが出ます。
まとめると
コピー元パス名最後の / のあり・なしの具体例を以下に示します。
以下のようなファイル構成を前提として説明します。
hoge/a hoge/b hoge/fuga/c hoge/fuga/d
gere/
以下にいくつかのコマンドと実行した後の状態を記します。
rsync -a hoge gere
gere/hoge/a gere/hoge/b gere/hoge/fuga/c gere/hoge/fuga/d
rsync -a hoge/fuga gere
gere/fuga/c gere/fuga/d
rsync -a hoge/ gere
gere/a gere/b gere/fuga/c gere/fuga/d
rsync -a hoge/fuga/ gere
gere/c gere/d
なお、コピー先パス名にはこのようなルールはありません。
コピー元パスとコピー先パスには、ネットワークを経由してのscpのようなホスト指定が可能です。
(ネットワーク経由でのrsyncは、sshでの接続が可能であることが必要です)。
このような場合は、以下のような構文になります。
rsync -a server1:hoge gere
rsync -a hoge server2:gere
この場合もコピー元パスに関する"/"あり・なしのルールは同じです。
以上、rsyncコマンドの使用方法について記述しました。