会社のWindows Server 2003 R2はVMware上に構築していて、バックアップはVMwareのファイルが入ったディレクトリーをまるごとコピーしています。まあ、それで安心なのですが、毎日更新されるデータのフォルダなどはわざわざVMwareを別途立ち上げてリカバリーするのも面倒です。ということで、データのフォルダだけ毎晩のペースでバッファローのLinkStation LS-WH2.0TGL/R1コピーすることにしました。
毎晩ということでバッチファイルでの運用が前提です。Linuxならこういうミラー用途にrsyncを使えばいいんですが、Windowsなのでちょっとやっかいです。標準で付いてくるxcopyはフォルダーごとのコピーはできるものの、削除されたファイルをミラー先でも削除することはできません。なんかいいツールはないかなぁと調べてみましたら、robocopy.exeというのが見つかりました。
こちらのページが詳しいです。Windows Server 2003のリソースキットに含まれているものなのでMicrosoftのサイトからダウンロード。でインストールするだけで、コマンドプロンプトから実行できるようになります。ただ、
> echo %PATH%
としてもインストールしたディレクトリーにパスは通ってないのに、普通に
> robocopy
と実行できるのは変な感じですね。まあこれがWindowsの流儀なんでしょう。
使い方はあちこちのページにありますが、こちらのページやこのページの日本語訳マニュアルがたいへん参考になりました。
そうそう、LS-WH2.0TGL/R1なんですが、ここへフォルダーをミラーすると、変更していないファイルのコピー作業を何度でも実施します。ああ、そういえばFATのタイムスタンプが偶数になるという制限があって、sambaで作られたLS-WH2.0TGL/R1側が完全なNTFSじゃないものだからたぶんこれが影響しているんだろうな。と適当に判断して、調べてみるとrobocopy、こういう問題にも対応していました。/FFTオプションをつけることでFATのタイムスタンプ問題も解決です。これで同じファイルを何度もコピーしないようになりました。ただ、それでも数個のファイルが相変わらずコピーされる現象があるんですけど、数が少ないのでほうっておきます。
実はLS-WH2.0TGL/R1はLinux側からもcifsでマウントして使っていて、rsyncでコピーすると上と同じく変更していないのにすべてのファイルが上書きコピーされてミラーにかなり時間がかかる現象があったのでした。こちらはFTP経由でミラーすることで回避していましたけど、rsyncに2秒以内の時間差は無視するようにするオプションとかないものですかね。同じく、NASとして使っているアイ・オー・データのHDL4-Gはそんなことありませんので、sambaのバージョンか設定違いの影響なんでしょうが。
最後に、このリソースキット。
Note: The Windows Server 2003 Resource Kit Tools are not supported on 64-bit platforms.
と、64bit版ではサポートしないとのことでしたけど、うちのWindows Server 2003, Standard x64 Editionではrobocopy.exeに関しては問題なく使えているということを報告しておきます。
追記
rsyncの時間差無視についてちょっと調べたらすぐに見つかりました。--modify-windowオプションでした。--modify-window=2とすることで2秒以内のタイムスタンプは無視するようになります。マニュアルによるとたいていの場合1でいいようです。
こんなに簡単に解決するなんて、ちゃんと調べないとダメですね。