rsyncをWindowsで使ってみる

設定ファイル

c:\rsyncd.conf(改行コードはCRLF、CRのみだと読み込みに失敗する)

use chroot = false
strict modes = false
hosts allow = *
log file = rsyncd.log
pid file = rsyncd.pid

# Module definitions
# Remember cygwin naming conventions : c:\work becomes /cygwin/c/work
#
[test]
path = /cygdrive/c/work
read only = false
transfer logging = yes

共有フォルダ

C:\workを予め作っておく、これは他PCからrsync://192.168.0.1/testのように見える。192.168.0.1の部分はrsyncdaemonで起動させたPCのIPアドレス

起動方法

rsync.exeと同じフォルダにrsyncd.pidが存在すると起動に失敗する。

C:\Program Files\cwRsync\bin>rsync --daemon  --log-file=C:\test.log --config=c:\rsyncd.conf

C:\Program Files\cwRsync\bin>

--daemonオプションは軽くググって見たところ「rsync をデーモンとして走らせます。デーモンはクライアントの接続毎に設定ファイル(/etc/rsyncd.conf)を読んで、それに対応したリクエストに対して作動します。詳しくは rsyncd.conf(5) の man ページを見て下さい。」ということらしい。

起動後のポート開放

873番で外部からのアクセスを受け付ける。

Windows XP SP2以降はファイアーウォールの設定ダイアログが表示されるので許可する。

その他ファイル

rsyncd.log

rsync.exeと同じフォルダに作られるログファイル(改行コードはLFのみ)。

2009/09/22 10:59:01 [728] rsync to test/ from unknown (192.168.1.30)
2009/09/22 10:59:01 [728] receiving file list
2009/09/22 10:59:02 [728] recv unknown [192.168.1.30] test () (コラCG) [サクラ大戦3] コクリコ体操服.jpg 51762
2009/09/22 10:59:04 [728] recv unknown [192.168.1.30] test () (二次創作CG) [CCさくら] 佐々木利香 01.JPG 152508
2009/09/22 10:59:10 [728] recv unknown [192.168.1.30] test () [二次創作CG] (CCさくら) さくら 第2話コス.jpg 91531
2009/09/22 10:59:12 [728] recv unknown [192.168.1.30] test () ジーンダイバー 唯.jpg 135600
2009/09/22 10:59:14 [728] sent 5773 bytes  received 40815798 bytes  total size 40785883
rsyncd.pid

rsync.exeと同じフォルダに作られるpidファイル(改行コードはLFのみ)。

  • 例(PIDの番号が記録されている)
3884
c:\test.log

指定した箇所に作られる詳細なログファイル(改行コードはLFのみ)。

  • 例(接続してきたクライアントはIPからホスト名を逆引きして見つからないとエラーとして記録する)
2009/09/22 10:43:11 [3884] rsyncd version 3.0.3 starting, listening on port 873
2009/09/22 10:51:21 [2852] name lookup failed for 192.168.1.30: Unknown server error
2009/09/22 10:51:21 [2852] connect from UNKNOWN (192.168.1.30)

クライアントからサーバ側へファイルをコピーする

C:\Program Files\cwRsync\bin>rsync /cygdrive/c/Winny/Winny.ini rsync://192.168.1.17/test

C:\Program Files\cwRsync\bin>

クライアントからサーバ側へファイルをコピーする(その2)

