Robocopyでバックアップ/ミラーリングを行う

Robocopyはリモートのサーバ同士でフォルダを同期させる事が出来るコマンドです。
Windows2003ではResource Kitに同梱されておりますが、バージョンが古いので新しいバージョンを利用した方が良いです。
尚、Robocopyは『Robust File Copy』の略で、けしてロボットから来ているものではないです。

今回利用するRobocopyのバージョンはXP026で、古いバージョンはXP010となります。
XP010では『/DCOPY:T』が使えないなどがありますので、新しいバージョンを利用しましょう。

今回の仕様

・robocopy XP026を利用し、バックアップ元とバックアップ先をミラーリング。
・コピー(ミラーリング)に失敗しても再試行を行わない
・コピー(ミラーリング)は主にタイムスタンプを判定材料とする
・処理内容のログをYYMMDDhhmm.logとして吐き出す。
・処理後、ログファイルの内容を含めてメール送信
・メール送信ソフト(smail.exe)はc:\smail配下に設置を想定。変更が必要な場合は、パスを変更

 

準備

UtilitySpotlight2006_11.exeのダウンロード

以下のサイトからrobocopy XP026をダウンロードします。

http://technet.microsoft.com/en-us/magazine/2006.11.utilityspotlight.aspx

※%windir%system32以下にrobocopy XP026がインストールされる。
※Windows2003の場合Resource Kitに同梱されているが、バージョンが古いので使わない。

SMAILのダウンロード

以下のサイトからsmail.exeをダウンロードします。

http://dip.picolix.jp/disp2.html

※送信専用コマンドラインメールソフト

設置

・robocopy_backup.bat
※参照元:https://gist.github.com/t2psyto/5675962

[text]

@echo off

rem パックアップパラメータ バックアップ元/先「SRC → DEST」
set SRC=C:\backup_data
set DEST=\\server\share

rem timestamp -> YYMMDDhhmm
rem 時刻1桁のゼロ埋め ex) " 9:00″ -> “09:00″
set timetemp=%time: =0%
set timesec=%timetemp::=%
set now_date=%date:/=%
set timestamp=%now_date%_%timesec:~0,4%

rem ログファイル
set LOGFILE=C:\backup_log\%timestamp%.log

rem バックアップ実行
robocopy.exe %SRC% %DEST% /ZB /NFL /NDL /NP /LOG:"%LOGFILE%" /R:0 /W:1 /MIR /COPYALL /DCOPY:T /E

rem /ZB  : 再起動可能モードを使用し、アクセスが拒否された場合はバックアップモードを使用する
rem /NFL : ファイル名をログに記録しない
rem /NDL : ディレクトリ名をログに記録しない
rem       ※ /NFL /NDL 指定すると、正常コピーorスキップファイルは表示しない。
rem       ※ エラーファイルorコピー先にのみ存在するファイルは表示する。
rem /NP  : コピーの完了率を表示しない
rem /LOG : ログファイルに状態を出力する(既存ファイルを上書く)
rem /R:0 : コピーが失敗した場合の再試行数を指定する(既定値:1,000,000 回)
rem /W:1 : 再試行の間の待機時間を指定する(既定値:30 秒)
rem /MIR : ディレクトリツリーをミラー化する
rem /COPY:Flag : ファイルにコピーする情報を指定する(既定値は/COPY:DAT)
rem          コピーフラグ D データ, A 属性, T タイムスタンプ, S セキュリティ(NTFS ACL),O 所有者情報, U 監査情報
rem /COPYALL   : ファイル情報をすべてコピーする(=/COPY:DATSOU)
rem /DCOPY:T : ディレクトリにコピーする情報を指定する(既定値は/DCOPY:DA)
rem          コピーフラグ D データ, A 属性, T タイムスタンプ
rem /E   : 空のディレクトリを含むサブディレクトリをコピーする
rem /FFT タイムスタンプ精度を2秒としてコピーする(FATなどに利用)

rem メール通知パラメータ
set MAIL_FROM="robocopy_backup <robocopy_backup@example.com>"
set MAIL_TO=backup@example.com
set SMTPHOST=mail.example.com
set SUBJECT="バックアップ通知 %timestamp%"

rem メール通知コマンド(smail)
rem require smail.exe ( http://dip.picolix.jp/disp2.html )
c:\smail\smail.exe -h%SMTPHOST% -f%MAIL_FROM% -s%SUBJECT% -F%LOGFILE% %MAIL_TO%

 

[/text]

・プログラム内の「SRC(バックアップ元)」「DEST(バックアップ先)」を編集
・ログファイルの吐き出し先を編集
・メール通知パラメータを編集