ファイルをコピーする最速の方法


15

ビルドサーバー(CCNET)でビルドが成功すると、すべてのASP.NET Webサイトファイルが仮想ディレクトリ(%output_dir%)にコピーされるため、開発者以外でも最新バージョンのWebサイトを表示/テストできます。ビルドの最後に、次のbatファイルが実行されます。

rmdir /s /q "%output_dir%"
mkdir "%output_dir%"
xcopy "%source_dir%*"  "%output_dir%" /e /c /i /q /-y

問題は、コピーが遅いことに気づき、Windows 2008でxcopyよりも高速なコピーコマンドがあるかどうか疑問に思っていたことです。ソースと宛先は同じドライブ上にあります。以下は、コピーするときに使用する引数です。

/e = copies directories and sub directories including empty ones.
/c = continues copying even if there are errors
/i = if destination does not exist destination is directory
/q = don't display filenames
/-y = confirm overwrite

回答:


21

パフォーマンスの観点からのみxcopyまたはrobocopyは同様の結果をもたらします。Windows Vista 64ビットSP2ボックスでいくつかのテストを実行して、いくつかの比較を行いました。すべてのコピーは、内部7200 RPM Sata IIディスクと外部USB 2.0ドライブ間、または示されている同じ内部ドライブ自体で実行されました。実行するコマンドをバッチファイルに入力するだけで、特別なセットアップは行われませんでした(テストが無効化/検証される場合は、自分で決めてください)。PowerShellを使用して、開始時間と停止時間をキャプチャしました。ここにいくつかのパスを行った後、私が遊んだツールの平均があります:

ファイル:732,909,568バイト(698 MB)、同じ内部ディスク上の異なるディレクトリにコピーされた1つのISOファイル。

copy      6 secs (ex. copy G:\folder1\* G:\folder2\)
xcopy     6 secs (ex. xcopy G:\folder1 G:\folder2 /I /E /Y /R)
robocopy  6 secs (ex. robocopy G:\folder1\ G:\folder2 /E /NP)
teracopy 28 secs (ex. TeraCopy.exe Copy G:\folder1\ G:\folder2\)
fastcopy 19 secs (ex. fastcopy.exe /auto_close G:\folder1 /to=G:\folder2)  

ファイル:732,909,568バイト(698 MB)、外部USBディスクにコピーされた1つのISOファイル。

copy     36 secs (ex. copy G:\folder1\* I:\folder2\)
xcopy    35 secs (ex. xcopy G:\folder1 I:\folder2 /I /E /Y /R)
robocopy 36 secs (ex. robocopy G:\folder1\ I:\folder2 /E /NP)
teracopy 36 secs (ex. TeraCopy.exe Copy G:\folder1\ I:\folder2\)
fastcopy 38 secs (ex. fastcopy.exe /auto_close G:\folder1 /to=I:\folder2)  

ファイル:45,039,616bytes(42.9MB)外部usbディスクにコピーされた5つのランダムなファイル

copy      6 secs (ex. copy G:\folder1\* I:\folder2\)
xcopy     5 secs (ex. xcopy G:\folder1 I:\folder2 /I /E /Y /R)
robocopy  6 secs (ex. robocopy G:\folder1\ I:\folder2 /E /NP)
teracopy 12 secs (ex. TeraCopy.exe Copy G:\folder1\ I:\folder2\)
fastcopy  6 secs (ex. fastcopy.exe /auto_close G:\folder1 /to=I:\folder2)

ファイル/ディレクトリ:1,087,180,800バイト(1.01 GB)、27ファイル/ 8ディレクトリが外部USBディスクにコピーされました。

copy     *Not included in test
xcopy    57 secs (ex. xcopy G:\folder1 I:\folder2 /I /E /Y /R)
robocopy 58 secs (ex. robocopy G:\folder1\ I:\folder2 /E /NP)
teracopy 56 secs (ex. TeraCopy.exe Copy G:\folder1\ I:\folder2\)
fastcopy 60 secs (ex. fastcopy.exe /auto_close G:\folder1 /to=I:\folder2)

