kikukawa's diary

都内で活動するシステムエンジニアが書いてます。 興味を持った技術やハマったポイント、自分用メモをつけてます。 最近はweb中心

rsyncの差分をなくす方法

サーバAとサーバBで、rsyncで同期を取るプロジェクトにて、
サーバA側のファイルのタイムスタンプが更新されてしまい、
同期対象おかしくなってしまったので、その対応方法。

今後もしかしてたら必要になるかもしれないのでメモ。

気にせずrsyncをとればよいのですが、
それもできない状態だったので、以下の様な対応をしました。


サーバAのタイムスタンプ 1> サーバBのタイムスタンプ
になっているため、rsyncで同期対象となっている。

rsyncのドライランで、同期対象となっているものすべてのファイルを取得。
ファイル一覧を生成。

次にサーバA、サーバB両方にあるものを取得し、かつ、サーバB側のタイムスタンプも取得。
単純にshell組んで、実行するだけです。標準出力のみリダイレクトします。
サーバAにあって、サーバBにないものはエラーに出力されるので無視。

ssh サーバB ls -la --time-style=+"%Y%m%d%H%M.%S" ファイルパス

下記にて、サーバAとサーバB両方にあるもので、ファイル内容に差分があるものは対象外とする
簡単に、以下のような内容を実行するシェルを作りました。
こんなことしなくても、rsyncでCオプション使えばよいのかもしれませんが、
未検証だったので。

scp /tmp/ファイルパス サーバB:ファイルパス
diff /tmp/ファイルパス ファイルパス
rm /tmp/ファイルパス

できたリストと、先にとっておいたタイムスタンプを使って、
サーバA側のタイムスタンプを更新する。

sudo touch -t タイムスタンプ  ファイルパス


以上で終了。