いつまでもハマるrsyncのメモ
いつまでたっても魑魅魍魎な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…。