こんにちは、阿久津です。昨日は少し自由時間が確保できましたので、以前から気になっていた古いHDD(ハードディスクドライブ)の整理を行いました。そで机の引き出しのなかには250GBクラスのHDDがホコリをかぶって寝ている始末。数TB(テラバイト)クラスのHDDが一般的になった今では、実験用ですら役に立ちません。
もちろん複数のディスクを束にするJBODを用いれば、1TBのストレージを確保できますが、各HDDの消費電力や排熱のことを考えれば、新たに数TBのHDDを新規購入した方が得策です。また、なかにはパラレルATAという数世代前のインタフェースを備えたHDDも多数存在していました。
筆者の環境では、リムーバブルケースを用いたHDD切り替え環境を残しています。そろそろ破棄したいものの、参照頻度の低いデータを現在のメインストレージであるNASに保存するのも無駄な話。そう思いつつ今回の整理に至りました。古いデータの多くが同ケースに納めたHDDに保存されているため、一度データを取り出さなくてはなりません。その一方で裸体のまま保管していたHDDの内容も、一度確認しないと捨てるのも怖い話です。それはUSB変換アダプタを用いて、一台一台確認していきました。
大多数はそのまま破棄することになりましたが、問題はサルベージしたいデータが残っていたケース。任意のディスク上に一時保存フォルダーを作成し、そこにエクスプローラーからファイルやフォルダーを選択して、ドラッグ&ドロップ。後はコピーが完了するまで待つだけとなりますが、いちいちこの操作を繰り返すのは少々骨の折れる作業です。
Windows 7には、従来のWindows OSではリソースキットの一ツールとして提供されていた「Robocopy」というコマンドラインツールが標準環境で使用できるのをご存じでしょうか。本来はクライアントとサーバの間で特定フォルダーの同期を取るためのツールとして用意されましたが、前述のようなケースにも向いています。
今回のチューニングは、このRobocopyコマンドを使用したバッチファイルの作成と使用方法をお届けしましょう。
1.メモ帳を起動します。
2.囲み01の内容を入力します。
3.任意のファイル名を付けて保存します。
これでチューニングが終了しました(図01~04)。
それでは動作を確認してみましょう。バッチファイルをダブルクリックやコマンドプロンプトから実行しますと、コピー元ドライブが存在しない場合はエラーメッセージを出力し、同ドライブが存在する場合はコピー処理が始まります。各ドライブ文字やパスは環境に合わせて変更してください(図05~07)。
さて、Robocopyコマンドのオプションを確認しましょう。今回は空のフォルダーはコピー対象から除外するオプション「/S」を使用しています。空のディレクトリを含む場合は「/E」に変更してください。
オプション「/R」および「/W」ですが、前者はコピー失敗時の再試行回数を指し、後者は再試行を繰り返す際の待機時間を指します。今回は再試行回数を最小限の「1」としていますが、古いHDDなどを対象する場合は「3」から「5」ぐらいまで増やしておくといいでしょう。
オプション「/B」はバックアップモードを意味し、Robocopyコマンドの特徴とも言える再起動可能モードを抑制しています。同機能はネットワーク共有など、インフラが不安定な場合に自身を再起動してコピーを続行するためのオプションですが、今回のようなケースでは使用しません。
オプション「/MT」および「/DCOPY」ですが、前者はマルチスレッドコピーの実行数を指し、初期状態では8スレッドを使ってコピー処理を使用しますが、今回は最大値を指定しました。これにより処理速度が若干向上しますが、コピー中にコンピューターを操作する場合はフォアグラウンドアプリケーションに悪影響を及ぼす場合がありますので、その際は取り除いてください。後者はフォルダーのタイムスタンプを維持するためのものです。そのままお使いください。
最後のオプション「/XD」は、コピー対象から取り除くフォルダーを指定しています。ドライブ情報や一部のシステムファイルを保存する「System Volume Information」フォルダーや、ごみ箱フォルダーの実体である「$RECYCLE.BIN」フォルダー(「Recycled」は古いWindows OSで使用)を取り除きました。
Robocopyコマンドのオプションは、コマンドプロンプトから「robocopy /?」で確認できます。今回のバッチファイルは古いストレージからデータをローカルディスクにサルベージするために作成しましたので、読者のスタイルや使用ケースにあわせて変更してください。なお、コピーの内容はデスクトップに「Copy.log」として生成されます(図08)。
それでは、また次号でお会いしましょう。
阿久津良和(Cactus)
囲み01
@echo off
setlocal
set RC=robocopy.exe
set SRC=N:
set DST=E:\Work
set LOG=%USERPROFILE%\Desktop\Copy.log
set OPT=/S /R:1 /W:0 /B /MT:128 /DCOPY:T /LOG:%LOG% /XD "System Volume Information" "$RECYCLE.BIN" "Recycled"
if not exist %SRC% goto error1
if not exist %DST% mkdir %DST%
%RC% %SRC% %DST% %OPT%
goto end
:error1
echo コピー元となる %SRC% が存在しません。
goto end
:end
endlocal