コマンドプロンプトから Windows Server Backup で復元する: Windows Server 2008 Server Core

SERVER


コマンドプロンプトから Windows Server Backup で復元する

Windows Server 2008 では、システム状態やデータファイルなどを含めた OS 全体を定期的に自動バックアップしてくれる Windows Server Backup という機能が標準搭載されました。

USB 接続や内蔵のローカルハードディスクを使えば、過去のデータも容量が許す限り記録されるので便利です。Apple でいうところの Mac OS X の Time Machine と同じような感覚ですね。

 

これを使ってシステムのバックアップを取る方法は コマンドプロンプトから Windows Server Backup を設定する でお話しましたが、ここではそのバックアップを使ってファイルを復元する方法について見て行きます。

 

Windows Server Backup での復元に関する情報を取得する

Windows Server Backup で取得したバックアップからデータを復元するには、どのデータをどこへ復元するかといった情報が必要になってきます。

Windows Server Backup のコマンド "wbadmin" には、そういった情報を取得する機能が用意されているので、まずはそれについて見て行くことにします。

wbadmin get versions 取られているバックアップの、時間、バックアップ先、識別子、回復可能なものの概要を一覧で表示します。復元作業はこれで確認できた識別子を使って行います。
wbadmin get disks システムが認識しているディスクの一覧を表示します。ディスク番号、容量、ボリュームラベルやマウントポイントなどが確認できるので、バックアップのどこからデータを取り出すべきかを類推したり、復元するファイルをどこに保存するかを考える上で役立ちます。
wbadmin get status 現在実行中のバックアップ処理や復元処理の状態を確認します。それらの処理が実行されていない場合は、特に何も取得できない様子でした。
wbadmin get items -version:識別子 指定したバージョン識別子のバックアップの中に含まれる項目の一覧を取得します。

これらのコマンドでどのような情報が取得できるか、具体的には次のような感じになります。

 

wbadmin get versions

wbadmin get versions

このコマンドでは、取られているバックアップが古い順(最後が最新)でリストアップされます。

wbadmin 1.0 - バックアップ コマンド ライン ツール

(C) Copyright 2004 Microsoft Corp.

 

バックアップ時間: 2013/04/05 12:00

バックアップ対象: 固定ディスク ラベル付き \\?\Volume{340606ed-12a5-11e2-a743-00155d000301}

バージョン識別子: 04/05/2013-03:00

回復可能: ボリューム, ファイル, アプリケーション, ベア メタル回復, システム状態

スナップショット ID: {8ad418d3-725e-4fbc-9878-c5a38b9b3864}

 

バックアップ時間: 2013/04/06 12:00

バックアップ対象: 固定ディスク ラベル付き \\?\Volume{340606ed-12a5-11e2-a743-00155d000301}

バージョン識別子: 04/06/2013-03:00

回復可能: ボリューム, ファイル, アプリケーション, ベア メタル回復, システム状態

スナップショット ID: {0ba4cf18-915f-49d7-92fc-3d8121b77851}

この情報を元に、復元したいデータのあるバックアップを特定します。

ここの "バージョン識別子" を復元作業で使用します。

 

wbadmin get disks

wbadmin get disks

このコマンドでは、サーバーに接続されているディスクの一覧を取得します。

wbadmin 1.0 - バックアップ コマンド ライン ツール

(C) Copyright 2004 Microsoft Corp.

 

ディスク名:

ディスク番号: 1

ディスク ID: {08fa61ea-0000-0000-0000-000000000000}

総領域: 5.99 GB

使用領域: 5.59 GB

ボリューム: <マウントなし> [システムで予約済み],C:[(ボリューム ラベルなし)]

 

ディスク名: Msft Virtual Disk SCSI Disk Device

ディスク番号: 2

ディスク ID: {4e99b321-0000-0000-0000-000000000000}

総領域: 80.00 GB

使用領域: 52.02 GB

