motoSEのブログ

SEの徒然備忘録&意思表示

【Linux】rsync

Linuxのコマンドrsyncについてまとめいきたいと思います。

rsyncとは

リモート、ローカルにかかわらずファイル、ディレクトリのコピーを行うコマンドです。 バックアップを作成したり、リモートディレクトリの同期によく利用されます。

書式

rsync [オプション] コピー元 コピー先

インストール

rsync がインストールされていない場合は yum を使って入れる。

# yum install rsync

オプション

オプション 説明
-a コピー元のディレクトリを再帰的に所有者・グループ・パーミッション・タイムスタンプをそのままコピーします。オプション「-rlptgoD」と同じです。
-r ディレクトリ内を再帰的にコピーします。このオプションを指定しないとディレクトリ内が全くコピーされません。
-l シンボリックリンクをそのままコピーします。
-p パーミッションをそのままコピーします。
-t タイムスタンプをそのままコピーします。
-g グループをそのままコピーします。
-o 所有者をそのままコピーします。
-D バイスファイルや特殊ファイルを保持します。
-u コピー元とコピー先を比較し、追加・更新されたファイル・ディレクトリのみをコピーします。
-v コピーしているファイル名やバイト数などの情報を表示します。
-z 通信を圧縮します。
-4 IPv4を使用します。
-6 IPv6を使用します。
--delete コピー元にない(削除された)ファイルをコピー先で削除します。コピー元とコピー先を同期します。

ローカルディレクトリをバックアップ

ローカルディレクトリをバックしてみます。

[vagrant@localhost ~]$ find source/ -ls
1046602    4 drwxrwxr-x   3 vagrant  vagrant      4096 Nov 30 14:16 source/
1046604    0 -rw-rw-r--   1 vagrant  vagrant         0 Nov 30 14:16 source/test.csv
1046605    4 drwxrwxr-x   2 vagrant  vagrant      4096 Nov 30 14:16 source/dir1
1046606    0 -rw-rw-r--   1 vagrant  vagrant         0 Nov 30 14:16 source/dir1/test.csv
[vagrant@localhost ~]$ find dest/ -ls
1046603    4 drwxrwxr-x   2 vagrant  vagrant      4096 Nov 30 13:28 dest/
[vagrant@localhost ~]$

ディレクトリのバックアップなので「r」オプションが必要です。 同期内容の詳細を知りたいので「v」オプションを設定しています。

[vagrant@localhost ~]$ rsync -rv source/ dest/
sending incremental file list
test.csv
dir1/
dir1/test.csv

sent 170 bytes  received 54 bytes  448.00 bytes/sec
total size is 0  speedup is 0.00
[vagrant@localhost ~]$ find dest/ -ls
1046603    4 drwxrwxr-x   3 vagrant  vagrant      4096 Nov 30 20:53 dest/
1046608    0 -rw-rw-r--   1 vagrant  vagrant         0 Nov 30 20:53 dest/test.csv
1046607    4 drwxrwxr-x   2 vagrant  vagrant      4096 Nov 30 20:53 dest/dir1
1046609    0 -rw-rw-r--   1 vagrant  vagrant         0 Nov 30 20:53 dest/dir1/test.csv
[vagrant@localhost ~]$ rsync -rv source/ dest/
sending incremental file list
test.csv
dir1/test.csv

sent 167 bytes  received 51 bytes  436.00 bytes/sec
total size is 0  speedup is 0.00
[vagrant@localhost ~]$

一度、バックアップした後でも差分バックアップしていないので、全ファイルが同期されていることが分かります。

差分バックアップ

バックアップ元に新規にファイル(test2.csv)を追加してみます。

[vagrant@localhost ~]$ touch source/test2.csv
[vagrant@localhost ~]$ find source/ -ls
1046602    4 drwxrwxr-x   3 vagrant  vagrant      4096 Nov 30 20:58 source/
1046604    0 -rw-rw-r--   1 vagrant  vagrant         0 Nov 30 14:16 source/test.csv
1046605    4 drwxrwxr-x   2 vagrant  vagrant      4096 Nov 30 14:16 source/dir1
1046606    0 -rw-rw-r--   1 vagrant  vagrant         0 Nov 30 14:16 source/dir1/test.csv
1046609    0 -rw-rw-r--   1 vagrant  vagrant         0 Nov 30 20:58 source/test2.csv
[vagrant@localhost ~]$ find dest/ -ls
1046603    4 drwxrwxr-x   3 vagrant  vagrant      4096 Nov 30 20:53 dest/
1046610    0 -rw-rw-r--   1 vagrant  vagrant         0 Nov 30 20:53 dest/test.csv
1046607    4 drwxrwxr-x   2 vagrant  vagrant      4096 Nov 30 20:53 dest/dir1
1046608    0 -rw-rw-r--   1 vagrant  vagrant         0 Nov 30 20:53 dest/dir1/test.csv
[vagrant@localhost ~]$

実際に差分バックアップを実施します。「u」オプションを追加します。

[vagrant@localhost ~]$ rsync -urv source/ dest/
sending incremental file list
test2.csv

sent 153 bytes  received 32 bytes  370.00 bytes/sec
total size is 0  speedup is 0.00
[vagrant@localhost ~]$
[vagrant@localhost ~]$ find dest/ -ls
1046603    4 drwxrwxr-x   3 vagrant  vagrant      4096 Nov 30 21:01 dest/
1046610    0 -rw-rw-r--   1 vagrant  vagrant         0 Nov 30 20:53 dest/test.csv
1046607    4 drwxrwxr-x   2 vagrant  vagrant      4096 Nov 30 20:53 dest/dir1
1046608    0 -rw-rw-r--   1 vagrant  vagrant         0 Nov 30 20:53 dest/dir1/test.csv
1046611    0 -rw-rw-r--   1 vagrant  vagrant         0 Nov 30 21:01 dest/test2.csv
[vagrant@localhost ~]$

このように今回新規に追加したtest.csvのみコピーされていることが分かります。

以上です。