その他 ツール・ソフトウェア

RealSyncを使って自動ファイルバックアップシステムを作る

2013年8月3日

手動のバックアップだと、バックアップを取るのを忘れるので、自分の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にパスを追加しておく
system

バックアップするディレクトリや、バックアップ先を設定しておく。
RealSync では、コピー先のドライブのボリューム名が「更新先ボリュームラベルの照合」の所で、以下の様に指定できる。
一度、外出先のLAN環境に自宅と同じメーカーのNASが存在していて、全然知らないディスクに、コピーをし始めた事があった。自宅のボリューム・ラベルをユニークそうなものにして、「更新先ボリューム・ラベルの照合」をチェックしておいた方が良い。

fig1

2) RealSyncUtl を導入する

ダウンロードした、パッケージを展開して、RealSyncの導入ディレクトリにコピーする。

3)RealSync.dll を導入する。

ダウンロードしたパッケージを展開して、「SDK」のディレクトリより、RealSync.dll を抜き出して、RealSyncの導入ディレクトリにコピーする。

image

4) WOL.exe をダウンロードして、 RealSync の導入ディレクトリにコピーする。
これで RealSync のディレクトリは、以下の様な状況になる。
準備完了

5) コマンドラインから動作を確認してみる。

まずは、環境変数 PATH に、RealSync の導入ディレクトリへのパスを追加してコマンドラインから使いやすいようにしておく。
システムトレイのRealSyncのアイコンが、以下の状態が停止状態
image
RealSyncUtl –s で、更新を開始する。
image

アイコンの色は更新状態になる。
image

RealSyncUtl –t で更新が停止する。
image
アイコンの状態が停止状態になる。
image

コマンドラインの使い方は、非常に簡単だった。

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 strTargetAddress

strTargetIPAddress = "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
Next

End Function

スクリプトが完成したら、ダブルクリックで上手く動くか確認してみる。

7)スクリプトを Windowsのタスクに登録する。

スタートメニューから 「タスク スケジューラー」を探して起動。

タスクスケジューラー 

以下のようなツールが起動してくるはずです。
image

 

「基本タスクの作成」をクリック
基本タスクの作成

ウィザードが起動するので、指示に従う。まず、タスクに名前を付ける。
日次バックアップ

ここでは「毎日」を選択
トリガー毎日

夜中の0:00 には家に帰ってきて寝る前に仕事でPCを開けている事が多いので、0:00 に時刻を設定。
時刻設定

「プログラムの開始」を指定。
プログラムの実行

バックアップ用のバッチvbs を指定。もちろんvbsは事前に動く事をテストして確認しておく。
指定したプログラム

以上で完了。
完了

8)動作を確認してみる。

「タスクスケジューラー(ローカル)」をクリックして「アクティブなタスク」欄を確認すると、さっき作成した「日次バックアップ」があるはず。
確認1

右のバーに出てくる「実行」をクリックすると、その場で作成したタスクを実行できる。
確認2

-その他, ツール・ソフトウェア

Copyright© エンジニアの何でもメモ帳 , 2021 All Rights Reserved.