拡張したスキーマと昇格した機能レベルのロールバック

みなさま、こんにちは。

今回は Active Directory ドメイン サービスの移行にて、万が一作業が切り戻しになった場合のための、Windows Server バックアップを使用した切り戻し手順についてご案内いたします。

ドメイン コントローラー (DC) を新しい OS へ移行する場合、スキーマ拡張が伴い、必要に応じてフォレストおよびドメインの機能レベルの昇格をご実施される方も多いのではないかと思います。
この記事では、拡張したスキーマを切り戻す手順、および昇格した機能レベルを切り戻す手順についてフォーカスして説明します。
特に拡張したスキーマや昇格した機能レベルを切り戻すために、1 台の DC でリストアすれば良いのか、それともすべての DC でリストアすれば良いのかという点について、疑問をお持ちになった方がいらっしゃいましたら、ご一読いただければ幸いです。

----------------------------------------
スキーマのロールバックについて
----------------------------------------
スキーマ拡張後、もしくは機能レベルの昇格後にもし作業が切り戻しとなった場合、拡張したスキーマまたは機能レベルをロールバックするためには、基本的にすべての DC においてリストアが必要になります。
これは、任意の 1 台の DC でデータベースの状態が戻ったとしても、リストアした DC 以外が保持しているデータベースの方が新しい情報を保持していると判断され、リストアした DC のデータベースの内容が上書きされてしまうためです。

ここで、それでは 1 台の DC で権限のある復元 (Authoritative Restore) を実施すれば良いのかと思われる方もいらっしゃるかもしれません。
残念ながら、スキーマ パーティションに対して権限のある復元を実施しても、スキーマ情報を完全にロールバックすることはできません。
これは、権限ある復元では、復元対象のオブジェクトのバージョン番号を意図的に高い数値に設定することにより、他の DC から最新の情報が複製されないようにするといった仕組みが取られているためです。
つまり、スキーマ拡張前の新しいスキーマ オブジェクトが存在しない段階では、そもそもオブジェクト自体が存在しないためにバージョン番号を増加させることができず、スキーマの状態を完全に元に戻すことができないのです。

この点については下記の参考資料にも記載がありますので、参考にしていただければ幸いです。

- 参考資料
Active Directory Backup and Restore
https://msdn.microsoft.com/en-us/library/bb727048.aspx

// 該当部分の抜粋
******************************
An authoritative restore will not overwrite new objects that have been created after the backup was taken.
You can authoritatively restore only objects from the configuration and domain-naming contexts. Authoritative
restores of schema-naming contexts are not supported.
******************************

** 補足情報 **
スキーマを拡張する前に、予めスキーマ マスターの出力方向の複製を停止させておき、スキーマ拡張中、または拡張後に問題が発生した場合には、スキーマ マスターだけでリストアするという方法を取られるお客様もいらっしゃいます。
この方法であれば、特に大規模環境の場合、切り戻しに必要な工数を大幅に削減することができます。
しかしながら、出力方向の複製を再開させた後に問題が発覚した場合、スキーマ マスターだけでしかバックアップを取得していないと切り戻しが困難となってしまいます。
そのため、バックアップの取得に関しては、極力すべての DC でご実施されることをお勧めします。

----------------------------------------
機能レベルのロールバックについて
----------------------------------------
昇格したフォレストの機能レベル、ドメインの機能レベルをロールバックする場合においても、すべての DC でリストアが必要になります。

現在どのフォレストの機能レベル、ドメインの機能レベルに設定されているかという情報は、実は下記のオブジェクトの msDS-Behavior-Version という属性に格納されています。

- フォレストの機能レベル
CN=Partitions,CN=Configurations,<フォレスト ルート ドメインの識別名>

※ contoso.com というフォレスト ルート ドメインの場合には、<フォレスト ルート ドメインの識別名> は DC=contoso,DC=com となります。

- ドメインの機能レベル
<ドメインの識別名>

※ sub.contoso.com というドメインの場合には、<ドメインの識別名> は DC=sub,DC=contoso,DC=com となります。

上記のオブジェクトはバックアップを取得する時点で既に存在しているため、そのオブジェクトに対して権限のある復元を実施すれば、機能レベルをロールバックできるのではないかと思われるかもしれません。
しかしながら、権限のある復元で機能レベルをロールバックするという方法は想定されていないため、仮に権限のある復元で上記のオブジェクトの msDS-Behavior-Version の値がもとに戻ったとしても、機能レベルの昇格に伴って使用できるようになった機能に関しても、もとの動作に戻る保証はありません。
このことから、機能レベルをロールバックする際においても、すべての DC でバックアップから復元していただくことをご案内しています。

