forfiles と robocopy を使って遠隔地バックアップ

先日のエントリ 大容量ファイルのネットワーク越しのコピー の解決のために
Windowsリソースキットに付属のROBOCOPYを使ってみるテスト

–2009/06/19追記–

相変わらず、参考は@ITです
forfilesコマンドで条件に合うファイルを取り出して処理する
robocopyでフォルダをバックアップ/同期させる

使用しているオプションは単純なものですので、リトライとかもっと詳しく設定する必要があるかも

forfiles /P R: /M *.bkf /D 0 /C "cmd /c robocopy R: c:backupdata @file /LOG+:c:backuplogTodayBAT.log

 

上記コマンドは2つの部分に分けることができます
まずは、バックアップ対象ファイルの絞り込み
 forfiles /P R: /M *.bkf /D 0 /C "cmd /c
順番に使用しているオプションを説明すると
 /P [検索対象パス] ここではR:ドライブが対象
 /M [ファイルパターン] ここでは*.bkf のファイルが対象
 /D [日数] 0を指定すれば当日作成&更新されたファイルのみが対象になります
 /C "cmd /c [コマンド文字列] 検索したファイルに対して実行するコマンド文字列
 @file 上記条件で抽出されたファイルが指定される

次にコピー用のコマンド
 robocopy R: c:backupdata @file /LOG+:c:backuplogTodayBAT.log
 [コピー元ディレクトリパス] ディレクトリのみ指定する ファイル名は指定しない
 [コピー先ディレクトリパス] 上記と共にドライブ名からの絶対パス指定が良いかも
 [対象ファイル名パターン] 例では @file としていますが、これは forfiles コマンドで抽出されたファイルが対象になるということです
 /LOG+:[ファイル名] ”追記モード”で指定したファイルにログを出力します

robocopyはxcopyやcopyコマンドと違って、コピー元ファイル名の指定は
コピー元フォルダ名とは別で指定しなきゃいけないことに注目ですね
私がやりたかったバックアップ方式は、
「バックアップ先に確実にバックアップしたいけど、当日以外のファイルは(容量の関係から)バックアップ先には保存したくない」
という要求があったので、面倒な記述になってます

ちなみに forfiles.exe robocopy.exe は %WINDIR%system32 ディレクトリに放り込んでおくとよいです

って、このエントリを書いてる時点ではテスト環境でしか動かしていません
ちゃんと動いてくれて毎日のリカバリ実行をお客様にしていただかなくても良いようになるといいなぁ…

–追記–
ちゃんと動いてくれました(>▽<)ゞ
リトライとかスイッチを追加して使ってます

エラーした場合の処理とかについては
・バッチファイル上でエラー判断処理(IF ERRORLEVEL 1)してから
 そのエラー処理でwindowsのイベントログにエラーを出す
・イベントトリガ(eventtriggers)でそのエラーを監視し、エラーがあったら再実行をかける
という方法で何度もリトライしています 永久機関ですね
実際にはイベントログを毎日目視確認しているので大量のエラーが吐き出されていたら、問題解決を行います

eventtriggers については別エントリにて。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です