バックアップは「robocopy」コマンドを巧みに活用しよう。

robocopyは今では標準でWindowsに入っているコマンドだ。Windows Server 2003の頃は、別途ソフトを入れないといけない時期があったけれども。
robocopyについて、色々なオプションスイッチが用意されており、色々なルールでバックアップ(同期、差分コピー、増分コピー、アクセス権限だけコピー等)ができる。DOSコマンド(Windowsキー+R)から、「cmd」とうち、「robocopy /?」とヘルプコマンドを打てば、何ができるかわかる。

とはいっても、このウェブサイトにアクセスしに来られる方は、手抜きで、「コマンド例が今欲しいんだ」という方が見に来ていると思うので、それにこたえよう!

 

実用度を高めるため、毎日のログが出力できるように工夫している。「date」コマンドでは、例えば、「2015/03/18」と表示されるため、ファイル自体には「/」が使えないため、部分的に抜き出しては、「-」でつなげるという方法を凝らしたのが、set LOGFILE部分。ログデータは、E:LOGフォルダに格納。
データは、E:2001フォルダから、F:2001フォルダへのコピーを想定。

NTFSアクセス権限で制御している場合には、「/SECFIX」スイッチをつける必要がある。

 

今回利用したスイッチを簡単に説明しよう。

/MIR  ディレクトリ ツリーをミラー化します (/E および /PURGE と同等)。コピー元にないフォルダやファイルは削除されます。
/R:n 失敗したコピーに対する再試行数: 既定値は 1,000,000
/W:n 再試行と再試行の間の待機時間: 既定値は、30 秒です。
※ /R:0 /W:0 →何かの不具合によりコピーが失敗したりリトライを無視する場合に利用
/LOG+:file ログファイルに状態を出力します (既存のログ ファイルに追加します)
/TS 出力にコピー元ファイルのタイム タンプを含めます。
/FP 出力にファイルの完全なパス名を含めます。
/TEE コンソール ウィンドウとログ ファイルに出力します。
/COPYALL ファイル情報をすべてコピーします (/COPY:DATSOU と同等)。
/SECFIX スキップしたファイルも含むすべてのファイルのファイル セキュリティを修正します。
/XO 古いファイル(一度コピーした後、更新されていない改編が無いファイル)を除外します。
/NP 進行状況なし – コピーの完了率を表示しません。
/NDL ディレクトリなし – ディレクトリ名をログに記録しません。
/XA:SH 隠しファイルとシステムファイルを除外します。
/TEE コンソール ウィンドウとログ ファイルに出力します。

※ボリューム(ドライブごと)の同期等になった場合には、ゴミ箱までもがコピーされてしまうため、
「/XD “$RECYCLE.BIN” “System Volume Information”」をつけて除外するのが望ましい。

rem —- フォルダ毎コピー《新規》 —-

rem コピー元のフォルダを設定。ネットワークドライブの場合は、\\~\
set COPYFROM=”E:\02001″

rem コピー先のフォルダを設定。ネットワークドライブの場合は、\\~\
set COPYTO=”F:\02001″

rem 日付(年-月-日)のログファイルを作成。/LOG+により追記。
set LOGFILE=”E:\LOG\%date:~0,4%-%date:~5,2%-%date:~8,2%_robocopy_new.log”

rem 同期します。
robocopy “%COPYFROM%” “%COPYTO%” /MIR /R:0 /W:0 /LOG+:”%LOGFILE%” /TS /FP /NP /TEE

pause

 

rem —- フォルダ毎コピー 《増分》 —-

rem コピー元のフォルダを設定。ネットワークドライブの場合は、\\~\
set COPYFROM=”E:\02001″

rem コピー先のフォルダを設定。ネットワークドライブの場合は、\\~\
set COPYTO=”F:\02001″

rem 日付(年-月-日)のログファイルを作成。/LOG+により追記。
set LOGFILE=”E:\LOG\%date:~0,4%-%date:~5,2%-%date:~8,2%_robocopy_update.log”

rem 差分コピーします。</X0>
REM robocopy “%COPYFROM%” “%COPYTO%” /MIR /R:0 /W:0 /XO /LOG+:”%LOGFILE%” /TS /FP /NP /TEE /COPYALL

rem 増分コピー
robocopy “%COPYFROM%” “%COPYTO%” /E /R:0 /W:0 /XO /LOG+:”%LOGFILE%” /TS /FP /NP /TEE /COPYALL /SECFIX

pause