** 補足情報 **
以前の OS では機能レベルのロールバックはできませんでしたが、Windows Server 2008 R2 以降、条件さえ揃っていれば機能レベルを下げられるようになりました。
例えば、Active Directory のごみ箱が有効になっていないという条件を満たしていれば、Windows Server 2008 R2 の機能レベルから、Windows Server 2008 の機能レベルへ下げることができます。

下記にスキーマおよび機能レベルをロールバックするためのバックアップ手順、復元手順を紹介します。

----------------------------------------
ドメイン コントローラーのバックアップおよび復元方法 (Windows Server 2008 以降)
----------------------------------------
- 概要
Active Directory のデータベース、グループ ポリシーのための構成ファイルを格納した SYSVOL フォルダー配下など、DC が必要とする情報はシステム状態に含まれます。
下記の手順を実施することにより、システム状態のバックアップおよび復元を実施できます。

******************************
バックアップ手順
******************************
1.Windows Server バックアップのインストール
  1-1. バックアップを作成する DC でサーバー マネージャーを起動し、[機能] を右クリックし、表示されるメニューから [機能の追加] をクリックします。
    (* Windows Server 2012 以降では [管理] - [役割機能の追加] になります。)
 
  1-2. 機能の一覧から "Windows Server バックアップの機能" を選択し、[次へ] をクリックします。
    (* Windows Server 2012 以降では "Windows Server バックアップ" という表記になります。)
 
  1-3. [インストール] をクリックします。
 
  1-4. インストールが完了しましたら、[閉じる] をクリックします。

2. システム状態のバックアップ
  2-1. バックアップを作成する DC 上でコマンド プロンプトを起動します。
 
  2-2. 次のコマンドを実行し、システム状態データをバックアップします。
    wbadmin start systemstatebackup -backupTarget:<ボリューム名> -quiet
   
※ <ボリューム名> はバックアップ データ保存先を指定します。Windows Server 2008 R2 では、共有フォルダーのパスを指定することも可能です。

※ Windows Server 2008 で "エラー - バックアップの場所は重要なボリュームです" が表示された場合は、下記 URL をご参照ください。
Windows Server 2008 でシステム状態のバックアップを実行するとエラー メッセージ "エラー - バックアップの場所は重要なボリュームです" が表示される
https://support.microsoft.com/kb/944530

******************************
復元手順
******************************
※ 復元を実施される際は、リストア済みのコンピューターとリストア前のコンピューターの間で通信がされない状態してください。もしリストア前のものとリストア後のものの間で複製処理が実施されてしまうと、リストアした情報がリストア前の情報で上書きされてしまいます。

(a) ドメインに存在する DC 全てをバックアップから復元する場合の 1 台目、又はドメインに DC が 1 台のみの環境
1. 復元を行う DC を再起動します。

2. システム起動直後に、F8 キーを押し、詳細ブート オプション メニューを表示します。

3. [ディレクトリ サービス復元モード] を選択し、起動します。

4. コマンド プロンプトを起動します。

5. 次のコマンドを実行し、システム状態データの "バージョン識別子" を確認します。
  wbadmin get versions

6. 更に次のコマンドを実行し、システム状態データのリストアを行います。
  wbadmin start systemstaterecovery -version:<バージョン識別子> -authsysvol -quiet

7. 完了後、システムを再起動します。

(b) 他の DC が存在する場合
1. 復元を行う DC を再起動します。

2. システム起動直後に、F8 キーを押し、詳細ブート オプション メニューを表示します。

3. [ディレクトリ サービス復元モード] を選択し、起動します。

4. コマンド プロンプトを起動します。

5. 次のコマンドを実行し、システム状態データの "バージョン識別子" を確認します。
  wbadmin get versions

6. 更に次のコマンドを実行し、システム状態データのリストアを行います。
  wbadmin start systemstaterecovery -version:<バージョン識別子> -quiet

7. 完了後、システムを再起動します。

----------------------------------------
参考資料
----------------------------------------
Windows Server バックアップ
https://technet.microsoft.com/ja-jp/library/cc754572(WS.10).aspx

Windows Server 2008 における Active Directory のバックアップと復元
https://technet.microsoft.com/ja-jp/magazine/2008.05.adbackup.aspx

ステップ バイ ステップ ガイド - AD DS のバックアップと回復
https://technet.microsoft.com/ja-jp/library/cc771290(WS.10).aspx

システム状態データ
https://technet.microsoft.com/ja-jp/library/cc785306.aspx

コマンド ラインを使用してシステム状態のバックアップを作成する
https://technet.microsoft.com/ja-jp/library/cc753201(WS.10).aspx

AD DS の権限のない復元の実行
<https://technet.microsoft.com/ja-jp/library/cc730683(WS.10).aspx>