robocopy 中のコマンドプロンプトを最小化すると処理が早くなる説

robocopy 最小化すると早く終わる説

ファイルサーバの移行などに利用する robocopy コマンドですが、robocopy 実行中のコマンドプロンプトを最小化するとコピーが早く終わる説があります。

これって実は Windows Server の構築本なんかでも書かれている情報です。

大量のファイル群を移行する場合にはROBOCOPYコマンドも有効です。このコマンドでは、共有設定は移行できませんが、移行を複数回に分けて実行する場合などに利用できます。なお、実行時にはコマンドプロンプトを最小化することによって、処理の高速化が期待できます

標準テキスト Windows Server 2012 R2 構築・運用・管理パーフェクトガイド より引用

今回はそれが本当なのかを検証してみます。

通常のコピーとの違いを認識する

robocopy はオプションが大量にあります。以下はよく使うオプションを抜粋したものです。

  • /MIR ディレクトリをミラーリングする
  • /S サブディレクトリをコピーするが空のディレクトリはコピーしない
  • /E 空のディレクトリを含むサブディレクトリをコピーする
  • /R:n コピーが失敗した時のリトライ回数(既定値は100万回)
  • /W:n リトライする間隔の設定(既定値は30秒)
  • /COPY:Flag ファイルにコピーする情報を指定する(既定値は/COPY:DAT)
    • D:データ
    • A:属性
    • T:タイムスタンプ
    • S:セキュリティ
    • O:所有者情報
    • U:監査情報
  • /COPYALL ファイル情報をすべてコピーする(/COPY:DATSOU と同じ)

折角なので、「そもそも通常のコピーより robocopy の方が早いの?」という素朴な疑問にもお答えしようかと思います。そこで今回は以下の4つの計測を行います。

  1. 通常のコピー
  2. 通常のコピー実行中のウィンドウを最小化
  3. robocopy
  4. robocopy 実行中のコマンドプロンプトを最小化

ただし、通常のコピーと robocopy の時間差を計測するという事は、同じ情報をコピーしなければ意味がありません。そこで通常のコピーはどのような情報をコピーしているのかを改めて整理します。

通常のコピーがコピーする情報

orasys というユーザでCドライブ直下にテストフォルダを作成し、oradb ユーザに対するフルコントロールを与えました。

テストフォルダのアクセス権

テストフォルダの中には空の「新しいフォルダー」と “あ” とだけ入力した「新しいテキストドキュメント.txt」を用意しました。

新しいテキストドキュメント.txt の所有者情報など

新しいフォルダーの中身は空

テストフォルダを右クリックから普通に別ホストのCドライブへコピーしました。以下のようにフォルダに設定したアクセス権は消えています

このCドライブへは Administrator でログインしたため、Administrator がファイルを作ったかのような扱いになっています。

アクセス権が乗っ取られた!

「新しいフォルダー」は空だったので、下図より空のフォルダでもコピーされることが分かります。

「新しいテキストドキュメント.txt」の所有者もコピー先のユーザになっています。また、作成日時がコピーした日時になっています。Administrator が新規でファイルを作成したような扱いですね。ただし更新日時はコピーできているようなので、タイムスタンプは一部コピーしているようです。

計測に使用する robocopy オプションはこれだ!

これらのことから、私は以下のコマンドを速度計測に使用することにしました。

robocopy C:\テストフォルダ \\192.168.0.1\C$\テストフォルダ\ /E /R:1 /W:1

本当は「/COPY:DA」でタイムスタンプを除外したかったんですが、Windows Server 2016 で実行するとコピーフラグが強制で最低 DAT になります

C:\Users\Administrator> robocopy C:\テストフォルダ \\192.168.0.1\C$\テストフォルダ\ /E /COPY:DA /R:1 /W:1

 

コピー元 : C:\テストフォルダ\
コピー先 : \\192.168.0.1\C$\テストフォルダ\

ファイル: *.*

オプション: *.* /S /E /DCOPY:DA /COPY:DAT /R:1 /W:1

通常コピーにはタイムスタンプ(作成日時)は含まれないので微妙にコピー情報が違ってしまうのですが、そこは許してください。

通常コピーと robocopy の時間計測

今回は 26GB のテストフォルダを用意しました。中身はエクセルファイルやワードワイル、画像ファイル、実行ファイルなど様々です。

コピー元とコピー先は同じスイッチに接続しており、それら以外の接続はありません。

計測結果

テスト順序の前後関係が結果に影響を及ぼす可能性を私の知識では完全に否定できないので、テストは結果の並び順に2回ずつ実施しました。以下がその結果です。

コピー方法 結果タイム
通常のコピー 5分54秒
通常のコピー(ウィンドウ最小化) 5分35秒
robocopy 6分22秒
robocopy(コマンドプロンプト最小化) 6分9秒
robocopy 6分26秒
robocopy(コマンドプロンプト最小化) 5分56秒
通常のコピー(ウィンドウ最小化) 5分40秒
通常のコピー 5分40秒

ええ…。robocopy の方が遅いやん。

どうやら純粋にコピーする目的の場合通常のコピーの方が早いようです。ウィンドウを最小化して効果があるかは微妙ですね。おまじないとして最小化するといいかもしれません。

robocopy 実行時にコマンドプロンプトを最小化すると早くなるか」に対する答えは「早くなる」です。

余談:xcopy と fastcopy

robocopy を調べると引っかかる「xcopy」と「fastcopy」。xcopy は robocopy と同じくコマンドベースのツールで、Windows に標準搭載されています。fastcopy はコピーが速いと有名なフリーソフトです。ついでだったのでこの2つも同じ環境で計測してみました。

xcopy

実行する xcopy コマンドは以下です。

xcopy C:\テストフォルダ \\192.168.0.1\C$\テストフォルダ\ /E /C /H

  • /E ディレクトリまたはサブディレクトリが空であってもコピーする
  • /C エラーが発生してもコピーを続ける
  • /H 隠しファイルやシステムファイルもコピーする

結果は以下のとおりでした。

xcopy:5分59秒

xcopy(コマンドプロンプト最小化):6分4秒

robocopy よりは早いですね。ただし、xcopy はコマンドプロンプトを最小化しても意味はないようです。

fastcopy

fastcopy はフリーソフトですがインストールが必要です。インストール自体は一瞬で終わります。

インストールをクリック

5秒くらいでインストール完了

こんな感じでコピーを開始します。

結果は以下のとおりでした。

fastcopy:5分28秒

速いですね。スピード勝負では fastcopy が王者のようです

円マークによる挙動変化

fastcopy は円マークの在り無しで動きが変わります。例えば Source のフォルダの最後の “\(円マーク)” がある場合、そのフォルダの中身だけがコピーされます。今回のようにルートフォルダごとコピーしたい場合は円マークを除きます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)