前回は、FRS ジャーナルラップエラーの概要とその確認方法について紹介しました。
続いて、今回は FRS ジャーナル ラップ エラーの具体的な対処方法について解説します。
ジャーナル ラップエラーの修復を行う前に確認すべきこと
修復作業を行う前に、次の点に問題がないか確認することが重要です。
1. 各ドメイン コントローラーの SYSVOL の内容が同じであること
2. Active Directory の複製が正常に行われていること
以下に、その詳細と確認方法を紹介します。
1. 各ドメイン コントローラーの SYSVOL の内容が同じであること
ジャーナル ラップエラーの一般的な修復作業では、エラーが発生したドメイン コントローラー上の SYSVOL の内容を一旦削除して、複製パートナーから複製して修復を行います。
そのため、修復作業を行う前に、複製パートナーの SYSVOL の情報が正しい状態 (整合性がとれた状態) であることを確認する必要があります。
これは、ジャーナル ラップエラーが生じたドメイン コントローラーが、実は正しいデータを保持していた、という場合もあるためです。もしも、複製パートナーの SYSVOL の内容に一部不足が生じている場合は、不足している情報を手動でコピーした後に修復作業を行います。
- 確認方法
Windows Server 2003 では、リソース キットに入っている gpotool.exe を使用して、SYSVOL の整合性を確認することができました。
また、Windows Server 2012 以降では、グループ ポリシー管理コンソール (GPMC) が改良され、GUI を用いて整合性を確認できるようになっています。
グループ ポリシー インフラストラクチャの状態を確認する
https://technet.microsoft.com/ja-jp/library/jj134176.aspx
では、Windows Server 2008 や Windows Server 2008 R2 で確認する場合はどうするか?
Windows Server 2003 のリソース キットに入っている gpotool.exe を Windows Server 2008 や Windows Server 2008 R2 にコピーして使用すると、整合性に問題がないにも関わらず、エラーが表示されたりと、正しく結果が正しく表示されない場合があるため推奨していません。
過去に弊社のサポート サービスをご利用いただいた方でしたら、トラブルシューティングで利用する MPS レポート ツールの中に Windows Server 2008 で正常動作する gpotool.exe が含まれていますので、そのレポート ツールを各ドメイン コントローラーで実行するのも一つの方法です。整合性が取れている場合は レポートの中に出力される gpotool の結果ファイルの最後の行に「Policies OK」と記載されます。
その他の方法としては、標準でインストールされている robocopy.exe コマンドを使用して、ドメイン コントローラー間で SYSVOL フォルダー内の内容に差異がないかを確認することも可能です。
robocopy.exe はファイルやフォルダーをコピーするためのツールですが、/L オプションを指定することで、コピーは行わずに、フォルダーの差分を確認することができます。
例えば、グループ ポリシーのファイルが編集される PDC エミュレーターの役割を持つドメイン コントローラー上で robocopy.exe を実行し、他のドメイン コントローラーの SYSVOL フォルダーと比較することで、整合性が取れた状態かどうかを確認することができます。
Robocopy
http://technet.microsoft.com/ja-jp/library/cc733145(v=ws.10).aspx
具体的には、ドメイン名が contoso.com で、比較先のドメイン コントローラーの名前が DC02 の場合は、下記のようなコマンドを実行します。
robocopy C:\Windows\SYSVOL\domain\Policies \\DC2\sysvol\contoso.com\Policies /V /L /E /COPYALL /LOG:C:\policies_diff.log
robocopy C:\Windows\SYSVOL\domain\Scripts \\DC2\sysvol\contoso.com\Scripts /V /L /E /COPYALL /LOG:C:\scripts_diff.log
「Policies」フォルダーには「グループ ポリシーの構成ファイル」が、「Scripts」フォルダーには「ログオンスクリプトなどのスクリプト」が格納されていますので、上記のコマンドでは各フォルダーで差分がないか確認しています。
/LOG オプションで指定したファイルの中に、ファイルやフォルダーの比較結果が記録されますので、「同じ」と記録されている場合は、ファイルが複製されて整合性が取れている状況を示します。
もしも、ジャーナル ラップ エラーが発生したドメイン コントローラー以外にファイルの整合性が取れていないサーバーが存在する場合は、ジャーナル ラップ エラーの復旧作業を行う前に、その原因について調べる必要があります。
2. Active Directory の複製が正常に行われていること
FRS の複製は、Active Directory データベースを複製する際のトポロジが利用されます。
そのため、FRS に関わるエラーを修復するためには、Active Directory データベースの複製も正常に行われている必要があります。
- 確認方法
ジャーナル ラップ エラーが発生したドメイン コントローラーで、コマンド プロンプトを起動して repadmin /showrepl コマンドを実行し、Active Directory のデータベースの複製が正常な状態であることを確認します。
もしも、複製が成功していない場合は、ジャーナル ラップ エラーの復旧作業を進めることができません。先に Active Directory データベースの複製エラーを復旧させる必要があります。
FRS ジャーナル ラップ エラーの復旧手順
ドメイン内のすべてのドメイン コントローラーで SYSVOL の整合性が取れており、Active Directory の複製が正常に行われている場合は、ジャーナル ラップ エラーを修復する準備が整った環境となりますので、続いて、修復作業に進みます。
burflags について理解しよう
ジャーナル ラップ エラーの復旧では、レジストリ値 burflags に D2 もしくは D4 のいずれかの値を設定して作業を行います。この burflags に D2 と D4 のどちらの値を設定するかについて、十分理解した上で作業を進める必要があります。
キー: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\SERVICES\NTFRS\Parameters\ 値 : burflags (既定値は 0) |
FRS はサービス起動時に burflags に設定された値を確認して、他のドメイン コントローラーから SYSVOL のファイルの複製を行うかどうかを判断しています。
burflags に D2 が設定されている場合は、ファイルの複製に関して権限がないことを示すため、サービス起動時に他のドメイン コントローラーから自身に対して SYSVOL のファイルの複製を行います。 一方、D4 が設定された場合は、自身がファイルの複製に関して権限がある (マスターである) ことを示し、サービス起動時は他のドメイン コントローラーから SYSVOL のファイルの複製は行いません。
burflags の設定例
burflags に D2 と D4 のどちらを設定するかは、ジャーナル ラップ エラーが発生した状況に応じて判断します。
以下に、3 つのシナリオにおける burflags の設定例と、復旧方法について説明します。
■ シナリオ1
ドメイン内にドメイン コントローラーが 1 台しか存在しておらず、そのサーバーでジャーナル ラップ エラーが発生している。
このシナリオの場合は、ジャーナル ラップ エラーが発生したドメイン コントローラーで burflags に D4 を設定して復旧を行います。これにより、エラーが発生したサーバーで FRS データベースの初期化が行われ、また自身をマスターとして起動させる処理が行われます。
* このシナリオには、これまでドメイン コントローラーを 1 台で運用しており、リプレースのため、新しくドメイン コントローラーを追加したものの、既存のドメイン コントローラーでジャーナル ラップ エラーが発生していた、というケースも含まれます。
この場合は、追加したドメイン コントローラーでは SYSVOL が共有されていない状況となっていることが想定されますが、ジャーナル ラップ エラーが解消されると、追加したドメイン コントローラー側で自動的に複製が開始されて、最終的に SYSVOL が共有されることが期待されます。
■ シナリオ2
ドメイン内にドメイン コントローラーが複数存在しており、その中の 1 台だけでジャーナル ラップ エラーが発生している。
この場合は、ジャーナル ラップ エラーが発生したドメイン コントローラーで、burflags に D2 を設定して FRS データベースの初期化を行い、他のドメイン コントローラーから SYSVOL の情報を複製して修復を行います。
■ シナリオ3
ドメイン内にドメイン コントローラーが複数台あり、全台のドメイン コントローラーでジャーナル ラップ エラーが発生している。
この場合は、通常、グループ ポリシーが編集される PDC エミュレーターの役割を持つドメイン コントローラーがマスターとなるため、PDC エミュレーター上で burflags に D4 を設定して、その他のドメイン コントローラーで D2 を設定します。
ただし、この復旧作業を行う場合は、作業を行う順番に気を付ける必要があります。
まずは、すべてのドメイン コントローラーで FRS のサービスを停止させます。そして、マスターとなるサーバーで D4 を設定して FRS サービスを起動します。続いて、その複製パートナーとなっているサーバーで 1 台ずつ、D2 を設定して、FRS データベースの初期化と SYSVOL の初期化作業を行う作業を行います。その後、順番に、残りの複製パートナーで 作業を進めます。
以下に、各シナリオの具体的な対処方法を紹介します。
なお、シナリオ3 は稀であり、復旧するためにいろいろと考慮も必要になるため、手順は割愛します。(もしも該当してしまった場合には、弊社サポート サービスのご利用をご検討ください。復旧について支援させていただきます!)
- シナリオ1 の復旧手順
概要:
これまで運用してきた既存のドメイン コントローラーで FRS データベースの再作成を行い、SYSVOL のマスターにするフラグをセット (burflags に D4 を設定) して、他のドメイン コントローラーに SYSVOL の情報を複製させて復旧させます。
対処作業による影響:
この対処作業では FRS のサービスの再起動を行いますが、システムの再起動を行う必要ありません。 FRS サービスを停止させて作業を行うため、作業の間はドメイン コントローラー間のファイルの複製が行われなくなります。 ユーザーやコンピュータの認証へは影響はありません。
作業手順:
1. バックアップ
レジストリやコマンドによる作業となるため、万一の場合に備えて、ジャーナルラップエラーが発生したドメイン コントローラーでシステム状態 (System State) のバックアップを取得します。
コマンド ラインを使用してシステム状態のバックアップを作成する
https://technet.microsoft.com/ja-jp/library/cc753201.aspx
※「Windows Server バックアップ」の機能がインストールされていない場合は、機能の追加を行う必要があります。
また併せて、robocopy コマンドを使用して、SYSVOL フォルダー (%systemroot%\sysvol) を他の場所にバックアップします。下記は C:\SYSVOL_Backup というフォルダーにバックアップする例です。バックアップ先はお客様の環境に合わせて変更してください。
robocopy %systemroot%\sysvol C:\SYSVOL_Backup\ /copyall /E
続いて、以下 2 から 7 までの作業をジャーナルラップエラーが発生したドメイン コントローラー上のみで行います。
2. NTFRS サービスの停止
コマンドプロンプトから net stop ntfrs を実行し、NTFRS サービスを停止します。
3. NTFRS の初期化
以下の 3 つのフォルダ配下のファイルを削除します。フォルダはそのまま残してフォルダ内のファイルのみを削除します。
%systemroot%\ntfrs\jet
%systemroot%\sysvol\domain\DO_NOT_REMOVE_NtFrs_PreInstall_Directory
%systemroot%\sysvol\staging\domain
* フォルダやファイルが表示されない場合、メニュー バーの [ツール] - [フォルダ オプション] を選択し、[表示] タブから "すべてのファイルとフォルダを表示する" (Windows Server 2008 R2 以降の場合は "隠しファイル、隠しフォルダー、および隠しドライブを表示する" ) オプションを有効にし、"保護されたオペレーティング システム ファイルを表示しない" オプションを無効にします。
(フォルダ、ファイル等がない場合には省略して構いません)
図: %systemroot%\ntfrs\jet
図: %systemroot%\sysvol\domain\DO_NOT_REMOVE_NtFrs_PreInstall_Directory
図: %systemroot%\sysvol\staging\domain
4. NTFRS 強制同期の設定
4-1. [スタート] - [ファイル名を指定して実行] の順に選択し、regedit と入力します。
4-2. レジストリ エディタの左ペインから、以下のレジストリ キーに移動します。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\SERVICES\NTFRS\Parameters\Backup/Restore\Process at Startup
4-3. レジストリ エディタの右ペインから以下の値をダブル クリックし、値を変更します。
値 : burflags
タイプ : REG_DWORD
設定値 : D4 (16 進数。Default は 0)
5. FRS 再開
コマンドプロンプトで net start ntfrs を実行して NTFRS サービスを起動します。
6. FRS 再開の確認
イベント ビューアーを起動して [アプリケーションとサービス ログ] - [Microsoft] - [ファイル レプリケーション サービス] のイベントログに、ソース: NtFrs、ID: 13516 のイベントが記録されることを待ちます。
7. SYSVOL 共有の確認
コマンド プロンプトを起動し、net share コマンドを実行して、下記のように SYSVOL フォルダーと NETLOGON フォルダーが共有されていることを確認します。
他に、SYSVOL が共有されていないドメインコントローラーが存在する場合は、上記 6 と 7 の作業を、それらのドメイン コントローラー上でも行います。
最後に、下記の 8 の作業をジャーナルラップエラーが発生したドメイン コントローラー上で行います。
8. NTFRS を再起動します。
burflags = D4 を設定した DC では、サービスが終了するまで、マスタとなります。サービスが再起動されることによって自身の burflags 値を直ちにリセットします。
そのため、マスタ DC でコマンドプロンプトにおいて、net stop ntfrs && net start ntfrs を実行して NTFRS サービスの再起動を行います。
- シナリオ2 の復旧手順
概要:
この場合は、ジャーナルラップエラーの発生しているドメイン コントローラーにて、FRS データベースの再作成と SYSVOL の初期化を行い、権限がないことを示すフラグをセット (burflags に D2 を設定) して、複製パートナーのドメイン コントローラーから SYSVOL の情報を複製して復旧させます。
対処作業による影響:
この対処作業では FRS のサービスの再起動を行いますが、システムの再起動を行う必要ありません。
FRS サービスを停止させて作業を行うため、作業の間はドメイン コントローラー間のファイルの複製が行われなくなります。
ユーザーやコンピュータの認証へは影響はありません。
作業手順:
以下 1 から 8 までの作業をジャーナルラップエラーが発生したドメイン コントローラー上で行います。
1. バックアップ
レジストリやコマンドによる作業となるため、万一の場合に備えて、システム状態 (System State) のバックアップを取得します。
コマンド ラインを使用してシステム状態のバックアップを作成する
https://technet.microsoft.com/ja-jp/library/cc753201.aspx
※「Windows Server バックアップ」の機能がインストールされていない場合は、機能の追加を行う必要があります。
また併せて、robocopy コマンドを使用して、SYSVOL フォルダー (%systemroot%\sysvol) を他の場所にバックアップします。下記は C:\SYSVOL_Backup というフォルダーにバックアップする例です。バックアップ先はお客様の環境に合わせて変更してください。
robocopy %systemroot%\sysvol C:\SYSVOL_Backup\ /copyall /E
2. (Windows Server 2008 R2 以降の場合) PsTools の入手とインストール
SYSVOL フォルダ配下に含まれるフォルダの削除のために PsTools に含まれる PsExec を使用します。作業に先立ち PsTools を以下のサイトからダウンロードし、任意のフォルダに展開します。
PsExec
http://technet.microsoft.com/ja-jp/sysinternals/bb897553(en-us).aspx
3. NTFRS サービスの停止
コマンドプロンプトから net stop ntfrs を実行し、NTFRS サービスを停止します。
4. NTFRS の初期化
以下の 3 つのフォルダ配下のファイルを削除します。フォルダはそのまま残してフォルダ内のファイルのみを削除します。
%systemroot%\ntfrs\jet
%systemroot%\sysvol\domain\DO_NOT_REMOVE_NtFrs_PreInstall_Directory
%systemroot%\sysvol\staging\domain
* フォルダやファイルが表示されない場合、メニュー バーの [ツール] - [フォルダ オプション] を選択し、[表示] タブから "すべてのファイルとフォルダを表示する" (Windows Server 2008 R2 以降の場合は "隠しファイル、隠しフォルダー、および隠しドライブを表示する" ) オプションを有効にし、"保護されたオペレーティング システム ファイルを表示しない" オプションを無効にします。
(フォルダ、ファイル等がない場合には省略して構いません)
図: %systemroot%\ntfrs\jet
図: %systemroot%\sysvol\domain\DO_NOT_REMOVE_NtFrs_PreInstall_Directory
図: %systemroot%\sysvol\staging\domain
5. SYSVOL 配下のフォルダ、ファイルの削除
%systemroot%\sysvol\domain 配下の下記フォルダをフォルダごと削除します。
policies
scripts
policies_NTFRS_xxxxxxx
scripts_NTFRS_xxxxxxx
NtFrs_PreExisting__See_Evntlog
(xxxxxxx は任意の英数字です。フォルダ、ファイル等がない場合には省略して構いません)
* Windows Server 2008 R2 以降の OS では、上記のフォルダを削除することができません。
2 でダウンロードした PsTools に含まれる PsExec を使用し、削除を実行します。
(Windows Server 2008 R2 以降の場合)
5-1. [スタート] - [コマンドプロンプト] を右クリックし、 [管理者として実行] をクリックします。
5-2. 1 で展開した PsTools のフォルダにカレント ディレクトリを移動します (例. cd c:\PsTools)。
5-3. 以下のコマンドを実行します。ソフトウェアのライセンスの画面が表示されましたら [Agree] をクリックします。
Psexec.exe -i -s cmd
5-4. 新たに立ち上がったコマンドプロンプトにて rd /s コマンドを実行し、SYSVOL 内の次のフォルダおよび配下のファイルを削除します (例. rd %systemroot%\sysvol\domain\policies /s)。
%systemroot%\sysvol\domain\policies
%systemroot%\sysvol\domain\scripts
%systemroot%\sysvol\domain\policies_NTFRS_xxxxxxx
%systemroot%\sysvol\domain\scripts_NTFRS_xxxxxxx
%systemroot%\sysvol\domain\NtFrs_PreExisting__See_Evntlog
(xxxxxxx は任意の英数字です。フォルダがない場合には省略して構いません)
6. NTFRS 強制同期の設定
6-1. [スタート] - [ファイル名を指定して実行] の順に選択し、regedit と入力します。
6-2. レジストリ エディタの左ペインから、以下のレジストリ キーに移動します。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\SERVICES\NTFRS\Parameters\Backup/Restore\Process at Startup
6-3. レジストリ エディタの右ペインから以下の値をダブル クリックし、値を変更します。
値 : burflags
タイプ : REG_DWORD
設定値 : D2 (16 進数。Default は 0)
7. FRS 再開
コマンドプロンプトで net start ntfrs を実行して NTFRS サービスを起動します。
8. FRS 再開の確認
イベント ビューアーを起動して [アプリケーションとサービス ログ] - [Microsoft] - [ファイル レプリケーション サービス] のイベントログに、ソース: NtFrs、ID: 13516 のイベントが記録されることを待ちます。
9. SYSVOL 共有の確認
コマンド プロンプトを起動し、net share コマンドを実行して、下記のように SYSVOL フォルダーと NETLOGON フォルダーが共有されていることを確認します。
- 補足
レジストリエディタの誤った使用は、システム全般に渡る重大な問題を引き起こす可能性があります。 こうした問題を解決するためには、Windows をインストールしなおさなければいけません。 Microsoft では、レジストリエディタを使用することによって引き起こされた障害の解決については、一切保証しておりません。 レジストリエディタを使用する場合には、お客様の責任において使用してください。
「コミュニティにおけるマイクロソフト社員による発言やコメントは、マイクロソフトの正式な見解またはコメントではありません。」