robocopyとは?

ファイルサーバのバックアップや引越しのために、フォルダを丸ごとコピーしたり、二つのフォルダの内容を同期(同じに保つ)したりするツールで、最近のWindowsのリリースに含まれるMicrosoft製の標準ツールです。FileBlogパッケージには含まれませんが、FileBlogユーザはファイルサーバ管理に携わる方が多く、複数ファイルサーバに分散するデータを定期的に集めたり、ファイルサーバの特定のフォルダを定期的に別のディスクにバックアップしたりといった作業を行う場合に、robocopyコマンドの利用を推奨しております。(robocopyの動作については弊社で責任を負いかねますので、お客様責任でお使い下さい。)

今どきXCOPYコマンドは止めましょう!!

MS-DOSの時代からのコマンドに「XCOPY」コマンドがありますが、これは今では古いコマンドなのでrobocopyをお勧めします。今どきXCOPYは役に立たないので、使うのは止めましょう。こう断言する理由は下記の二つで十分でしょう。

  1. XCOPYは、長い(255文字を越える)ファイル名を処理できず、異常終了します。
  2. XCOPY /d で「タイムスタンプが新しくなったファイルだけをコピー」するとき、コピー先のファイルのタイムスタンプが、コピー元のファイルのタイムスタンプと、秒単位でずれることがあります。そのため、XCOPY処理を日次で実行して、本来は毎日差分だけをコピーするつもりでいても、毎日全ファイルをコピーしてしまうことがあります。(FileBlogの検索対象フォルダに対し、別のファイルサーバから毎晩XCOPYでファイルをコピーするという運用を行っていたケースがありましたが、毎晩数十万ファイルの新規登録を検出してしまい、大変な処理負荷になっていました。)

robocopyとFileBlogの組み合わせ方

たとえば、下記の使い方が可能でしょう

  • 地方拠点のファイルサーバに分散したデータ(各ファイルサーバの特定フォルダ)を、毎晩ネットワーク越しにコピーして、一箇所に集める。
    一箇所に集めたものをFileBlogで検索可能にすることで、全拠点での情報共有が可能になります。
  • メインのファイルサーバの全フォルダを、毎晩、FileBlogサーバのフォルダに同期させる
    FileBlogサーバが、ファイルサーバのバックアップを保持するとともに、前日の断面での検索が可能になります

FileBlogで複数拠点・複数ファイルサーバを検索できませんか?という問い合わせが時々ありますが、拠点間ネットワークの狭い帯域越しにFileBlogを運用するよりも、robocopyによって拠点に分散するデータを収集し、センター(または本社)に集中させてFileBlogで管理する方が、実用性能が出ることが多いのです。robocopyはタイムスタンプが更新された最新ファイルのみをコピーするので、対象データを絞ればWAN越しでも十分使えます。

robocopyのインストール

Windows Vista /2008 以降では、標準でインストールされています。コマンドプロンプトで「robocopy」と打てば起動できてヘルプメッセージを見ることが出来るでしょう。インストールされていない環境の場合は、Microsoftのホームページから「Windows Server 2003 Resource Kit Tools」を探して、rktools.exe をダウンロードし、インストールできます。(ダウンロードページは英語のページしかありませんが…)

robocopyの使用例

たとえば下記のように使います

robocopy src dest /MIR ミラーする。(削除も反映する)
robocopy src dest /E /PURGE 上(/MIR)に同じ
robocopy src dest /E 空のサブディレクトリ含めてコピー
robocopy src dest /MIR ミラーする。(削除も反映する)
robocopy “C:\Test Folder\Docs” “\\TargetServer\Share\Docs” /MIR /XD temp” “temp”フォルダ・ファイル以外をミラーする

上記のように/PURGEや/MIRオプションを指定すると、コピー元で削除されたファイルをコピー先からも削除します。コピー先からの削除を嫌う場合は外してください

実用例

例えば、他のサーバにファイルをバックアップするコマンドは下記のようになります。

robocopy F:\Mb2Mail20070606\Mb2Mail_Doc \\Clover\h$\Backup\DocFiles
  /MIR /XD temp /R:0 /LOG:”\\Clover\h$\Backukp\Logs\copy.log” /NP /NDL

各オプションの意味は次の通り

/NP コピー進捗を出力しない。大きなファイルの場合、このオプションが無いと1%刻みでログを出力してしまうので、バッチ実行時には必ずつけるべきです
/NDL フルパスを出力しない(ログファイルをコンパクトにできます)
/NFL ファイル名を出力しない(ファイル単位のログが不要なときに指定)
/R:0 コピー失敗時の30秒後リトライはしない(デフォルトだと100万回リトライするので、アクセス権ないファイルがあったときに処理が凍ってしまいます)
/XJ ファイル、フォルダのシンボリックリンクをたどらない(Vista向け)
/COPY:DAT コピー対象のデフォルト(D=データ, A=属性, T=タイムスタンプ)
/COPY:DATS セキュリティもコピーする
/COPY:DT データと日付のみコピーする(コピー先がWindows以外のNASなどの場合に使う)

あとは、robocopyコマンドを含むバッチファイルをタスク登録して定期的に実行すれば、フォルダの同期が可能になります。