ボリューム: D:[Home Directory]

 

ディスク名      : Virtual HD ATA Device

ディスクはオフラインです。

このコマンドではディスクの大雑把な情報しか取得できませんけど、どんなドライブレターが存在するかとか、その総容量と使用容量を知ることができるので、そういう情報がなかなか得られにくい Windows Server Core ではけっこう重宝します。

 

wbadmin get status

wbadmin get status

このコマンドでは、現在実行中のバックアップ処理や復元処理の進捗状況を取得できます。

wbadmin 1.0 - バックアップ コマンド ライン ツール

(C) Copyright 2004 Microsoft Corp.

 

エラー - 現在、バックアップまたは回復操作が実行されていません。

それらの操作をしていない状況でこのコマンドを実行しても、エラーとして報告されるようでした。

 

wbadmin get items

wbadmin get items コマンドでは、wbadmin get versions で確認できるバージョン識別子を指定して、そのバージョンのバックアップに含まれる内容を確認できます。

wbadmin get status -version:04/06/2013-03:00

たとえばこのようにすることで、バージョン "04/06/2013-03:00" のバックアップに含まれる内容を一覧表示されます。

wbadmin 1.0 - バックアップ コマンド ライン ツール

(C) Copyright 2004 Microsoft Corp.

 

ボリューム ID = {76f4c2c7-b664-11e1-96c1-806e6f6e6963}

ボリューム 'システムで予約済み'、<マウントなし>  にマウント ('システムで予約済み'、バックアップ作成時には<マウントなし>  にマウント)

ボリューム サイズ = 100.00 MB

回復可能 = ボリューム全体

 

ボリューム ID = {76f4c2c8-b664-11e1-96c1-806e6f6e6963}

ボリューム '<ラベルのないボリューム>'、C: にマウントボリューム サイズ = 5.89 GB

回復可能 = ボリューム全体

 

ボリューム ID = {2c46326a-b66e-11e1-8447-806e6f6e6963}

ボリューム 'Home Directory'、D: にマウント

ボリューム サイズ = 79.99 GB

回復可能 = ボリューム全体

 

アプリケーション = Registry

コンポーネント = Registry (\Registry)

ディレクトリを辿ったりとか、これ以上の詳細な情報は得られないようですけど、どんなデータを復元できるかの手掛かりにはなりますね。

実際にどのファイルをバックアップするかを指定するときには、実際のパスなどから照らし合わせて類推する感じになるのでしょうか。GUI で Windows Server Backup を操作するときみたいに、バックアップセットの中からファイル一覧などを取得する方法があると便利なのですけれど、方法が判りませんでした。

 

バックアップからファイルやフォルダを復元する

コマンドプロンプトを使って Windows Server Backup で取得したバックアップからデータを復元するには、次のコマンドを使うことになるようです。

wbadmin start recovery ファイルやフォルダ、レジストリの復元を行います。
wbadmin start systemstaterecovery システム状態の回復を実行します。
wbadmin restore catalog バックアップカタログの損傷を回復します。

このようにいくつかの復元コマンドがあるようですが、ここではフォルダーをバックアップから取り出す場面を想定して "wbadmin start recovery" を実行する例を見て行きます。

 

たとえば "D:\Dictionary\" ディレクトリ内にあったはずのファイルを復元する場合を想定します。

バックアップの中身を細かく辿ることができれば、ピンポイントに失くしたファイルを指定して復元できるところですけど、その方法が判らなかったので、今回はこの "C:\Dictionary" フォルダ全体をバックアップから取り出すことをやってみたいと思います。

 

取得済みのバックアップを確認する

そのために、まずはいつの何時にバックアップが取られているかを、次のようにして確認します。

wbadmin get versions

こうすると、バックアップされている日付と時刻と概要が一覧表示されます。

最後に表示されるのが最新のバックアップのようなので、データが失われたと思われるよりも前の日付のものを探します。

