Robocopyの /CREATE オプションは、「ディレクトリと、サイズが0のファイルのみを作成する」というオプションです。いったいこれは何のためにあるオプションなのでしょうか。
目的を一言でいうと、初回コピーの際に、「ディレクトリがフラグメントを起こさないようにする」ためです。
NTFSなどのファイルシステムでは、ディレクトリもファイルの一種として扱われます。ディレクトリの中に存在するファイルの数が多くなればなるほど、ディレクトリの「ファイルサイズ」は大きくなり、ハードディスク上の複数の物理ブロックにまたがるようになります。この複数の物理ブロックが物理的に連続した位置にあれば、高速に読取りを行うことができますが、逆に、ばらばらの物理位置になってしまうと、読み取りがとても非効率になってしまいます。このようにブロックが連続でなくなってしまうことをフラグメントといいます。
サイズの大きなファイルが多数存在するディレクトリを別の場所にコピーする場合、以下のような処理が行われます。
1. 空のディレクトリを作成する
2. ディレクトリ配下の一つ一つのファイルについて以下を繰り返す
2-1 ディレクトリにファイルのエントリを登録する
2-2 ファイルのデータ本体をコピーする
ディレクトリは、最初に空の状態で作成されますが、2-1 を行うことで少しずつ大きくなり、複数の物理ブロックにまたがって大きくなっていきます。一方、2-2 では、大きなサイズのファイルがコピーされることで、こちらも物理ブロックが使われていきます。2-1と 2-2 が交互に行われることで、物理ブロックが交互に割り当てられていくような状態になり、ディレクトリに割り当てられる物理ブロックがとびとびの状態になってしまうのです。
そのようなことにならないよう、/CREATE オプションは 2-2 を行わないことにより、ディレクトリだけに物理ブロックが割り当てるようにすることで、ブロックが不連続になることを防止します。ファイルのデータはコピーされていませんので、/CREATE が終わったら、今度は本来のコピーを実行すればコピーは完了です。
当然のことながら、/CREATE は「初回コピー」(コピー先が存在しない状態からのコピー)の時に意味のあるオプションです。特に効果が大きいと考えられるのは、コピー先のハードディスクやパーティションを初期化し、空の状態から新たにコピーを行う場合になると思います。
先日ちょうど、バックアップドライブ用に大容量HDDを購入し、まっさらな状態から /CREATEを使ってコピーを行ったのですが、それまではバックアップのたびに湯沸かしポットのような音が鳴っていたのですが、音が聞こえないくらいの静音になりました! (…すみません、これ、実際には、HDDの性能向上によるほうが大きいと思いますので、個人的思い入れも含めた感想です。)
使い方は簡単です。まず /CREATE を付けてコピーを実行し、次に、/CREATE を付けずにコピーを実行するだけです。以下に例を示します。
(1) robocopy N:\src Z:\dest /MIR /DCOPY:DAT /CREATE (2) robocopy N:\src Z:\dest /MIR /DCOPY:DAT
(1) でディレクトリとサイズ0のファイルを作成します。この時、初回コピーでなければなりません。ディレクトリのみが作成されるので、ディレクトリの物理ブロックのフラグメントを防止します。
(2) で、本来のコピーを行います。ファイルのデータ部分がコピーされます。
フラグメント防止による性能向上は、メカニカルなデバイスであるハードディスクの場合には性能に大きく影響すると思いますが、SSDなどの場合は、それほど効果は感じられないかもしれません。
しかし、/CREATE でコピーをしておくと、その後のファイルアクセスの性能にずっと影響するようですので、HDDのボリューム全体を別のHDDにコピーするときなどには結構有効なテクニックだと思います。チャンスがあれば、試してみてください。
RoboSync: RobocopyのためのGUIツール
本サイトで公開しているツールです。ダウンロードはこのバナーをクリック!
Version 1.3.27 をリリースしました! (2021/1/1)
RobocopyをGUIから実行できるようにするツールです。コマンドプロンプトを表示することなく、GUI画面からほぼマウス操作だけで実行までできます。
Robocopyがバックグラウンドでそのまま実行されますので設定に迷うことはありません。
・ 複数のコピー項目の作成と管理。
・ スクリプトファイル(バッチファイル)出力が可能。スケジューラによるバックグラウンド処理にも使えます。
・ Robocopyによるコピー実行前に、実行プレビュー(/L)、パラメータのチェック(/QUIT)が可能。
・ Robocopyのパラメータ設定の簡易チェック、Robocopy実行前の簡易チェックを行います。
・ Robocopy実行前後で実行するスクリプトを定義可能。
・ Robocopy実行途中での中断、実行ログの履歴管理と保存が可能。
Related Articles
管理者より個人的に返信をご希望の方は、コメント中に必ずメールアドレスを記載してください。記載がないと返信できませんのでご注意ください。
If you want personal response from the author, please do not forget to write your email address in the comment. Otherwise, the author can not reply.
投稿されたコメントは手動で処理されるため、記事として登録されるまで1日程度かかります。
Submitted comments will be processed manually. So, please understand it will take about a day to publish your comment.