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のネットワークで接続されている想定です(仮想化環境で疑似的に構成)。
どんなシーンで有効か
サイズが巨大かつ、圧縮によって小さくなるファイルの転送で有効です。例えば仮想ハードディスクファイル(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コマンドについては以下の記事で解説していますので、参考までに。
おわりに
今回の記事は以上です。
当サイトでは、ITインフラ関連の知識やノウハウをメインに紹介しています。下の関連記事にも役立つ情報があるかもしれませんので、ぜひご覧下さい。
また、知識やノウハウを効率的に学ぶ方法として、Udemy の「ながらセミナー」もおすすめです。三日坊主にならず、普段の生活の中でスキルアップする方法です。これについては下の記事で紹介していますので、良ければご覧下さい。
最後まで読んでいただき、ありがとうございました。
フィードバック
あなたが抱えている疑問や悩みは解決できたでしょうか?当ブログではそれを最重視しています。今後もあなたの役に立つ情報を提供するために、ぜひ教えて下さい。
コメント