バックアップ時間: 2013/04/06 12:00

バックアップ対象: 固定ディスク ラベル付き \\?\Volume{340606ed-12a5-11e2-a743-00155d000301}

バージョン識別子: 04/06/2013-03:00

回復可能: ボリューム, ファイル, アプリケーション, ベア メタル回復, システム状態

スナップショット ID: {0ba4cf18-915f-49d7-92fc-3d8121b77851}

そしてそのバックアップのところに記されている "バージョン識別子" が、バックアップからデータを取り出すときに指定する "-version:" オプションに渡す値になります。

たとえば "04/06/2013-03:00" という識別子が付けられたバックアップが、今回の復元で使いたいものだったとします。

 

 

ここでもし、このバージョン識別子のバックアップについてもう少し詳しく内容を確認したい場合には、次のようにします。

wbadmin get items -versions:04/06/2013-03:00

このようにしてもあまり細かい情報は表示されませんけど、どんなバックアップが対象になっているかくらいは参考になるかもしれません。

ボリューム ID = {76f4c2c7-b664-11e1-96c1-806e6f6e6963}

ボリューム 'システムで予約済み'、<マウントなし>  にマウント ('システムで予約済み'、バックアップ作成時には<マウントなし>  にマウント)

ボリューム サイズ = 100.00 MB

回復可能 = ボリューム全体

 

ボリューム ID = {76f4c2c8-b664-11e1-96c1-806e6f6e6963}

ボリューム '<ラベルのないボリューム>'、C: にマウントボリューム サイズ = 5.89 GB

回復可能 = ボリューム全体

 

ボリューム ID = {2c46326a-b66e-11e1-8447-806e6f6e6963}

ボリューム 'Home Directory'、D: にマウント

ボリューム サイズ = 79.99 GB

回復可能 = ボリューム全体

 

アプリケーション = Registry

コンポーネント = Registry (\Registry)

 

バックアップからファイルを復元する

バックアップの中身を細かく辿れれば失くしたファイルをピンポイントで指定して復元できるところなのですけど、その方法が判らなかったので、今回は目的のファイルが保存されていたと思われる "C:\Dictionary" フォルダ全体を取り出すことをやってみます。

バージョン識別子 "04/06/2013-03:00" のバックアップから "C:\Dictionary" フォルダを "C:\Temp" フォルダにまるごと復元してしまい、後はそこから普段通りにファイルを取り出す感じです。

 

このとき、復元に使うコマンドは次のようになりました。

wbadmin start recovery -version:04/06/2013-03:00 -itemtype:File -items:C:\Dictionary -recoveryTarget:C:\temp -overwrite:CreateCopy

このように "wbadmin start recovery" コマンドに、対象のバックアップ識別子を "-version:" で、復元したいフォルダを "-items:" で、復元先を "-recoveryTarget:" で指定しています。

また、今回はファイルやフォルダの復元なので "-itemtype:File" を、もし復元先に同じ名前のファイルがあったときにそれを上書きしないように "-overwrite:CreateCopy" を指定しています。

 

このコマンドを実行すると、画面には次のような実行結果が表示されました。

wbadmin 1.0 - バックアップ コマンド ライン ツール

(C) Copyright 2004 Microsoft Corp.

 

ボリューム情報を取得しています...

2013/04/06 12:00 に作成されたバックアップから C:\temp にファイル C:\Dictionaryを回復することを選択しました。

 

続行しますか?

[Y] はい [N] いいえ y

 

C:\Dictionaryを C:\temp\ に

正常に回復しました。

回復操作が完了しました。

回復操作の概要:

---------------

 

C:\temp\ への C:\Dictionary

の回復が正常に完了しました。

回復された合計バイト数: 702.80 KB KB

回復されたファイルの総数: 6

失敗したファイルの総数: 0

 

正常に回復されたファイルのログ:

C:\Windows\Logs\WindowsServerBackup\FileRestore-08-04-2013_18-16-48.log

