robocopy “/compress”で高速化!その効果に迫る

Windows全般
スポンサーリンク

robocopyコマンドには、近年「/compress」オプションが追加され、これを使うとデータの圧縮転送によりコピー時間を短縮できます。実験では、約1GBのファイルコピー時間を61%減になる効果が確認できました。ただし、コピー元・先のOSのバージョンに条件があります。詳しく解説していきます。

robocopyは圧縮転送が可能!ただし…

近年のバージョンにおいて、robocopyコマンドで「/compress」オプションをつけると、データを圧縮しながらコピーすること(SMB圧縮)で転送時間を短縮できます。

例)コピー元 → コピー先 へファイルを圧縮しながらコピーする
robocopy \\192.168.50.101\share c:\test /E /compress

ただし、コピー元・コピー先ともにWindows 10 バージョン 2004 以降(または Windows 11 / Windows Server 2022 以降か)という条件があるようです。なので例えば、最新バージョンのWindows 10で上記のコマンドを使っても、コピー相手がWindows Server 2019以下の場合は、圧縮転送が有効にならず通常のコピーになるようです。

高速化の効果

/compressオプションの有無でどのくらいコピーが高速化するか、実験環境で試した結果です。下のように、61%減という結果になりました。

/compressオプションなし
の転送時間
/compressオプションあり
の転送時間
1分20秒31秒(61%減)

対象ファイルは、約927MBのメモリダンプファイルです(タスクマネージャーで適当なプロセスで「ダンプファイルの作成」したもの)。このファイルを普通にZIP圧縮した場合のサイズは269MBですが、素のファイルでコピーしています。コピー元・先ともにWindows 10 21H1で、100Mbpsのネットワークで接続されている想定です(仮想化環境で疑似的に構成)。

「ZIP圧縮してからコピーすればいいのでは?」と思った方向けに、簡単に比較してみました。上記のケースでは、ファイルのZIP圧縮(1分10秒)+ ファイルのコピー(23秒) + ZIP解凍(5秒)= 合計1分38秒 となりました。圧縮・解凍処理の操作時間を含めていませんが、それでも普通にコピーするより遅くなっていますね…。

/compressオプションを使った転送の方が、圧倒的に速いと言えます。

どんなシーンで有効か

サイズが巨大かつ、圧縮によって小さくなるファイルの転送で有効です。例えば仮想ハードディスクファイル(VHDX, VMDKなど)、ISOイメージファイル、データベースのデータファイル、メモリダンプファイルといったものです。

たとえばシステムリプレースで、データベースのデータファイルなどを旧環境から新環境へ移行する場合に活用できるのではないでしょうか。移行スケジュール上、作業時間がシビアだったりしますので。

一方で、すでに圧縮されたデータはほとんど高速化が見込めません。前述の環境で、圧縮済のZIPファイルを /compress オプションありでコピーした場合、転送時間はほぼ変わりませんでした。

/compress が効くか調べるには

/compress オプションを指定しても、コピー相手が条件を満たさない場合は、圧縮転送はされません。対象の環境で圧縮転送が効くかどうかテストするには、以下コマンドでダミーファイルを作成し、実際にコピーしてみると簡単です。

1GBのファイルとして、C:\test\file.dat を作成する
  → 1(GB)×1024(MB)×1024(KB)×1024(Byte) = 1,073,741,824 Byte

fsutil file createnew C:\test\file.dat 1073741824

fsutil コマンドで作成したファイルは、「0」で埋め尽くされたデータですので、圧縮がものすごく効きます(1GBファイルをZIP圧縮すると、1/1000くらいのサイズになります)。なので、圧縮転送が有効になっていれば、1秒~数秒でコピーが終わるはずです。

前述の環境では、通常の転送時間が1分30秒なのに対し、/compressオプションが有効な場合は1秒で転送完了しました。これで判断するのが簡単そうです。

fsutilコマンドについては以下の記事で解説していますので、参考までに。

フィードバック

フィードバック

コメント

タイトルとURLをコピーしました