2015年6月7日日曜日

robocopyを使ったハードディスクのバックアップスクリプト

以前Buffalo製のNASを使っており、そんなに安くもない値段がしたNASだったが、1年ちょっとで起動しなくなった。そのNASはUSBを繋げばバックアップを取得できる仕様だったのでデータロストはしなかったが、BuffaloのNASは二度と使わないと心に決めた瞬間だった(といいながら、現状はBuffalo製のUSBハードディスクにデータを保存している)。

データロストを恐れて、さらにもう1つUSBハードディスクを買って、気が向いたら手動でUSBハードディスク間のコピーを実施する運用にしているが、その際に、手作業でコピーするのは面倒なので、Windows標準で使えるrobocopyコマンドを使ってスクリプトを作っておくことにした。

スクリプト内容

先にスクリプトの中身を見せてしまうと、以下のようになる。極めてシンプルだが、差分コピーでコピー元(SRC)とコピー先(DST)をミラーリングできるスグレモノ。タイムスタンプもディレクトリ含めてきちんと一致してコピーされる。

-------------------ここから
@echo off
set SRC=d:\
set DST=z:\

echo %SRC%→%DST%のミラーリングを開始します。
pause

set TODAY=%DATE:/=%
robocopy %SRC% %DST% /MIR /DCOPY:T /R:1 /W:5 /XD "System Volume Information" "$RECYCLE.BIN" > d:\copy_%TODAY%.log

echo %SRC%→%DST%のミラーリングが終了しました。
pause

exit 0
-------------------ここまで

スクリプトのログ

これを実行すると、以下のようなログが出力される(以下ログは表示用に少し整形済み)。2回目以降は差分コピーなので、変更が少なければかなり短い時間でコピーは終わる。

ログの最後には、結果のサマリが表示され、ファイル数・スキップ数(同一ファイルが存在)・失敗数(何らかの理由でコピー失敗)などが確認できる。

-------------------ここから

------------------------------------------------------------
   ROBOCOPY     ::     Windows の堅牢性の高いファイル コピー                            
------------------------------------------------------------

  開始: Sun Jun 07 17:31:36 2015

   コピー元 : d:\
     コピー先 : z:\

    ファイル: *.*
 
 除外ディレクトリ: System Volume Information
   $RECYCLE.BIN
 
  オプション: *.* /S /E /COPY:DAT /DCOPY:T /PURGE /MIR /R:1 /W:5

------------------------------------------------------------

                   3 d:\
    新しいファイル   338   copy - コピー.bat  0%  100%
    より新しい         299   copy.bat              0%  100%
    より新しい            0   copy_20150607.log 0%  100%

               … (中略) …

                   2 d:\temp\

------------------------------------------------------------

                  合計     コピー済み      スキップ       不一致        失敗    Extras
   ディレクトリ:      3198         0      3198         0         0         0
     ファイル:     83816         3     83813         0         0         0
      バイト: 532.962 g       637 532.962 g         0         0         0
       時刻:   0:00:03   0:00:01                       0:00:00   0:00:02


       速度:                 619 バイト/秒
       速度:               0.035 MB/分

       終了: Sun Jun 07 17:31:39 2015

-------------------ここまで

robocopyの説明

robocopyコマンドはオプションが多数存在するが、今回使用しているコマンドのオプションについて簡単に説明する。

◆コマンド
robocopy %SRC% %DST% /MIR /DCOPY:T /R:1 /W:5 /XD "System Volume Information" "$RECYCLE.BIN" > d:\copy_%TODAY%.log

◆使用オプション
/MIR : MIRRORの意味。全てのファイルのコピーと削除を行いディスクの内容を同一にする
/DCOPY:T : ディレクトリのタイムスタンプのコピー
/R:1 : Retry回数。省略すると100万回繰り返すので必ず指定することを推奨
/W:5 : リトライ時にWaitする時間。省略すると30秒
/XD : eXclude Directoryの略と思われる。コピー除外フォルダを指定する。

参考URL

Robocopy
https://technet.microsoft.com/ja-jp/library/cc733145%28v=ws.10%29.aspx