yassy's note

なんかかきます

Windowsでrsync(Cygwin使用)

※過去にまとめたwikiからの移行記事

やりたいこと

  • WindowsLinux間でrsyncを使ったファイルの同期がしたい
  • 事情により、rsyncWindows上にてデーモンモードで動作させたい
  • Windows(サーバ) ⇔ Linux(クライアント)

前提条件

  • Cygwinがインストールされていること
  • rsyncパッケージが導入されていること
  • Windowsサービスの登録を行いたい場合、cygrunsrvパッケージが導入されていること

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コマンド実行時の警告メッセージは出力されなくなる。

rsyncWindowsサービスに登録

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のサービス画面にて表示される“説明”の部分。