C:\Program Files\cwRsync\bin>rsync /cygdrive/e/Share/画像/CG集/コラCG/* rsync://192.168.1.17/test

C:\Program Files\cwRsync\bin>

302個、38.8MB、日本語ロングファイル名のディレクトリ無しファイルコピーも問題なし。尚、タイムスタンプは転送時の日時となり、ファイルは全てリードオンリー属性となる。

クライアントからサーバ側へファイルをコピーする(その3)

C:\Program Files\cwRsync\bin>rsync -t -v /cygdrive/c/Winny/Tab1.txt rsync://192.168.1.17/test
Tab1.txt

sent 194 bytes  received 27 bytes  147.33 bytes/sec
total size is 126  speedup is 0.57

C:\Program Files\cwRsync\bin>rsync -t -v /cygdrive/c/Winny/Tab1.txt rsync://192.168.1.17/test

sent 25 bytes  received 8 bytes  22.00 bytes/sec
total size is 126  speedup is 3.82

C:\Program Files\cwRsync\bin>
  • -t オプションを付けると、タイムスタンプがコピーされる。(-a オプションを付けると、リードオンリー等の属性もコピーされる)
  • -v オプションを付けると、コマンドの実行内容が詳細に表示される
  • -t を付けて転送すると、2度目は同じタイムスタンプの同じファイルなので、転送されていないことが判る

クライアントからサーバ側へファイルをコピーする(その3)

C:\Program Files\cwRsync\bin>rsync -v -a -r /cygdrive/c/work/ rsync://192.168.1.17/test
sending incremental file list
./
アニメ/
アニメ/うみねこのなく頃に #1.zip
少年コミック/
少年コミック/安永航一郎/
少年コミック/安永航一郎/うで立て一代男.zip
少年コミック/安永航一郎/六百万石の男.zip
少年コミック/島本和彦/
少年コミック/島本和彦/噂の転校生.zip
同人誌/

sent 581 bytes  received 107 bytes  458.67 bytes/sec
total size is 88  speedup is 0.13

C:\Program Files\cwRsync\bin>rsync -v -a -r /cygdrive/c/work/ rsync://192.168.1.17/test
sending incremental file list

sent 303 bytes  received 13 bytes  632.00 bytes/sec
total size is 88  speedup is 0.28

C:\Program Files\cwRsync\bin>
  • -r オプションを付けるとサブディレクトリ以下もコピーされる(フォルダ名の末尾に/を付けないと、そのフォルダの中身全てにならず、フォルダそのものが相手先へコピーされてしまう)
  • -a オプションを付けるとタイムスタンプを含む全ての属性がコピーされる(-aオプションなし、もしくは-tオプションだと、ディレクトリやファイルへのアクセスが拒否される状態となる)

サーバ側からクライアントへファイルをコピーする

C:\Program Files\cwRsync\bin>rsync -v -r -a rsync://192.168.1.17/test /cygdrive/c/work2
receiving incremental file list
./
アニメ/
アニメ/うみねこのなく頃に #1.zip
少年コミック/
少年コミック/安永航一郎/
少年コミック/安永航一郎/うで立て一代男.zip
少年コミック/安永航一郎/六百万石の男.zip
少年コミック/島本和彦/
少年コミック/島本和彦/噂の転校生.zip
同人誌/

sent 125 bytes  received 612 bytes  294.80 bytes/sec
total size is 88  speedup is 0.12

C:\Program Files\cwRsync\bin>rsync -v -r -a rsync://192.168.1.17/test /cygdrive/c/work2
receiving incremental file list

sent 31 bytes  received 334 bytes  243.33 bytes/sec
total size is 88  speedup is 0.24

C:\Program Files\cwRsync\bin>rsync -v -r -a rsync://192.168.1.17/test /cygdrive/c/work2
receiving incremental file list
少年コミック/安永航一郎/
少年コミック/安永航一郎/うで立て一代男.zip
同人誌/
同人誌/にょろーんちゅるやさん.zip

sent 81 bytes  received 66486 bytes  44378.00 bytes/sec
total size is 66092  speedup is 0.99

C:\Program Files\cwRsync\bin>

testはフォルダではなく、共有名なのでtestフォルダがコピーされる訳ではなく、その中のファイルが全てコピーされることになる。
コピー先に指定したwork2はディレクトリなので、この中に共有フォルダのtestの中身がコピーされることになる。
3度目はサーバ側でうで立て一代男.zipを更新、にょろーんちゅるやさん.zipを追加してから行うと、その更新された分だけがコピーされていることが判る。

その他使えそうなオプション

  • 参考:http://www.infoscience.co.jp/technical/rsync/rsync.html#option
  • -z 転送時にgzip圧縮を使う(定番的に -v、-r、-z を組み合わせて -vrz と指定することがある模様)
  • --stats ファイル転送時の統計情報を表示するようにして、rsync アルゴリズムの転送効率を表示します。
  • --exclude "*.o" は *.o と一致する全てのファイル名を除外します。(metaファイルを除外するのに「*.meta」と指定すると良さそう。あと「--exclude Thumbs.db」とかでサムネイルキャッシュの転送抑止とか。)