dポイントプレゼントキャンペーン実施中!

お世話になります。

現在AサーバからBサーバに対して、定期的にrsyncにてサーバ内ファイルの同期を行っています。
毎日更新されているファイル数が数十万ということと、回線が細い為に同期完了まで約2時間程かかります。

その際少し気になる点があります。

例えば、数十万ある同期対象ファイルの中でhoge.txtというファイルがあったとします。このファイルは動的に書き込みが行われるログファイルです。中身はWEBのアクセスログのようなものです。
このファイルを含む数十万のファイルをrsyncで同期を行った場合以下のような現象が起こります。
--条件-------------------------------------------
rsync開始時刻 :01:00
rsync完了時刻 :03:00
rsync開始時の同期元Aサーバにあるhoge.txtのタイムスタンプ :00:58
rsync完了時の同期先Bサーバにあるhoge.txtのタイムスタンプ :00:58
rsyncオプション :rsync -auvvz -e /usr/bin/ssh --exclude '*~' --delete
-------------------------------------------------
上記条件及び結果の元、Bサーバに同期されたhoge.txtを見てみるとファイルのタイムスタンプ自体はAサーバでrsyncを開始した時点でのタイムスタンプ(00:58)なのですが、ファイルの中身を見てみると、ログファイル内にて01:30にアクセスがあったという記録が追記されています。

恐らくは約2時間かかるrsync実行中のうち、01:30以降にAサーバからBサーバに同期が行われたと思うのですが、それであれば、hoge.txtのタイムスタンプ自体も01:30に変わっていなければならないはずだと思うのです。

ちなみにこのhoge.txtというログファイルは書き込みが行われる毎にファイルのタイムスタンプも更新されます。

そこで質問させて頂きたいのですが、rsyncの挙動としてこのようなことはありえるのでしょうか?

それではどうぞよろしくお願い致します。

A 回答 (3件)

#2 です。



> 確かにこれくらいの数になってくるとアーカイブ化
> した方が良いかもしれないんですが、同期先が同一
(snip)
> 感じではあるんですが)このような方法を続けてしま
> っております。

多分、やってみるとアーカイブ作る方が早いと思いますよ(笑)。rsync はメモリも CPU もかなり消費しますし、ファイル単位での処理が大量に発生することになりますので...

アーカイブは、例えば bzip2(や gzip)を掛けずに作成するというのも手です。遠隔地へのバックアップなら回線がボトルネックになりますので圧縮した方が良いですが、同一セグメントに A・B があるのなら非圧縮でやった方が早いだろうと思います。

# でも同一セグメントにあるのに細い回線、って...?
    • good
    • 0

動作としては #1 さんが書かれているような動作なのでしょうね。

つまり

 1. 双方のサーバのファイルの属性情報を比較
 2. ファイルのコピーを行う
 3. ファイルの属性情報の設定を行う

という順になっているのでしょう。1. の時点で取得したファイルの属性情報(更新タイムスタンプなど)を 3. のタイミングで設定すれば、経験されている現象に遭遇することは考えられます。


なお余談ですが、数十万のファイルを rsync で同期するのはかなり厳しいのではないですか? それだけ更新ファイルがあるのなら tar+bzip2 などでアーカイブを作ってから転送した方が短時間で済みそうですし、双方のサーバへの負荷も低そうな気がします。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
やっぱりそういう動作っぽいですね。

>なお余談ですが、数十万のファイルを rsync で同期す

>るのはかなり厳しいのではないですか? それだけ更新

>ファイルがあるのなら tar+bzip2 などでアーカイブを

>作ってから転送した方が短時間で済みそうですし、双

>方のサーバへの負荷も低そうな気がします。
そうなんですよね(笑)
確かにこれくらいの数になってくるとアーカイブ化した方が良いかもしれないんですが、同期先が同一セグメント内ということと、数的にアーカイブ化に時間がかかってしまう為(これは同期でも似たような感じではあるんですが)このような方法を続けてしまっております。

お礼日時:2005/09/02 08:54

rsyncは確か仮想的なリストを参照して同期が取られるはずだったと思います。



よって、、、
1,AサーバとBサーバでリストの同期
→この時のhoge.txtのタイムスタンプが00:58、

2,更新されたファイルやディレクトリの同期
→hoge.txtがコピーされた時間が01:30、

ではないでしょうか?

正式な回答が判ったら教えてください。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
なるほど、参考になりました。
実際のところどうなのかはもう少し調べてみます。

お礼日時:2005/09/02 08:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!