robocopyで外付けHDDにデータをミラーリング


  robocopy を使用して、ローカルHDD内のデータを外付けUSB-HDDにミラーリングした時の作業記録です。

【robocopy について】
 ”Robust File Copy(堅牢なファイルコピー)”  の略称で、ディレクトリやファイルの複製が行えます。
 Windows VISTA / WIndows Server 2008 以降から、OS標準で搭載されいるコマンドです。
 (構文やオプションなどは Microsoft の technet に)

 

 

 今回は、OS が Windows Server 2008 R2 、
 robocopy コマンドを Windows のタスクマネージャに登録して、OS起動時にタスク(robocopyコマンド)を実行する、という方式にしました。
 また、robocopy の実行結果ログも出力(/LOG+ オプション)するようにしています。
 (ログが貯まり続けてしまうので、90日経過後に削除するPowershell スクリプトを作成してログメンテするようにしました。 このOSは毎日再起動(これもタスクに登録)されるので、この スクリプト がOS起動時に実行されるよう、タスクに登録してます)

 

 robocopy のコマンドです。

robocopy E:\ H:\ /MIR /DCOPY:T /MON:1 /ZB /LOG+:C:\10.Robocopy-Log\robocopy.log /NP /XD "$RECYCLE.BIN" "System Volume Information" 

 今回は、
 ・ コピー元: E:\  (ローカルのHDD)
 ・ コピー先: H:\ (外付けのUSB-HDD)
 ドライブを丸ごとミラー( /MIR )してます。

 実行結果を 「C:\10.Robocopy-Log\robocopy.log」 という名称で出力、また、「$RECYCLE.BIN」「System Volume Information」ディレクトリはコピー対象外としています。
(ログを出力するディレクトリが存在しないとコマンドが失敗するので、事前に作成を)

 

 この robocpy コマンドがOS起動時に実行されるよう、タスクとして登録します。
 タスクの登録状況はこんな感じです。
 (サーバーマネージャー > 構成 > タスクスケジューラー > タスクスケジューラー ライブラリ)

 

 上記のタスク名称 「002.~」 が robocopy用のタスクです。
「全般」タブはこんな設定。

 

「トリガー」タブはこんなです。 5分の遅延起動にしています。

 

「操作」タブです。 上に記載した robocopy コマンドを登録してます。

 

「条件」タブ。

 

「設定」タブです。

 これで、OS起動時に robocpy コマンドが実行され、外付けUSB-HDDにミラーが作成されます。

 

 続いて、ログのメンテナンスです。

 今回は 「 C:\10.Robocopy-Log\robocopy.log 」 にログを出力(追記形式で保存 (/LOG+) )してます。
 このログを毎日のOS再起動のタイミングで、

 ・ robocopy.log  を 別のフォルダ(C:\10.Robocopy-Log\履歴\)にmove してリネーム(moveした日をファイル名に付与)。
 ・ 90日経過したログは削除する。

 上記の処理を行うPoweshellスクリプトを作成し、Windowsのタスクに登録します。
 今回はこんなPowershellスクリプトを作成。
( 「C:\01.Script_for_PowerShell\001.Del_robocopy-log.ps1」 で保存)

###
### 【このシェルについて】
### robocopy のログをOSの再起動毎にmoveして、90日経過したら削除する。
### ログの保管場所 C:\10.Robocopy_Log\robocopy.log
###
### STEP1) ログファイルを、再起動毎にmove。
###  移動元: C:\10.Robocopy-Log\robocopy.log
###  移動先: C:\10.Robocopy-Log\履歴\Robocopy_Log_yyyyMMdd
###    yyyy:西暦
###    MM:月
###    dd:日
###    HH:時
###    mm:分
###    ss:秒
###
### STEP2) 古くなったログファイルを削除。
###  作成から90日経過したものを対象。
###
###
###
### !このシェルは、OS再起動毎に、タスクスケジューラーによって実行されます。
###
###
### タスクの起動順:
### 003. robocopy.log のメンテナンス
###  ↑ OS起動後、3分後に起動
###
###  002. DS3200のデータをUSB-HDDにミラーリング
###  ↑ OS起動後、5分後に起動。
###
###
### 【履歴】
### YYYY.MM.DD 新規作成。
### YYYY.MM.DD あれとあれを修正。
###
###
### STEP0) robocopyを強制終了。
###  今回はOS起動後の実行なので、このステップはなし。
### stop-process -name robocopy


### STEP1) ログファイルを、再起動毎にmove。
###  移動元: C:\10.Robocopy-Log\robocopy.log
###  移動先: C:\10.Robocopy-Log\履歴\Robocopy_Log_yyyyMMdd

$TargetLogPath = "C:\10.Robocopy-Log\robocopy.log"    #robocopyのログを指定。
$BackupFolderPath = "C:\10.Robocopy-Log\履歴"     #移動先フォルダの指定。
$DateNow = (Get-Date).toString("yyyyMMdd_HHmmss")        #システム日時を変数 $DateNow に格納。
$BackUpLogName = "$BackupFolderPath\robocopy"  + "`_" + "$DateNow" + ".log"  #移動先ファイル名の指定。

###get-process robocopy 2> C:\001.PowerShell\001.Log\002.RobocopyResults_$DateNow.txt #robocopyプロセスの確認。存在しなければ、ファイルに出力される。

move-item -Path "$TargetLogPath" -Destination "$BackUpLogName"   #moveを実行。
###move-item -Path "$TargetLogPath" -Destination "$BackUpLogName" 2> C:\001.PowerShell\001.Log\001.MoveLog_$DateNow.txt #コピーを実行。エラーが出れば、ファイルに出力。



###
### STEP2) 古くなったログファイルを削除。
###  作成から90日経過したものを対象。
###
### $DeleteTime = "-n" n(分/min)。 n分経過したものを削除する。
###  30日 = 43200min (60min * 24hour * 30day)
###  90日 = 129600min (60min * 24hour * 90day)
### $DelFile : 削除対象。
###

            
$DeleteTime = "-129600"  #経過「分」を指定。1 = 1min。

### 作成日から $DeleteTime 分経過したものを削除。
foreach ($DelFile in (Get-ChildItem C:\10.Robocopy-Log\履歴\* | Where-Object {$_.CreationTime -lt (Get-Date).AddMinutes($DeleteTime)})) {Remove-Item -recurse $DelFile}


### 作成日から $DeleteTime 分経過したものを削除。エラーが出れば、ファイルに出力。
### foreach ($DelFile in (Get-ChildItem C:\10.Robocopy-Log\履歴\* | Where-Object {$_.CreationTime -lt (Get-Date).AddMinutes($DeleteTime)})) {Remove-Item -recurse $DelFile}

 

 このスクリプトがOS起動時に実行されるよう、タスクマネージャに登録します。 ( 「003.robocopy.logのメンテナンス」 )

 

「全般」タブ。

 

「トリガー」の設定。 3分の遅延起動です。(この処理が終わってから、robocopyのタスク -5分の遅延起動- を実行)

 

「操作」タブです。 以下のコマンドを登録。

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -Command C:\01.Script_for_PowerShell\001.Del_robocopy-log.ps1

 

「条件」タブです。

 

「設定」タブ。

 

 これで、毎日の再起動のタイミングで ログファイルも処理されます。

 

 今回の備忘録は以上です。

 

 

コメントを残す

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