- PR -

rsyncでシンボリックリンクの同期の取り方

1
投稿者投稿内容
MRE
会議室デビュー日: 2006/10/26
投稿数: 4
お住まい・勤務地: 埼玉
投稿日時: 2008-09-29 16:30
rsyncコマンドでシンボリックリンクについて意図したように同期がとれず、てこずっています。


現象としては以下のようになります。
-----------------------------------
rsync元のディレクトリ> ServerA:/hoge/foo/
rsync先のディレクトリ> ServerB:/bar/backup

実行コマンドを
rsync -apovz ServerA:/hoge/foo/ ServerB:/bar/backup
として実行したときに、

ServerBに中にファイルやディレクトリのある実ディレクトリがあり
ServerAに同名のシンボリックリンクがあった場合
ログに以下のエラーが表示され、シンボリックリンクが作成されません。

rsync: delete_file: rmdir "/bar/backup/aaaa/bbbb" failed: Directory not empty (39)
rsync: symlink "/bar/backup/aaaa/bbbb" -> "/hoge/foo/dddd/eeee" failed: File exists (17)
-----------------------------------

つまり同期の取れたServerAとServerBの両方にあった実ディレクトリを
ServerAのディレクトリだけ削除し、同名のシンボリックリンクを作成した後に
rsyncコマンドを実行すると起こります。
中にファイルやディレクトリがない場合は rmdir コマンドで削除されるため
正常にシンボリックリンクが作成されます。

また、エラーが発生したのち、手動でServerBの実ディレクトリを削除し、
ServerAと同じようにシンボリックリンクを作成すれば
後のrsyncコマンドはエラーが発生せずに終了します。

これを手動ではなくrsyncコマンド実行時に正常に同期を取れるようにしたく
思い当たるオプションを試してみたのですが上手くいきませんでした。


この問題の解決方法をご存知の方はいらっしゃいませんか。
MRE
会議室デビュー日: 2006/10/26
投稿数: 4
お住まい・勤務地: 埼玉
投稿日時: 2008-10-01 14:14
すみません。
自己解決しました。

-r オプションと --delete オプションを付けると意図した動作となりました。
1

スキルアップ/キャリアアップ(JOB@IT)