手動のバックアップだと、バックアップを取るのを忘れるので、自分のNote PCから定期的に指定したフォルダのデータを外部ディスクにバックアップする仕組みを作ってみた。
自宅のLAN環境にあるNAS(Network Attached Disk) に対してコピーを実行し、自宅以外のLAN環境ではコピーに失敗する。
(自宅LAN環境に無い場合は、RealSync を停止させるとスマートだが、RealSyncは、失敗しても、エラーログが残っているだけなので、とりあえず良しとする)
必要なもの
RealSync 本体 (RealSyncUtility との兼ね合いから、1.7以上)
http://www.takenet.or.jp/~ryuuji/realsync/html/mailto.htm
RealSyncUtl (RealSyncをコマンドラインから実行するために必要)
http://www.takenet.or.jp/~ryuuji/realsync/html/utl.html
上記のRealSync.DLL (RealSyncUtility を実行するために必要 )
http://www.takenet.or.jp/~ryuuji/realsync/html/dll.html
WOLのツール(コマンドラインから WOL を実行するのに必要)
http://www.gammadyne.com/cmdline.htm#wol
作業手順
1) RealSync を導入する。
RealSyncをダウンロード、導入し、コマンドラインから実行できる用に環境変数PATHにパスを追加しておく
バックアップするディレクトリや、バックアップ先を設定しておく。
RealSync では、コピー先のドライブのボリューム名が「更新先ボリュームラベルの照合」の所で、以下の様に指定できる。
一度、外出先のLAN環境に自宅と同じメーカーのNASが存在していて、全然知らないディスクに、コピーをし始めた事があった。自宅のボリューム・ラベルをユニークそうなものにして、「更新先ボリューム・ラベルの照合」をチェックしておいた方が良い。
2) RealSyncUtl を導入する
ダウンロードした、パッケージを展開して、RealSyncの導入ディレクトリにコピーする。
3)RealSync.dll を導入する。
ダウンロードしたパッケージを展開して、「SDK」のディレクトリより、RealSync.dll を抜き出して、RealSyncの導入ディレクトリにコピーする。
4) WOL.exe をダウンロードして、 RealSync の導入ディレクトリにコピーする。
これで RealSync のディレクトリは、以下の様な状況になる。
5) コマンドラインから動作を確認してみる。
まずは、環境変数 PATH に、RealSync の導入ディレクトリへのパスを追加してコマンドラインから使いやすいようにしておく。
システムトレイのRealSyncのアイコンが、以下の状態が停止状態
RealSyncUtl –s で、更新を開始する。
RealSyncUtl –t で更新が停止する。
アイコンの状態が停止状態になる。
コマンドラインの使い方は、非常に簡単だった。
6) 自動でバックアップするスクリプトを作成する。
ここでは、autobackup.vbs というスクリプトを作成。
VBスクリプトの処理の流れは、
1)WOL.exe と言うフリーツールを使用して、Wake On LAN で NASを起動。
2) pingを打って、NASの起動を確かめる。
3)NASが起動していれば、 "RealSyncUtl -s"(コピースタート)を実行する。
'---------------------------------------
' Title: 自動バックアップ用スクリプト
' History: 2009/02/15 Yuhki
'---------------------------------------'WOL.exe を使用して Landiskを起動する。
Set objShell = WScript.CreateObject("WScript.Shell")
Set objExec = objShell.Exec("C:\Program Files\RealSync\wol.exe 12345678960AC")'LANDISK が起動するまで、120秒間スリープする(単位は、msec)
'Wscript.Echo "sleep します。"
'WScript.Sleep(120000)'LAN Diskに対して ping を実行
' Dim strTargetAddressstrTargetIPAddress = "192.168.11.10"
If GetPingResult(strTargetIPAddress) = False Then
'Wscript.Echo "pingが通らないので終了します。"
Wscript.Quit ' ping が失敗している場合はそのまま終了する。
End If'ping が通る場合は、LANDISK のある環境にあると判断して、RealSyncを実行する。
'Wscript.Echo "RealSyncを実行します。"
'RealSync を実行する。
'RealSync の更新を開始して、更新の終了を待たずにコマンドは返ってくる。
Set objShell = objShell.Exec("C:\Program Files\RealSync\RealSyncUtl.exe -s")'終了
WScript.Quit'-----------------------------------------
' ping 実行関数
' 戻り値: ping 成功 True
' ping 失敗 False
'-----------------------------------------
Function GetPingResult(strTarget)Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set objPingResult = objWMIService.ExecQuery _
("Select * from Win32_PingStatus " & _
"Where Address = '" & strTarget & "'")For Each Ping in objPingResult
If Ping.StatusCode = 0 Then
GetPingResult = True
Else
GetPingResult = False
End If
NextEnd Function
スクリプトが完成したら、ダブルクリックで上手く動くか確認してみる。
7)スクリプトを Windowsのタスクに登録する。
スタートメニューから 「タスク スケジューラー」を探して起動。
ウィザードが起動するので、指示に従う。まず、タスクに名前を付ける。
夜中の0:00 には家に帰ってきて寝る前に仕事でPCを開けている事が多いので、0:00 に時刻を設定。
バックアップ用のバッチvbs を指定。もちろんvbsは事前に動く事をテストして確認しておく。
8)動作を確認してみる。
「タスクスケジューラー(ローカル)」をクリックして「アクティブなタスク」欄を確認すると、さっき作成した「日次バックアップ」があるはず。