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