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
/
X
J
/LOG:"C:\temp\copy.log
"
上記でコピーした後、<src>フォルダの内容を<dst>フォルダにコピーし、<src>側に無いファイルは<dst>以下から削除する(削除を含めた複製する)には:
フォルダのミラー
robocopy
<src> <dest> /IM /COPY:DATSO /DCOPY:DAT /E /PURGE /R:0 /W:0 /NP /NDL
/
X
J
/LOG:"C:\temp\copy.log"
なお、/COPY:DATSO を /COPYALLにすると、/COPY:DATSOU相当になりますが、それでもいいでしょう
上記のオプション解説
COPY対象データ項目
/COPY:DATSO
- ファイルについて、 データ、属性、タイムスタンプ、セキュリティ、オーナー をコピー(監査情報Uは省いています)
/DCOPY:DAT
- ディレクトリについて、代替ストリーム、拡張属性、タイムスタンプ、 をコピー (基本属性は/NODCOPYを指定しない限りコピーされる。タグをコピーするにはDが必要. なお、セキュリティ情報のコピーは/COPY オプションのSOUフラグ指定に基づくため/DCOPYにSOUフラグを指定しても無駄です)
なお、/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 - ジャンクションポイントとシンボリックリンクをたどらない
あまり使われていないものの、ジャンクションポイントやシンボリックリンクがある場合、リンク先の予想外のデータまでがコピー対象となることがあります。
特に、親フォルダへのシンボリックリンクをたどってしまうと、無限ループが発生してしまいますので、処理が終わりません。未知のファイルシステムをコピーするときには、指定しておいたほうが安全です。