これは決して徹底的なテストではありませんが、このジャンルのより人気のあるツールのいくつかで簡単な現実世界のシナリオを投げると、xcopyまたはRobocopyのどちらかを(パフォーマンスの観点からのみ)非常に安全に使用できることがわかります。また、Robocopyオプション/NP(進行なし)を使用すると、時間を節約できます。ただし、xcopy以外のものを使用してもメリットがないというわけではありません。Robocopyは素晴らしい例です(Wikipediaより):

Robocopyは
、以下を含む、組み込みのWindows copyおよびxcopyコマンド以上の機能で注目に値します。

  • ネットワークの停止を許容し、以前に中断した場所からコピーを再開する機能(不完全なファイルには1980-01-01に対応する日付スタンプが付けられ、Robocopyが続行する場所を知るための回復レコードが含まれています)。
  • 多くの場合忘れられるコマンドラインスイッチを必要とせずに、デフォルトで属性、所有者情報、代替データストリーム、監査情報、およびタイムスタンプを正しくコピーする機能。
  • NTFS ACLを正しくコピーする機能(/ COPYALLが提供されている場合)、およびWindows NTの「バックアップ権」(/ B)をアサートして、管理者が読みやすさを拒否するファイルを含むディレクトリ全体をコピーできるようにします。
  • デフォルトでの永続性。ファイルを開けない場合は、プログラム可能な数の自動再試行を使用します。
  • 「ミラー」モード。ソースに存在しないファイルを宛先から削除することにより、ツリーの同期を維持します。
  • そうでなければ組み込みのXCOPYユーティリティをクラッシュさせる多数のファイルをコピーする機能。
  • 継続的に更新されるコマンドラインの進行状況インジケーター。
  • 256文字を超える長いファイル名とフォルダ名をコピーする機能(理論上の32,000文字まで)をエラーなしでコピーできます。

5

私は通常使用します:

robocopy source dest /E /MIR

またはパラメータのその他のバリエーション-おそらく/NFL /NDL /NS /NC /NP「静かな」


はい、/ NPはスピーディなロボコピーの必須アイテムです。
Ivo Looser

繰り返し作成するソースとまったく同じコンテンツを作成する場合は、Robocopyコマンドから/ MIRまたは/ PURGEを使用します。
イヴォルーサー

1

実際、ネットワークを排除することで、テストを本当に制限しました。ネットワーク共有の使用を検討することをお勧めします。これは、管理作業の大部分になります。

さらに、FTPを使用し、CIFSを完全にスキップする必要があります。Eseutil.exeは、そこに投入できる別のユーティリティです。(4つの依存dllとともに、他の場所で使用できるExchange util。)

次に、結果を確認したいと思います。


1

同じ目的でXCopyを使用しています。また、そのサーバーに別のNICを追加し、別のサブネットに配置しました。次に、ファイルの転送元のサーバーに直接接続しました。このようにして、2台のマシンはコピーされたデータを1つのサブネット経由で移動し、ユーザーはLANに直接接続されている2番目のNICを介してアクセスできます。


1

コピー元とコピー先は同じドライブにあると言いますが、どちらもビルドサーバーにありますか?

ビルドサーバーがソースと宛先の場所である場合は、1つのフォルダーまたは別のフォルダーを別のドライブ、おそらく別のコントローラーに移動することを検討してください。

ビルドサーバーがソースと宛先の場所ではない場合(ビルドドロップは常にビルド元のサーバー上にあるとは限りません)、ソースフォルダーと宛先フォルダーが存在するサーバーでタスクを作成することを検討してください。次に、そのタスクをリモートで開始します。


1

私は長年にわたっていくつかのコピーをしなければなりませんでした。1台のWindows Server 2008 R2マシンには、12Mを超えるイメージ(約400GB)を含む単一のディレクトリがあります。

明らかに私はそれがそのような大きなディレクトリではないことを好むでしょうが、

  • XCOPYは大きなフォルダのコピーを処理しますが、大きなディレクトリから移動しようとするとクラッシュします。
  • ROBOCOPYはコピーを問題なく処理し、コピーの進行状況インジケーターが優れているという点で、コピー時の操作性がはるかに優れています。
  • 小さなディレクトリでのXCOPYは高速です。

とにかく、本当に大きなディレクトリの異常な性質のために、私は彼らと私の経験を共有したいと思った。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.