DHCP サーバの自動バックアップ

Windows 2003 のDHCPサーバの管理者なら、管理コンソールから右クリックでDHCPデータのバックアップが取れるのは誰でもご存知かと思う 。これでもWindows2000のころはサービスを止めないと取れなかったという事実からすれば改善はされている。

だが、障害対策という意味では、できれば定期的に自動でバックアップを取っておきたいのが管理者というもの。

そこで、「同期バックアップ」を利用することにした。私も耳慣れない言葉だったが、%systemroot%\system32\dhcp\backup にそれらしいものが存在していることは知っている方も多いと思う。ただ、公式資料がないと他人に説明しづらいのでいろいろ探したが googleとかで検索しても実際あまり見かけない。なんとか1つ見つかったのが Technet のこのドキュメントだった。
http://technet.microsoft.com/ja-jp/library/cc738987%28WS.10%29.aspx より引用すると。


* 同期バックアップは、DHCP サービスの実行中に行われます。同様に、非同期 (手動) バックアップを実行する場合、データベースを新しいサーバーへ移動するとき以外、DHCP サービスを停止する必要はありません。詳細については、「DHCP データベースを別のサーバーに移動する」を参照してください。
* バックアップ フォルダの場所はローカル パスである必要があります。



* このトピックでは、DHCP データベースとそのバックアップ ディレクトリが既定のドライブとパスにあることを前提としています。
* 既定の自動データベース バックアップ間隔は 60 分です。自動バックアップ間隔は、次のレジストリ キーを使って変更できます。
   HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DHCPServer\Parameters\BackupInterval


このファイルが常用系サーバのローカルに保管されるので、予備系でファイルを吸い上げればよいことになる。

そこで以下のようなスクリプトを予備系サーバへ dhcp-getbk という名前でタスクに登録した。当然、名前は任意で構わない。タスクで処理するのでメッセージは表示されないがデバッグ用と思ってほしい
'DHCPサーバ バックアップ取得スクリプト

Const STOREPATH = "D:\DHCP-autobk" '予備系サーバの作業用領域
Const REMOTEPATH = "\\常用系サーバ\c$\Windows\system32\dhcp\backup" '同期バックアップが取られる場所

Set objWshShell = WScript.CreateObject("WScript.Shell")
Set objFS=Wscript.CreateObject("Scripting.FileSystemObject")

'ファイルにアクセスできるか?
If not objFS.FileExists(REMOTEPATH & "\dhcpcfg") then
 Wscript.Echo "ファイルにアクセスできません"
 Wscript.Quit False
End If

On Error Resume Next
objFS.CopyFile REMOTEPATH & "\dhcpcfg" , STOREPATH & "\Dhcpcfg" , true
objFS.CopyFile REMOTEPATH & "\new\*.*" , STOREPATH & "\new" ,true

If Err Then
 Wscript.Echo "コピーに失敗しました"
 Wscript.Quit False
Else
 set objFS = nothing
 set objWshShell = nothing
 Wscript.Echo "コピー完了"
 Wscript.Quit true
End If


スケジュール登録が、正面切って1時間単位では登録できないで、ちょっとひと工夫。

設定画面

計画的にDHCPサーバを切り換える時には手動バックアップしてからの方がよい。DHCPのリース内容も予備機に引き継げるので、IP払い出し時の衝突をそれだけ防ぐことができる。通常どこでも払い出し前にICMPでチェックするよう構成されていると思うが、ログが汚れないためにもオススメ。

戻る