このようにして無事、2013/04/06 の正午の時点での "C:\Dictionary" フォルダのデータを "C:\Temp" フォルダ内に復元することができました。

 

ちなみに、ここで使った "wbadmin start recovery" コマンドでは、次のオプションを指定することができるようになっているようでした。

-itemtype: 必須 復元したいものがファイルやフォルダ (File) なのか、アプリケーションやレジストリ (App) なのか、ボリューム (Volume) なのかを指定します。
-version: 必須 復元で使うバックアップのバージョン識別子を指定します。
-items: 必須 指定したバックアップの中にある、復元したいものを指定します。複数ある場合はカンマ区切りで指定しますが、-itemtype:volume の場合は単一のボリュームだけが指定可能だそうです。
-backupTarget:   バックアップが保存されている場所を指定します。
-machine:   -backupTarget: と一緒に使用して、どのコンピューター用のバックアップを使用するかを指定するようです。
-recoveryTarget:   バックアップを復元する先を指定します。
-recursive   -itemtype:File のときに、指定したフォルダ内のサブフォルダの内容も全て復元したいときに指定します。既定では、指定したフォルダ内のファイルだけが復元されるそうです。
-overwrite:   -itemtype:File のとき、復元したいものと同じ名前のものが復元先に既にあった場合に、それを無視する (Skip) か、既存ファイルのコピーを作成する (CreateCopy) か、上書きする (Overwrite) かを指定します。
-notRestoreAcl   -itemtype:File のときに、復元するファイルの ACL(アクセス権)を復元したくない場合に指定します。その場合、復元されたファイルは復元先の ACL を継承します。
-skipBadClusterCheck   -itemtype:Volume のとき、復元先のディスクの不良クラスタチェックを省略します。ただし、これを指定して別のディスクに復元した場合、不良クラスタの検出情報が実際と異なることがあり、それを正すためには手動で CHKDSK /B を実行する必要があるとのことでした。
-noRollForward   -itemtype:App のときに指定できるオプションだそうです。詳しくは判らなかったのですが、既定では "以前の状態への復旧が可能とのことなので、これを指定した場合は、復元後にそのアプリケーションを復元前の状態に戻せなくするということなのでしょうか。
-quiet   復元の確認を促すプロンプトを表示させずに、復元処理を実行します。

このようなオプションを目的に応じて組み合わせて、バックアップからの復元を行って行きます。

 例として、マイクロソフトの公式サイトでは、次のようなコマンドの記載方法が挙げられていました。

wbadmin start recovery -version:03/31/2005-09:00 -itemType:Volume -items:d: "03/31/2005-09:00" のバックアップから、ボリューム D: を復元します。
wbadmin start recovery -version:03/31/2005-09:00 -itemType:App -items:Registry -recoverytarget:d:\ "03/31/2005-09:00" のバックアップから、レジストリを D: に復元します。
wbadmin start recovery -version:03/31/2005-09:00 -itemType:File -items:d:\folder -recursive "03/31/2005-09:00" のバックアップから、D:\folder 内のファイルとそのサブフォルダを復元します。
wbadmin start recovery -version:03/31/2005-09:00 -itemType:Volume -items:\\?\Volume{cc566d14-44a0-11d9-9d93-806e6f6e6963}\ "03/31/2005-09:00" のバックアップから、ボリューム "\\?\Volume{cc566d14-44a0-11d9-9d93-806e6f6e6963}\" を復元します。
wbadmin start recovery -version:04/30/2005-09:00 -backupTarget:\\servername\share -machine:server01 \\servername\share にある server01 用のバックアップ "03/31/2005-09:00" から復元します。

このような例は "wbadmin start recovery /?" を実行することでも見ることができるようでした。

どのようなオプションを取るかなど、詳しく知りたいコマンドのところで "/?" を指定することで、そのコマンドの詳細な使い方を見ることができます。