【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のみコピーされていることが分かります。
以上です。