rsync(アールシンク)
rsync書式
rsync [オプション] 転送元パス [転送先パス]
オプション 説明
-a
アーカイブモード。なるべく転送元ディレクトリの内容を維持したままコピーする。(具体的には、ディレクトリ・シンボリックリンク・パーミッション・タイムスタンプ・所有者・グループ・特殊ファイルをそのまま保持する)
-v
実際に転送されたファイルのリストや、転送量などの統計情報を表示する
-h
表示される情報に適切な単位をつける
-n
実際にファイル転送を行わない。-v と組み合わせると、指定したコマンドでどのようにファイル転送が行われるかの統計情報のみを表示する。コマンドのテストに便利。
-z
ファイルを圧縮して転送する。ネットワーク越しの転送に便利。
--delete
コピー元で削除されたデータを、コピー先からも削除する
(コピー元とコピー先を同じ状態にする)
--exclude=パターン
パターンにマッチするものをコピーしない
-e ssh
sshでリモートサーバにデータをコピーする場合に使用する
-z
データを圧縮して転送する
コピー元
/home/ntaka/rsync-tes
$ ll /home/ntaka/rsync-test/
合計 20
-rw-rw-r-- 1 ntaka ntaka 7 1月 3 08:36 test1
-rw-rw-r-- 1 ntaka ntaka 7 1月 3 08:37 test2
-rw-rw-r-- 1 ntaka ntaka 7 1月 3 08:37 test3
-rw-rw-r-- 1 ntaka ntaka 7 1月 3 08:37 test4
-rw-rw-r-- 1 ntaka ntaka 7 1月 3 08:38 test5
コピー先
/home/ntaka/backup/
テスト(dry-run)実施 -av --dry-run は rsync -avn でも同じです
-av を実行したときの内容を確認できます dry-run にようり実際にはコピー先にコピーしない
$ rsync -avn /home/ntaka/rsync-test /home/ntaka/backup/
sending incremental file list
rsync-test/
rsync-test/test1
rsync-test/test2
rsync-test/test3
rsync-test/test4
rsync-test/test5
sent 183 bytes received 35 bytes 436.00 bytes/sec
total size is 35 speedup is 0.16 (DRY RUN)
コピーされていない
$ ll /home/ntaka/backup/
合計 0
スラッシュ有無での動作について
「rsync」を実行する際に注意が必要な点は、コピー元の指定方法です。
コピー元のディレクトリの最後にスラッシュ「/」をつけるか、つけないかで動作が異なります。
$ rsync -av /home/ntaka/rsync-test /home/ntaka/backup/
sending incremental file list
rsync-test/
rsync-test/test1
rsync-test/test2
rsync-test/test3
rsync-test/test4
rsync-test/test5
sent 422 bytes received 115 bytes 1,074.00 bytes/sec
total size is 35 speedup is 0.07
rsync-test ホルダごとコピーされる
$ ll /home/ntaka/backup/
合計 0
drwxrwxr-x 2 ntaka ntaka 71 1月 3 08:38 rsync-test
$ rsync -av /home/ntaka/rsync-test/ /home/ntaka/backup/
sending incremental file list
./
test1
test2
test3
test4
test5
sent 402 bytes received 114 bytes 1,032.00 bytes/sec
total size is 35 speedup is 0.07
rsync-test/ ファイルだけがコピーされている
$ ll /home/ntaka/backup/
合計 20
-rw-rw-r-- 1 ntaka ntaka 7 1月 3 08:36 test1
-rw-rw-r-- 1 ntaka ntaka 7 1月 3 08:37 test2
-rw-rw-r-- 1 ntaka ntaka 7 1月 3 08:37 test3
-rw-rw-r-- 1 ntaka ntaka 7 1月 3 08:37 test4
-rw-rw-r-- 1 ntaka ntaka 7 1月 3 08:38 test5
コピー元とコピー先のデータ同期(--delete)
「--delete」オプションを付けることで、コピー元で削除されたデータをコピー先からも削除し、コピー元とコポー先の両方でデータを同じ状態に保つことができます。
テストデータ
「--delete」オプションを使用する前のコピー元とコピー先データです。
「test1」から「test5」というファイルが両ディレクトリに存在します。
$ ll /home/ntaka/rsync-test
合計 20
-rw-rw-r-- 1 ntaka ntaka 7 1月 3 08:36 test1
-rw-rw-r-- 1 ntaka ntaka 7 1月 3 08:37 test2
-rw-rw-r-- 1 ntaka ntaka 7 1月 3 08:37 test3
-rw-rw-r-- 1 ntaka ntaka 7 1月 3 08:37 test4
-rw-rw-r-- 1 ntaka ntaka 7 1月 3 08:38 test5
$ ll /home/ntaka/backup/
合計 20
-rw-rw-r-- 1 ntaka ntaka 7 1月 3 08:36 test1
-rw-rw-r-- 1 ntaka ntaka 7 1月 3 08:37 test2
-rw-rw-r-- 1 ntaka ntaka 7 1月 3 08:37 test3
-rw-rw-r-- 1 ntaka ntaka 7 1月 3 08:37 test4
-rw-rw-r-- 1 ntaka ntaka 7 1月 3 08:38 test5
コピー元より「test5」ファイルを削除します。
ll /home/ntaka/rsync-test
合計 16
-rw-rw-r-- 1 ntaka ntaka 7 1月 3 08:36 test1
-rw-rw-r-- 1 ntaka ntaka 7 1月 3 08:37 test2
-rw-rw-r-- 1 ntaka ntaka 7 1月 3 08:37 test3
-rw-rw-r-- 1 ntaka ntaka 7 1月 3 08:37 test4
「--delete」オプションを付けて「rsync」を実行
まずは、「--dry-run」で確認をします。 rsync -av --delete --dry-run
$ rsync -avn --delete /home/ntaka/rsync-test/ /home/ntaka/backup/
sending incremental file list
deleting test5
./
sent 131 bytes received 24 bytes 310.00 bytes/sec
total size is 28 speedup is 0.18 (DRY RUN)
deleting test5」と表示され、「test5」ファイルが削除されることが読み取れます。
表示された実行結果から、意図した動作と合致しているので実際にデータを同期させてみます。
$ rsync -av --delete /home/ntaka/rsync-test/ /home/ntaka/backup/
sending incremental file list
deleting test5
./
sent 131 bytes received 24 bytes 310.00 bytes/sec
total size is 28 speedup is 0.18
コピー先確認
「test5」ファイルが、コピー先からも削除されていることが確認できます。
$ ll /home/ntaka/backup/
合計 16
-rw-rw-r-- 1 ntaka ntaka 7 1月 3 08:36 test1
-rw-rw-r-- 1 ntaka ntaka 7 1月 3 08:37 test2
-rw-rw-r-- 1 ntaka ntaka 7 1月 3 08:37 test3
-rw-rw-r-- 1 ntaka ntaka 7 1月 3 08:37 test4
コピー対象外指定(--exclude) イクスクルード 〔~を〕排除する、締め出す
「--exclude」オプションを使用することで、コピーを行わないデータを指定することが出来ます。
書式
rsync -av --exclude [パターン] コピー元 コピー先
パターンの部分には除外するデータ名を記述します。
正規表現もつかえます。
--exclude実行例
「test3」のファイルをコピー対象外として、「rsync」をテスト実行してみます。
$ rsync -avn --exclude test3 /home/ntaka/rsync-test/ /home/ntaka/backup/
sending incremental file list
./
test1
test2
test4
test5
sent 148 bytes received 31 bytes 358.00 bytes/sec
total size is 28 speedup is 0.16 (DRY RUN)
コピー対象外複数指定(--exclude-from)
複数のデータを指定したい場合は、ファイルに記述しそれを読み込ませる
書式
rsync -av --exclude-from=ファイル コピー元 コピー先
今回は「/home/tamohiko/rsync-exclude」というファイルを作成し、そこにコピー対象外としたファイルを記述します。
$ cat /home/ntaka/rsync-exclude
test1
test3
rsync --exclude-fromの実行
コピー対象外のデータが記述されているファイルを指定て「rsync」をテスト実行してみます。
$ rsync -avn --exclude-from=/home/ntaka/rsync-exclude /home/ntaka/rsync-test/ /home/ntaka/backup/
sending incremental file list
./
test2
test4
test5
sent 129 bytes received 28 bytes 314.00 bytes/sec
total size is 21 speedup is 0.13 (DRY RUN)
実行時のログから、「test1」「test3」の両ファイルがコピーされないことが確認できます。
rsync + ssh でリモートサーバとのデータコピー
「rsync」では、「-e ssh」オプションを使用することで、SSHで接続できるサーバとの間でデータをコピーすることが出来ます。
書式
rsync -azv -e ssh [接続先ユーザ名]@ホスト名:コピー元 コピー先
rsync -azv -e ssh コピー元 [接続先ユーザ名]@ホスト名:コピー先
コピー元、コピー先どちら側にもリモートサーバを指定することが出来ます。
※「-z」オプションはデータを圧縮してのコピーとなるので、リモートサーバとのコピーでは付けておいたほうが良い。
rsync -azv -e ssh コピー元 [接続先ユーザ名]@ホスト名:コピー先 で実行
$ rsync -azv -e ssh /home/ntaka/rsync-test/ ntaka@192.168.2.254:/home/ntaka/backup/
ntaka@192.168.2.254's password:
sending incremental file list
./
test1
test2
test3
test4
test5
sent 398 bytes received 114 bytes 20.90 bytes/sec
total size is 35 speedup is 0.07
ssh接続時のポート番号変更
「rsync」でリモートサーバにデータをコピーする際に、リモートサーバのSSH待ち受けポートがデフォルトの「22」番から変更されている場合は、下記のようにポート番号を指定することができます。
書式
rsync -azv -e "ssh -p ポート番号" [接続先ユーザ名]@ホスト名:コピー元 コピー先
rsync -avz -e "ssh -p ポート番号" コピー元 [接続先ユーザ名]@ホスト名:コピー先