Windowsでrsync(Cygwin使用)
※過去にまとめたwikiからの移行記事
やりたいこと
- WindowsとLinux間でrsyncを使ったファイルの同期がしたい
- 事情により、rsyncはWindows上にてデーモンモードで動作させたい
- Windows(サーバ) ⇔ Linux(クライアント)
前提条件
Cygwin(サーバ)側設定
rsyncをデーモンモードで動作させるため、設定ファイルである/etc/rsyncd.confファイルを作成する。
- /etc/rsyncd.conf
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
[rsync_test]
path = /cygdrive/c/test
use chroot = true
auth users = root
secrets file = /etc/rsyncd.secrets
read only = true
次に、認証ユーザを記載した/etc/rsyncd.secretsファイルを作成する。
ここでのユーザはOSユーザとは無関係であるため、rootユーザを作成する必要は無い。
※あくまでrsync上での認証ユーザ
- /etc/rsyncd.secrets
root:Password
なお、rsyncd.secretsはotherユーザに権限が付与されていると正常に動作しないため、 otherユーザから権限を剥奪しておく。
chmod o-rwx /etc/rsyncd.secrets
Linux(クライアント)側設定
サーバ側の/etc/rsyncd.secretsに記載したパスワードを設定する。
- /etc/rsyncd.passwd
Password
ここまで出来たら準備完了。
ファイル転送
Linux(クライアント)側にて以下コマンドを実行する。
rsync -a --delete --password-file=/etc/rsyncd.passwd rsync://root@<サーバ側IPアドレス>:/rsync_test /tmp/
なお、 rsync://root@<サーバ側IPアドレス>:/rsync_test について、rsync_testの部分はサーバ側のrsyncd.confで記載したモジュール名([rsync_test])とすること。
FWやSELinuxで防がれている等なければ、ファイル転送が行われる。
ファイル転送時に警告メッセージが出た場合
rsyncコマンドを実行した際、下記メッセージが出力される場合がある。
file has vanished: "/proc" (in rsync_test)
file has vanished: "/cygdrive/c" (in rsync_test)
rsync warning: some files vanished before they could be transferred (code 24) at main.c(1650) [generator=3.1.2]
どうもrsyncが/procや/cygdrive/cを見に行っているようだが、
rsyncd.confで同期ディレクトリはきちんと指定しているため、謎。
同期自体は行われているため動作上問題は無いのだが、気持ち悪いのでrsyncd.confファイルに以下の設定を追加する。
[rsync_test]
(省略)
exclude from = /etc/rsyncd.exclude
上記設定は、指定したディレクトリ・ファイルをrsyncの同期対象外とするもの。
実際の対象外設定は、以下rsyncd.excludeファイルに記載する。
- /proc
- /cygdrive
上記設定により、rsyncコマンド実行時の警告メッセージは出力されなくなる。
rsyncをWindowsサービスに登録
Cygwinではcygrunsrvコマンドにて、Windowsにサービスを登録することが可能。
先ほど設定したrsyncコマンドをサービス登録してみる。
Cygwinを管理者権限で起動した上で、以下コマンドを実行する。
cygrunsrv --install rsync --path /cygdrive/c/cygwin64/bin/rsync.exe -a "--daemon --config=/etc/rsyncd.conf" -f 'Rsync daemon service'
–pathオプションでコマンドの場所を指定、-aオプションで引数を指定している。
-fはWindowsのサービス画面にて表示される“説明”の部分。