Windows 2000/XP, Windows Server 2003でバックアップを自動実行



 Windows 2000以降に標準搭載のバックアップユーティリティ「NTBACKUP」は、Windows NT 4.0までとはまったく異なる機能とユーザインターフェイスを持っています。このツールをいかに使いこなすかがシステムの安定運用のポイントとなります。



 ここではNTBACKUPをタスクスケジューラ(タスク)を使って自動実行するためのテクニックと、具体的なバッチファイルを紹介します。バックアップデバイスにはオートチェンジャではないDDSドライブを想定しています。バッチファイルの実行には一部リソースキットのコマンドを使用していますので、事前に入手するか同等の機能を持ったコマンドを別途用意してください。

用語解説
  • ライブラリ
    テープドライブのこと。今回はDDS (DAT)を使っています。
    1本しかテープが入らなくてもライブラリと呼ぶので、ものすごく違和感があります。

  • ライブラリ名
    テープドライブの内部的な識別名。
    NTBACKUPをGUIで実行すると、テープドライブの名前が「4mm DDS」のように表示されますが、これは人間にとっての識別名です。

  • コンテナID
    オートチェンジャがないので、ここではテープドライブのIDと同じ意味になります。
    同じ型のテープドライブが複数あっても、異なるIDが割り当てられるのでちゃんと使い分けられます。

  • PMID
    物理メディア(Physical Media)ID。
    テープメディアには、1本ずつ異なるIDを付けて区別します。
    システム的には、これで前日のテープに勝手に上書きして消してしまうといった事故が防げるはずですが、「上書きしますか?」と聞かれて反射的に「はい」を押してしまうのは防げません。

  • バックアップセット
    複数のテープを関連づけてまとめたもの。
    例えば「デイリー」「ウィークリー」「マンスリー」とかです。
  • ボリュームシャドウコピー
    ファイルやフォルダの変更中でも、バッティングしないようにバックアップする技術。
    たとえば文書ファイルAの編集中でも、NTBACKUPはファイルAを正常に読み出すことができます。
    ファイルAの変更差分はディスクの空き領域に書き込まれ、シャドウコピーの終了後にファイルAに反映されます。
ライブラリのイメージ図

目的別のコンテナ(カートリッジ)にテープをいっぱいセットして、そのコンテナを複数ライブラリ(ドライブ)にセットします。
オートチェンジャ付きDDSだと、ちょうどこんな感じになります。

メディア
1 (MON)
メディア
2 (TUE)
メディア
3 (WED)
メディア
4 (THU)
メディア
5 (FRI)

コンテナ 1(デイリー)
メディア
1 (1W)
メディア
2 (2W)
メディア
3 (3W)
メディア
4 (4W)

コンテナ 2(ウィークリー)

ライブラリ(テープドライブ)

単体のDDSドライブでは、コンテナもライブラリも物理的には同じものになります。
メディアを1本格納できるコンテナを、固定で1台搭載したライブラリ、と考えればよいでしょう。
自動バックアップの問題点−メディア交換時の認識

Windows 2000 SP1以前(SP1を含む)のNTBACKUPは結構賢くて、前に使ったメディアのPMIDをずっと覚えていてくれます。
つまり、どのテープメディアを使ったか、1本ずつ識別して記憶しているということです。

ところが、

過ぎたるは及ばざるがごとし


です。記憶力が良すぎて、オートチェンジャではないDDSドライブを使ってNTBACKUPをスケジュール実行すると、前回使ったPMIDを今回も使おうとします。
毎日1本ずつテープを取り替えながらバックアップしようとすると、しっかりと前回使ったメディアのPMIDを覚えているために、

もしもし? 前に使ったテープがないんですけど?


となって、結局バックアップは失敗してしまうのです。

そのようなわけで、 NTBACKUPを実行する前にメディアの交換を教えてやる必要があるのです。

この問題は、Windows 2000 Service Pack 2以降で修正されています。Windows XPとWindows Server 2003は最初から問題ありません。
NTBACKUPは適度な賢さに教育されたので、メディアを交換してもちゃんと新しいメディアを認識するようになりました。
ただ、メディア交換を認識するまでに時間がかかるので、結局ウェイトをかませる必要があるのです。

それでは、この問題を解決しつつ、効率よくバックアップを作成するためのバッチファイルを紹介しましょう。


<dailybackup.bat>


@ECHO OFF
REM メディア手動交換(スタンドアロン型テープ装置)用バックアップバッチファイル

REM テープメディアの交換をRSMに通知する
RSM REFRESH /lf"HP C1533A SCSI Sequential Device"

REM 新しいテープメディアの検出を待つ(リソースキットまたは同等コマンドが別途必要)
SLEEP 30

REM ここに停止するサービスを列挙する
REM サービスの依存関係に注意
NET STOP "サービス名"

REM バックアップを実行する
REM .bksファイルはバックアップウィザードで事前に作成しておく
REM /n オプションを指定するとすべてのメディアが同じ名前になるので指定しない
NTBACKUP BACKUP "@C:\Documents and Settings\<ユーザ名>\Local Settings\Application Data\Microsoft\Windows NT\NTBackup\data\デイリーバックアップ.bks" /d "デイリーバックアップセット" /v:yes /r:no /rs:no /hc:on /m normal /j "デイリーバックアップ" /l:s /p "4mm DDS" /UM

REM ここに開始するサービスを列挙する
REM 停止したのと逆の順序で開始するとよい
NET START "サービス名"

REM GUIDで指定したライブラリにあるメディアのPMIDを得る
FOR /f %%i in ('RSM VIEW /tPHYSICAL_MEDIA /cg72CD7CE81307415A8AE983BD77E9E2DB /guiddisplay /b') do set media=%%i

REM PMIDで指定したメディアを取り出す
RSM EJECT /pg%media% /aSTART /b

REM バックアップの完了



解説


@ECHO OFF
REM メディア手動交換(スタンドアロン型テープ装置)用バックアップバッチファイル

REM テープメディアの交換をRSMに通知する(Windows 2000 SP1以前のみ)
RSM REFRESH /lf"HP C1533A SCSI Sequential Device"


REM 新しいテープメディアの検出を待つ(リソースキットまたは同等コマンドが別途必要)
SLEEP 30


REM ここに停止するサービスを列挙する
REM サービスの依存関係に注意
NET STOP "サービス名"


REM バックアップを実行する
REM .bksファイルはバックアップウィザードで事前に作成しておく
REM /n オプションを指定するとすべてのメディアが同じ名前になるので指定しない
NTBACKUP BACKUP "@C:\Documents and Settings\<ユーザ名>\Local Settings\Application Data\Microsoft\Windows NT\NTBackup\data\デイリーバックアップ.bks" /d "デイリーバックアップセット" /v:yes /r:no /rs:no /hc:on /m normal /j "デイリーバックアップ" /l:s /p "4mm DDS" /UM


REM ここに開始するサービスを列挙する
REM 停止したのと逆の順序で開始するとよい
NET START "サービス名"

REM GUIDで指定したライブラリにあるメディアのPMIDを得る
FOR /f %%i in ('RSM VIEW /tPHYSICAL_MEDIA /cg72CD7CE81307415A8AE983BD77E9E2DB /guiddisplay /b') do set media=%%i


REM PMIDで指定したメディアを取り出す
RSM EJECT /pg%media% /aSTART /b


REM バックアップの完了




 最後にこのバッチファイルをタスクに登録すれば完了です。



 それでは皆さん、快適なバックアップライフ(笑)をお過ごし下さい。