Contents
環境
- OS
CentOS release 6.4 (64bit)
- rsync Version
3.0.6
- xinetd Version
2.3.14
サーバの構築
rsyncはrsyncのプロトコル(TCP/873)を使用することも出来るが、SSHでも可能なので、
通常暗号化され安全なSSHを使用すると良い。
sshサーバを使用する
rsyncクライアントを起動させるユーザと同名のアカウントを作成しておく必要がある。
rsyncを実行するたびにパスワードを入力するのを避けるために、キーペアを作成して登録しておくことができる。
rsyncサーバを使用する
xinetdのインストール
rsyncは通常使用頻度が低いため、スーパーサーバのxinetdから呼び出すようにする。
- xinetdをインストールする
yum install xinetd -y
- 自動起動することを確認
chkconfig --list | grep xinetd # xinetd 0:off 1:off 2:off 3:on 4:on 5:on 6:off # runlevel3でonであることを確認
rsyncのインストール
最新版がyumで入手できるので、パッケージからインストールする
yum list installed | grep rsync # rsyncがインストールされていないことを確認する
yum install rsync -y
yum list installed | grep rsync # rsyncがインストールされていることを確認する
rsyncサーバの設定
rsyncはデフォルトではxinetdから使用できないようになっている。
chkconfig --list | grep rsync # rsync: off # このように表示される
以下のパスにxinetdのrsync用設定が生成されているので、編集する。
/etc/xinetd.d/rsyncデフォルト状態では以下
# default: off # description: The rsync server is a good addition to an ftp server, as it \ # allows crc checksumming etc. service rsync { disable = yes flags = IPv6 socket_type = stream wait = no user = root server = /usr/bin/rsync server_args = --daemon log_on_failure += USERID }
disable値をnoとすることで、rsyncに接続可能となる。
これによってrsyncがxinetdから使用可能となる。
chkconfig --list | grep rsync # rsync: on
起動
xinetdを起動し、rsyncへ接続可能にする。
service xinetd status # xinetd is stopped # 現在停止中であることを確認する
service xinetd start
service xinetd status # xinetd (pid XXXX) is running... # 起動していることを確認する
クライアントからの使用
rsyncをクライアントとして使用し、サーバと同期を行う。
rsyncで使用できるオプションは以下である。
[root@main2 ~]# rsync --help rsync version 3.0.6 protocol version 30 Copyright (C) 1996-2009 by Andrew Tridgell, Wayne Davison, and others. Web site: http://rsync.samba.org/ Capabilities: 64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints, socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace, append, ACLs, xattrs, iconv, symtimes
rsync comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. See the GNU General Public Licence for details.
rsync is a file transfer program capable of efficient remote update via a fast differencing algorithm.
Usage: rsync [OPTION]... SRC [SRC]... DEST or rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST or rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST or rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST or rsync [OPTION]... [USER@]HOST:SRC [DEST] or rsync [OPTION]... [USER@]HOST::SRC [DEST] or rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST] The ':' usages connect via remote shell, while '::' & 'rsync://' usages connect to an rsync daemon, and require SRC or DEST to start with a module name.
Options -v, --verbose increase verbosity -q, --quiet suppress non-error messages --no-motd suppress daemon-mode MOTD (see manpage caveat) -c, --checksum skip based on checksum, not mod-time & size -a, --archive archive mode; equals -rlptgoD (no -H,-A,-X) --no-OPTION turn off an implied OPTION (e.g. --no-D) -r, --recursive recurse into directories -R, --relative use relative path names --no-implied-dirs don't send implied dirs with --relative -b, --backup make backups (see --suffix & --backup-dir) --backup-dir=DIR make backups into hierarchy based in DIR --suffix=SUFFIX set backup suffix (default ~ w/o --backup-dir) -u, --update skip files that are newer on the receiver --inplace update destination files in-place (SEE MAN PAGE) --append append data onto shorter files --append-verify like --append, but with old data in file checksum -d, --dirs transfer directories without recursing -l, --links copy symlinks as symlinks -L, --copy-links transform symlink into referent file/dir --copy-unsafe-links only "unsafe" symlinks are transformed --safe-links ignore symlinks that point outside the source tree -k, --copy-dirlinks transform symlink to a dir into referent dir -K, --keep-dirlinks treat symlinked dir on receiver as dir -H, --hard-links preserve hard links -p, --perms preserve permissions -E, --executability preserve the file's executability --chmod=CHMOD affect file and/or directory permissions -A, --acls preserve ACLs (implies --perms) -X, --xattrs preserve extended attributes -o, --owner preserve owner (super-user only) -g, --group preserve group --devices preserve device files (super-user only) --copy-devices copy device contents as regular file --specials preserve special files -D same as --devices --specials -t, --times preserve modification times -O, --omit-dir-times omit directories from --times --super receiver attempts super-user activities --fake-super store/recover privileged attrs using xattrs -S, --sparse handle sparse files efficiently -n, --dry-run perform a trial run with no changes made -W, --whole-file copy files whole (without delta-xfer algorithm) -x, --one-file-system don't cross filesystem boundaries -B, --block-size=SIZE force a fixed checksum block-size -e, --rsh=COMMAND specify the remote shell to use --rsync-path=PROGRAM specify the rsync to run on the remote machine --existing skip creating new files on receiver --ignore-existing skip updating files that already exist on receiver --remove-source-files sender removes synchronized files (non-dirs) --del an alias for --delete-during --delete delete extraneous files from destination dirs --delete-before receiver deletes before transfer, not during --delete-during receiver deletes during transfer (default) --delete-delay find deletions during, delete after --delete-after receiver deletes after transfer, not during --delete-excluded also delete excluded files from destination dirs --ignore-errors delete even if there are I/O errors --force force deletion of directories even if not empty --max-delete=NUM don't delete more than NUM files --max-size=SIZE don't transfer any file larger than SIZE --min-size=SIZE don't transfer any file smaller than SIZE --partial keep partially transferred files --partial-dir=DIR put a partially transferred file into DIR --delay-updates put all updated files into place at transfer's end -m, --prune-empty-dirs prune empty directory chains from the file-list --numeric-ids don't map uid/gid values by user/group name --timeout=SECONDS set I/O timeout in seconds --contimeout=SECONDS set daemon connection timeout in seconds -I, --ignore-times don't skip files that match in size and mod-time --size-only skip files that match in size --modify-window=NUM compare mod-times with reduced accuracy -T, --temp-dir=DIR create temporary files in directory DIR -y, --fuzzy find similar file for basis if no dest file --compare-dest=DIR also compare destination files relative to DIR --copy-dest=DIR ... and include copies of unchanged files --link-dest=DIR hardlink to files in DIR when unchanged -z, --compress compress file data during the transfer --compress-level=NUM explicitly set compression level --skip-compress=LIST skip compressing files with a suffix in LIST -C, --cvs-exclude auto-ignore files the same way CVS does -f, --filter=RULE add a file-filtering RULE -F same as --filter='dir-merge /.rsync-filter' repeated: --filter='- .rsync-filter' --exclude=PATTERN exclude files matching PATTERN --exclude-from=FILE read exclude patterns from FILE --include=PATTERN don't exclude files matching PATTERN --include-from=FILE read include patterns from FILE --files-from=FILE read list of source-file names from FILE -0, --from0 all *-from/filter files are delimited by 0s -s, --protect-args no space-splitting; only wildcard special-chars --address=ADDRESS bind address for outgoing socket to daemon --port=PORT specify double-colon alternate port number --sockopts=OPTIONS specify custom TCP options --blocking-io use blocking I/O for the remote shell --stats give some file-transfer stats -8, --8-bit-output leave high-bit chars unescaped in output -h, --human-readable output numbers in a human-readable format --progress show progress during transfer -P same as --partial --progress -i, --itemize-changes output a change-summary for all updates --out-format=FORMAT output updates using the specified FORMAT --log-file=FILE log what we're doing to the specified FILE --log-file-format=FMT log updates using the specified FMT --password-file=FILE read daemon-access password from FILE --list-only list the files instead of copying them --bwlimit=KBPS limit I/O bandwidth; KBytes per second --write-batch=FILE write a batched update to FILE --only-write-batch=FILE like --write-batch but w/o updating destination --read-batch=FILE read a batched update from FILE --protocol=NUM force an older protocol version to be used --iconv=CONVERT_SPEC request charset conversion of filenames -4, --ipv4 prefer IPv4 -6, --ipv6 prefer IPv6 --version print version number (-h) --help show this help (-h works with no other options)
Use "rsync --daemon --help" to see the daemon-mode command-line options. Please see the rsync(1) and rsyncd.conf(5) man pages for full documentation. See http://rsync.samba.org/ for updates, bug reports, and answers
- オプション一覧
- 表示系
表示系は-vオプションを有効にしている際に有効になるオプションである
- -v, –verbose
コピーするファイル名を標準出力する - -q, –quiet
エラー以外のメッセージを表示しない
- -v, –verbose
- 表示系
- vオプションも無効化される
- -R, –relative
表示を/(ルート)ディレクトリからの相対パスに変える - –no-implied-dirs
- -R, –relative
- R(–relative)オプション使用時に直下のファイル・フォルダに変更がなかったディレクトリの表示を行わないようにする
例えば、-Rオプションのみで、cccというファイルのみ同期処理を行った場合、
root/ root/aaa/ root/aaa/bbb/ root/aaa/bbb/ccc
と表示されるが、–no-implied-dirsオプションを加えることで、以下のようになる。
root/aaa/bbb/ccc
- 同期系
- -r, –recursive
ディレクトリ内を再帰的に同期する - -b, –backup
バックアップを有効にする - –backup-dir=DIR
バックアップの保存先パスを指定する
指定しない場合、同じ階層にsuffixをファイル名末尾に付加してバックアップが作成される - –suffix=SUFFIX
バックアップファイル名の末尾に付加するサフィックスを指定する
backup-dirオプションを使用した際には無効となる
デフォルトでは ~ となる。 - -u, –update
同期元より新しいファイルは上書きしない - –inplace
同期先ファイルを上書きする際に通常一時ファイルにコピーを行い、
コピー完了後にファイル上書きを行うが、このオプションを指定すると、コピー中から上書きを行う。
大きなファイルではより高速に同期が行えるが、同期中はファイルが読み取れなくなる。 - –append
前回同期が中断されてしまった場合、同期が完了していないファイルの途中からファイル転送を行う。 - –append-verify
appendオプションと同様の動作を行うが、チェックサムは古いファイルに対して行う - -d, –dirs
フォルダ内の再帰を行わずにフォルダのみ転送する - -l, –links
シンボリックリンクをそのままリンクファイルとして同期する - -L, –copy-links
シンボリックリンクは実際のリンク先ファイルを同期させる - –copy-unsafe-links
同期元として指定した階層の外にリンクされたリンクファイルのみ同期する - –safe-links
同期元として指定した階層の外にリンクされたリンクファイルは同期しない - -p, –perms
同期先のパーミッションを同期元と同じにする - -k, –copy-dirlinks
transform symlink to a dir into referent dir - -K, –keep-dirlinks
treat symlinked dir on receiver as dir - -H, –hard-links
preserve hard links - -E, –executability
preserve the file’s executability - –chmod=CHMOD
同期先のパーミッションを指定する - -c, –checksum
同期元ファイルと同期先ファイルをchecksumで比較する - –del
delete-duringオプションと同じ - –delete
同期元に無いファイルは同期先で削除する - –delete-before
deleteオプションで削除を行う際に同期実行前に削除を行う - –delete-during
deleteオプションで削除を行う際に同期実行中に適宜削除を行う(デフォルト) - –delete-delay
deleteオプションで削除を行う際に削除対象は同期中にリストアップするが、削除自体は同期実行後に行う - –delete-after
deleteオプションで削除を行う際に同期実行後に削除を行う - -o, –owner
同期するファイルの所有者を保持する - -g, –group
同期するファイルの所有グループを保持する - –devices
キャラクタデバイスやブロックデバイスのファイルもコピーする - –copy-devices
- –specials
名前尽きソケットやパイプといった特殊なファイルもコピーする - -D
devicesオプションとspecialsオプションを付与する - -t, –times
ファイルのタイム・スタンプを維持してファイルを同期する - –exclude=PATTERN
パターンに一致するファイルをコピーしない - –exclude-from=FILE
excludeするパターンを指定したファイルから読み込む - –include=PATTERN
excludeオプションを指定した際に、ここで指定したパターンに合致するファイルは除外しない - –include-from=FILE
includeするパターンを指定したファイルから読み込む - –files-from=FILE
指定したファイルを読み込み、記述されたファイル名のみを同期対象とする
- -r, –recursive
- その他
- -a, –archive
rlptgoDオプションを使用するのと同じ - –no-motd
suppress daemon-mode MOTD (see manpage caveat) - –no-OPTION
turn off an implied OPTION (e.g. –no-D) - -A, –acls
- -X, –xattrs
- -O, –omit-dir-times
- –super
- –fake-super
- -S, –sparse
- -n, –dry-run
実際には同期を実行せず、実行時の動作だけを表示する。 - -W, –whole-file
- -x, –one-file-system
- -B, –block-size=SIZE
- -e, –rsh=COMMAND
- –rsync-path=PROGRAM
- –existing
- –ignore-existing
- –remove-source-files
- –delete-excluded
- –ignore-errors
- –force
- –max-delete=NUM
- –max-size=SIZE
- –min-size=SIZE
- –partial
- –partial-dir=DIR
- –delay-updates
- -m, –prune-empty-dirs
- –numeric-ids
- –timeout=SECONDS
- –contimeout=SECONDS
- -I, –ignore-times
- –size-only
- –modify-window=NUM
- -T, –temp-dir=DIR
- -y, –fuzzy
- –compare-dest=DIR
- –copy-dest=DIR
- –link-dest=DIR
- -z, –compress
転送時にgzip圧縮を使用する - –compress-level=NUM
- –skip-compress=LIST
- -C, –cvs-exclude
- -f, -F, –filter=RULE
- -0, –from0
- -s, –protect-args
- –address=ADDRESS
- –port=PORT
- –sockopts=OPTIONS
- –blocking-io
- –stats
- -8, –8-bit-output
- -h, –human-readable
- -P, –progress
- -i, –itemize-changes
- –out-format=FORMAT
- –log-file=FILE
- –log-file-format=FMT
- –password-file=FILE
- –list-only
- –bwlimit=KBPS
- –write-batch=FILE
- –only-write-batch=FILE
- –read-batch=FILE
- –protocol=NUM
- –iconv=CONVERT_SPEC
- -4, –ipv4
- -6, –ipv6
- –version
- –help
- -a, –archive
SSHの使用
通常rsyncはSSH上で実施される。
そのため、rsync実施時に、パスワードの入力が求められる。
これは現在rsyncを実施しているユーザの接続先でのアカウントのパスワードである。
パスワードの入力を省略する場合、キーペアを用意し、それを用いて認証することができる。
Tips
トラブルシューティング
Error reading response length from authentication socket.
capistranoのようなリモート操作ツールでrsyncコマンドを使用してSSHを行うと次のようなエラーメッセージが出ることがある。
Error reading response length from authentication socket.この場合、rsyncコマンドの前にssh-agentをつけると解決できる。
ssh-agent rsync ...
運用
OS起動時に実行
起動時に実行されるスクリプトである、 /etc/rc.local ファイルにrsyncコマンドを記述することで、
OS起動時にrsyncを実行することができる。
ただし、/etc/rc.localはrootユーザで実行されるので、内部で行われるSSHもrootユーザで行われることになる。
これを避けるためにsudoでユーザ変更すればよいが、デフォルトではリモート接続やコンソール接続以外の方法でsudoを実施することは許可されていない。
これの設定変更をする必要がある。
vi /etc/rc.local # 以下を追加 sudo -u <実行ユーザ> rsync ... chmod 640 /etc/sudoers vi /etc/sudoers # 下記の行を#コメントアウトする # Defaults requiretty