先日、Windowsで初めてrobocopyコマンドを使ってファイルをコピーする機会がありました。
その際にファイルを速くコピーする方法を調べたので忘備録として記録します。
robocopyコマンドはファイルサーバ同士の同期を目的に作られたコマンドです。
robocoyは「Roubust File Copy」の略で確実なファイルコピーという意味を持ちます。
FastCopyなどと違いWindowsに標準装備としてインストールされています。
robocopyでは以下のコマンドでファイルをコピーすることができます。
robocopyのオプションはコマンドプロンプトで以下のコマンドを入力することで確認することができます。
今回は、その中でも代表的なオプションをいくつか紹介します。
個人的に使ってみた感じ上記のオプションさえしっていれば基本的には困りませんでした。
まずはオプションを変更してできる限りファイルを高速でコピーする方法を紹介します。
個人的に色々調べてみたところ以下のコマンドを使えばデフォルトでrobocopyコマンドを使うより、ファイルを速くコピーすることができました。
/Rや/Wオプションはデフォルト値が大きいのでかなり短くしています。
/MTオプションは環境によってチューニングが必要ですね。
今回、以下のようなディレクトリ構成で各フォルダに2KBのファイルを10000個ずつ入れて、コピーの毒度をrobocopyコマンドで計測してみました・
計測結果は、24.0555624秒でした。
ちなみに上記でコピーしたフォルダにもう一度同じフォルダをコピーしてみようとしたところ、0.3133898秒で終わりました。
/MIRのオプションが有効に働いていますね。
先ほどの計測結果よりも早くしようと思い調べてみたところ、startコマンドを使ったら早くなると書かれていたので試してみました。
一つのフォルダに対して一つのアプリケーションを起動してみます。
batファイルは以下になっています。
計測結果は、24.476545でした。
あれ早くない!?スレッドの数とか調整したら早くなるのかな…。
robocopyコマンドを使えばバックアップを速くできることが分かりました。
毎日や毎週のように短い頻度でバックアップをとっている場合、robocopyコマンドの/MIRオプションが有効に働くことも分かりました。
コピーコマンドで困った際は、ぜひrobocopyコマンドを使ってみてください。
その際にファイルを速くコピーする方法を調べたので忘備録として記録します。
robocopyの基礎
robocopyコマンドはファイルサーバ同士の同期を目的に作られたコマンドです。
robocoyは「Roubust File Copy」の略で確実なファイルコピーという意味を持ちます。
FastCopyなどと違いWindowsに標準装備としてインストールされています。
ファイルをコピーす方法
robocopyでは以下のコマンドでファイルをコピーすることができます。
robocopy コピー元 コピー先
robocopyのオプション
robocopyのオプションはコマンドプロンプトで以下のコマンドを入力することで確認することができます。
robocopy /?
今回は、その中でも代表的なオプションをいくつか紹介します。
個人的に使ってみた感じ上記のオプションさえしっていれば基本的には困りませんでした。
ファイルを高速でコピーする
まずはオプションを変更してできる限りファイルを高速でコピーする方法を紹介します。
個人的に色々調べてみたところ以下のコマンドを使えばデフォルトでrobocopyコマンドを使うより、ファイルを速くコピーすることができました。
robocopy コピー元 コピー先 /MT:8 /MIR /R:1 /W:1 /NP
/Rや/Wオプションはデフォルト値が大きいのでかなり短くしています。
/MTオプションは環境によってチューニングが必要ですね。
今回、以下のようなディレクトリ構成で各フォルダに2KBのファイルを10000個ずつ入れて、コピーの毒度をrobocopyコマンドで計測してみました・
C:\TEST
├─1
├─10
├─2
├─3
├─4
├─5
├─6
├─7
├─8
└─9
計測結果は、24.0555624秒でした。
ちなみに上記でコピーしたフォルダにもう一度同じフォルダをコピーしてみようとしたところ、0.3133898秒で終わりました。
/MIRのオプションが有効に働いていますね。
startコマンドを使ってより早くしてみる
先ほどの計測結果よりも早くしようと思い調べてみたところ、startコマンドを使ったら早くなると書かれていたので試してみました。
一つのフォルダに対して一つのアプリケーションを起動してみます。
batファイルは以下になっています。
start robocopy C:\test\1 C:\test2\1 /MT:1 /MIR /R:1 /W:1 /NP
start robocopy C:\test\2 C:\test2\2 /MT:1 /MIR /R:1 /W:1 /NP
start robocopy C:\test\3 C:\test2\3 /MT:1 /MIR /R:1 /W:1 /NP
start robocopy C:\test\4 C:\test2\4 /MT:1 /MIR /R:1 /W:1 /NP
start robocopy C:\test\5 C:\test2\5 /MT:1 /MIR /R:1 /W:1 /NP
start robocopy C:\test\6 C:\test2\6 /MT:1 /MIR /R:1 /W:1 /NP
start robocopy C:\test\7 C:\test2\7 /MT:1 /MIR /R:1 /W:1 /NP
start robocopy C:\test\8 C:\test2\8 /MT:1 /MIR /R:1 /W:1 /NP
start robocopy C:\test\9 C:\test2\9 /MT:1 /MIR /R:1 /W:1 /NP
start robocopy C:\test\10 C\test2\10 /MT:1 /MIR /R:1 /W:1 /NP
計測結果は、24.476545でした。
あれ早くない!?スレッドの数とか調整したら早くなるのかな…。
まとめ
robocopyコマンドを使えばバックアップを速くできることが分かりました。
毎日や毎週のように短い頻度でバックアップをとっている場合、robocopyコマンドの/MIRオプションが有効に働くことも分かりました。
コピーコマンドで困った際は、ぜひrobocopyコマンドを使ってみてください。