2024/9月24 更新

rococopyの使い方について更新しました。

robocopyとは?

ファイルサーバのバックアップや引越しのために、フォルダを丸ごとコピーしたり、二つのフォルダの内容を同期(同じに保つ)したりするツールで、最近のWindowsのリリースに含まれるMicrosoft製の標準ツールです。

FileBlogパッケージには含まれませんが、FileBlogユーザはファイルサーバ管理に携わる方が多く、複数ファイルサーバに分散するデータを定期的に集めたり、ファイルサーバの特定のフォルダを定期的に別のディスクにバックアップしたりといった作業を行う場合に、robocopyコマンドの利用を推奨しております。(なお、robocopy自体の動作については弊社で責任を負いかねますので、お客様責任でお使いください。)

MS-DOSの時代から「XCOPY」コマンドがありましたが、これは今では古いコマンドであり、使う人はいなくなりました。(255文字を越える長いファイル名に対応できないなど、機能が低すぎるため)

robocopyとFileBlogの組み合わせ方

たとえば、下記の使い方ができるでしょう。

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

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

robocopyのインストール

現在のWindowsには標準でインストールされています。コマンドプロンプトで「robocopy」と打てば起動でき、ヘルプメッセージを見ることができるでしょう。

推奨コマンドライン例

<src>フォルダの内容<dst>フォルダにコピーするには次の「フォルダのコピー」コマンドを実行します。

フォルダのコピー

robocopy <src> <dest> /IM /COPY:DATSO /DCOPY:DAT /E /R:0 /W:0 /NP /NDL /XJ /LOG:"C:\temp\copy.log"

上コマンドでコピー後、<src>フォルダの内容を<dst>フォルダにコピーし、<src>側に無いファイルは<dst>以下から削除する(削除を含めた複製する)には次の「フォルダのミラー」コマンドを実行します。

フォルダのミラー

robocopy <src> <dst> /IM /COPY:DATSO /DCOPY:DAT /E /PURGE /R:0 /W:0 /NP /NDL /XJ /LOG:"C:\temp\copy.log"

なお、/COPY:DATSO/COPYALLにすると、/COPY:DATSOU相当になりますが、それでもいいでしょう。

上記のオプション解説

COPY対象データ項目

/COPY:DATSO
ファイルについて、 データ、属性、タイムスタンプ、セキュリティ、オーナー をコピーします。(監査情報Uは省いています)

/DCOPY:DAT
ディレクトリについて、代替ストリーム、拡張属性、タイムスタンプをコピーします。(基本属性は /NODCOPY を指定しない限りコピーされます。タグをコピーするには D が必要です。なお、セキュリティ情報のコピーは /COPY オプションの SOU フラグ指定に基づくため /DCOPYSOU フラグを指定しても無駄です)

  • /COPYALL/COPY:DATSOU のエイリアスですが、オーナーや監査情報はコピーしなくてもよいことが多いでしょう。
  • /DCOPY:???/COPYALL には含まれる保証がないので、明示的に /DCOPY:DAT を指定したほうがよさそうです。 (指定しないと /DCOPY:DA 扱いとなりフォルダのタイムスタンプがコピーされないらしい)
  • コピー元とコピー先が両方ともNTFSの場合にしか、タグデータ(など一部属性情報)はコピーされません。

COPY対象サブフォルダ

/e
空フォルダも含めてコピーします。( /s だと空フォルダを除外しますが、 空のホームフォルダなどに付与されたフォルダのアクセス権をコピーすることを考えると /e の方が優れています)

削除ファイルの同期削除

/purge
コピー元で削除されたファイルを、コピー先からも削除します。

なお、/MIR (Mirror)/e /purge のエイリアスといわれますが、実際には /e /purge /copy:DATS ぐらいの意味があり、 セキュリティのコピーも行われるようになるという情報もあります。

差分コピー判定を厳密にする

/IM
MFT更新時刻(最終更新日時とは別にNTFS内部が持つ最終エントリ更新時刻のことで、タグ更新時にも更新される日時情報)で差分を判定します。 (コピー元とコピー先が両方ともNTFSの場合にのみ使えます)

FileBlogではタグを更新してもファイルのタイムスタンプを更新しません、しかし、MFT更新時刻は見えないところで変更されるので、これを指定するとタグ更新が複製され相性が良いです。

リトライ方法指定

/R:2 /W:10
「失敗時は10秒待って3回リトライ」のような再実行オプションを指定します。 (リトライ回数を無指定にすると、永遠にリトライしてしまうことがあるので、スケジュール組んでバッチで実行するときは必ず指定すべきです)

/R:0 /W:0
初回など大量コピー時には /W:0 にすべきでしょう。(待ち時間ゼロ、リトライ回数ゼロなので、コピー時に読み取れなかったファイル(ロックされているなど)はどんどんスキップして処理します)

ログ出力指定

/LOG:"C:\work\robocopy.log"のようにファイルパスを指定します。

/NP
コピー進捗を出力しない。(大きなファイルの場合、このオプションが無いと1%刻みでログを出力してしまうので、バッチ実行時には必ずつけるべきです)

/NDL
フルパスを出力しない。(ログファイルをコンパクトにできます)

/NFL
ファイル名をログ出力しない。(場合によってはつけてもよいでしょう)

シンボリックリンクの扱い

/XJ
ジャンクションポイントとシンボリックリンクをたどらない。

あまり使われていないものの、ジャンクションポイントやシンボリックリンクがある場合、リンク先の予想外のデータまでがコピー対象となることがあります。

特に、親フォルダへのシンボリックリンクをたどってしまうと、無限ループが発生してしまいますので、処理が終わりません。未知のファイルシステムをコピーするときには、指定したほうが安全です。

ご質問・ご相談はお気軽にお問い合わせください