いつまでもハマるrsyncのメモ

10月 16, 2011

いつまでたっても魑魅魍魎なrsyncコマンド。いつか参照するかも、なときのために、ちょっとしたネタだがメモしておく。以下は以前の投稿とかぶっているが、rsyncのキモですよ、キモ!!(自分に言い聞かせる)

sync元ディレクトリの末尾には「/」をつけると配下のファイル群がコピーの対象となるが、つけないとそのディレクトリそのものがコピーされてしまう。なおコピー先はスラッシュありなしどちらでも影響ない、はず。

# rsync -avz -e ssh /var/log/ dummy.com:/var/backup/ ←普通はこっちにする

# rsync -avz -e ssh /var/log dummy.com:/var/backup/ ←普通望まない結果になる


次に、初回のrsync実行時に指定したコピー先ディレクトリが存在しない場合の挙動。第一階層まではコマンド実行時にディレクトリを作成してくれて、syncが成功する。第二階層以上になるとmkdirができないよ、とエラーになる。

以下は、コピー先にvarディレクトリが存在していなくても成功する。

# rsync -avz -e ssh /usr/local/mysql/var/ dummy.com:/usr/local/mysql/var/


以下は、var/より更に一階層深いパスなのでコケる。

# rsync -avz -e ssh /usr/local/mysql/var/data/ dummy.com:/usr/local/var/data/


最後に、こんなエラー。

rsync error: some files could not be transferred (code 23)


一般ユーザで-aオプションをつけてrsyncを実行するとこのエラーがでることがある。(コピー元とコピー先のオーナーが違う場合?)当初権限だけでなくオーナーの問題、だとかrootで実行しないとそうなる、とか断片的な情報しか見つからなかったが、以下の説明がドンピシャっぽい。

これはファイルの owner が違っていて変更できなかったといったことのようです。(略)-a は -rlptgoD と等価ですが一般ユーザでは goD オプションは一般に使えないので,-a ではなく -rlpt を指定すればいいのだろうと思います。


※以下より抜粋
http://oku.edu.mie-u.ac.jp/~okumura/networking/rsync.html

ただし上記のエラーは出ても、オーナーの変更ができないのでファイル属性に差分がある状態、になってしまうが、ファイルコピー自体は一応成功する。細かいことにこだわらないのなら無視してもいい、と思われる。ちゃんとしたいなら上記のようにオプションを変えるか、root権限で実行するかしなさいよ、ってところかな。

それにしても知らんかったよ。
まだまだ何かがでてきそうなrsync…。


Categories: Linuxコマンド