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"
解説:
「RSM REFRESH」コマンドを実行すると、テープドライブにセットされたメディアの検出動作を行います。テープドライブが「カッチャン」と音を立てて、一瞬テープを読み取るはずです。これがリフレッシュです。
この操作には、テープドライブによって異なりますが、遅いものでは5秒〜10秒程度かかるため、リソースキットコマンド「SLEEP」を使ってメディアの検出動作が完了するのを待ちます。でないと、どんどん次の処理に進んでしまって、結局バックアップは失敗します。待ち時間はご利用の環境にあわせて適宜変更してください。
「RSM REFRESH」コマンドの「/lf」オプションには、ライブラリ名を指定します。
ライブラリ名はコマンドプロンプトで次のコマンドを実行して取得します。ついでにコンテナIDも表示しましょう。
C:\>RSM VIEW /TLIBRARY /GUIDDISPLAY
実行結果は次のようになります。
ここで表示された
HP C1533A SCSI Sequential Device
がライブラリ名(テープドライブの名前)で、
72CD7CE81307415A8AE983BD77E9E2DB
がライブラリのコンテナID(ドライブのID)になります。
REM 新しいテープメディアの検出を待つ(リソースキットまたは同等コマンドが別途必要)
SLEEP 30
解説:
何もせずに動作を停止しています。時間は秒単位で指定します。
待ち時間は動作環境によって異なります。
Windows 2000では30秒で動作していても、Windows XPやWindows Server2003で同じ値になるとは限りません。
60秒を超えることはないようですから、60から徐々に小さい値にしていくとうまくいきます。
REM ここに停止するサービスを列挙する
REM サービスの依存関係に注意
NET STOP "サービス名"
解説:
NTBACKUPは、基本的にオープン中のファイルをバックアップすることができません。このためバックアップ対象によってはアプリケーションやサービスを停止する必要があります。
- ファイルやフォルダのみをバックアップする場合は、動作中のアプリケーションやサービスを停止します。
- 「システム状態」のみをバックアップする場合は、アプリケーションやサービスは動作中のままで構いません。
- ファイルやフォルダ+「システム状態」をバックアップする場合は、アプリケーションやサービスを停止します。
ただし、NTBACKUPはRemovable Storageサービスを利用するので、このサービスはバックアップ対象にかかわらず常に実行中のままにします。
Windows XP以降は「ボリュームシャドウコピー」機能が搭載されています。これを使えばオープン中のファイルもバックアップできます。
すなわち、バックアップのためにサービスやアプリケーションを止めなくてもよいということです。
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
解説:
スタート → プログラム → アクセサリ → システムツール → バックアップを実行して、バックアップウィザードを使って「デイリーバックアップ」という名前でバックアップジョブを作成します。
バックアップウィザードでバックアップ対象のフォルダや「システム状態」、バックアップに使用するデバイスなどを選択します。
選択したバックアップデバイス(例では"4mm DDS")は、「/p」オプションとしてコマンドラインに設定されます。
保存したジョブは拡張子「.bks」が付けられて、作成したユーザのユーザプロファイルフォルダに保存されます。このバックアップジョブファイルのパスを、NTBACKUPのコマンドライン「"@C:\Documents
... .bks"」に指定します。
NTBACKUPのコマンドラインは非常に複雑なので、ダミーのバックアップジョブをスケジュールして、コントロールパネルの「タスク」からスケジュールジョブのコマンドラインをコピーして編集するとよいでしょう。このときスケジュールジョブの名前が「/j」オプションのジョブ名として設定されます。
スケジュールジョブを作成すると、「/n」オプションで「yyyy/mm/dd 年に作成したバックアップ」といった名前が勝手に付けられていますが、そのままにしておくと全部のテープに同じ名前が付けられてしまうので、手動で削除してください。
「/d」オプションでバックアップセットの名前を指定します。これは適当に追加してください。
「/UM」オプションは、利用できる最初のメディアを検索してフォーマットするためのオプションで、既存のバックアップを上書きして新しいバックアップを作成する場合に指定します。テープ内の既存のバックアップを残したい場合はこのオプションは不要です。
※1 「/UM」オプションはWindows XP以降のNTBACKUPのヘルプに記載されていませんが、問題なく使用できます。
※2 Windows XP以降では、「ボリュームシャドウコピー」機能に対応する「/SNAP:{on | off}」オプションが追加されています。
ちなみに、差分バックアップなどを1つのメディアに追加していく(上書きしない)方法では、「/t」オプションのあとにメディア名を書かなければなりません。
メディア名を取得するもっとも簡単な方法は、次のコマンドを実行することです。「/cg」オプションには、コンテナIDを指定します。
FOR /f "tokens=1,2,3* eol=コ" %%i in ('RSM VIEW /tPHYSICAL_MEDIA
/cg72CD7CE81307415A8AE983BD77E9E2DB')
do set media="%%i %%j %%k"
echo %media%
とはいえ、2回目以降のバックアップでは、メディア名は自明のはずですから、直接記入する方が簡単かも知れません。
REM ここに開始するサービスを列挙する
REM 停止したのと逆の順序で開始するとよい
NET START "サービス名"
REM GUIDで指定したライブラリにあるメディアのPMIDを得る
FOR /f %%i in ('RSM VIEW /tPHYSICAL_MEDIA /cg72CD7CE81307415A8AE983BD77E9E2DB /guiddisplay /b') do set media=%%i
解説:
このFOR文は、次の動作を行います。
1.「RSM VIEW ... /b」コマンドを実行して、コンテナIDで指定したライブラリにセットされたテープのPMID(物理メディアID)を表示する。
2.「RSM VIEW ... /b」コマンドの処理結果からPMID部分を取り出し、環境変数 %media% にセットする。
「/cg」オプションには、コンテナIDを指定します。
「/tPHYSICAL_MEDIA」オプションによって、ライブラリにセットされたメディアのPMIDを取得します。
REM PMIDで指定したメディアを取り出す
RSM EJECT /pg%media% /aSTART /b
解説:
「RSM EJECT」コマンドを実行すると、PMIDで指定したメディアをドライブから取り出します。
環境変数 %media% には、先のFOR文でPMIDがセットされています。
取り出し操作が失敗するときは、ほとんどの場合「RSM REFRESH」コマンドの完了待ち時間不足です。
「SLEEP」コマンドの待ち時間を長めに調整してください。
REM バックアップの完了
最後にこのバッチファイルをタスクに登録すれば完了です。
それでは皆さん、快適なバックアップライフ(笑)をお過ごし下さい。