FRS から DFSR への移行 (SYSVOL)

今回は Active Directory の SYSVOL の複製を従来の File Replication Service (FRS) から Distributed File System Replication (DFSR) に移行する手順についてお伝えします。また、各手順にて実施される内部処理についても詳細な部分まで可能な限り記載します。(長くなります。手順だけが知りたい場合には “4) DFSR に安全に移行する為の手順” を確認してください。)

1) DFSR を利用する条件と利点について

========================== SYSVOL 複製に DFSR を利用するにはドメイン機能レベルが Windows Server 2008 以上である必要があります。その為、ドメイン内に Windows Server 2003 R2 など Windows Server 2008 よりも前の OS のドメイン コントローラーが存在する場合には利用できません。(DFSR 自体は Windows Server 2003 R2 から利用できますが、SYSVOL 複製には利用できません。)

そもそもなぜ FRS ではなく DFSR に移行するのか?
FRS は Windows 2000 Server から利用している複製サービスです。Windows Server 2003 R2 からこれの進化版の DFSR が利用でき、Windows Server 2008 から DFSR を Active Directory の SYSVOL 複製にも利用できるようになりました。DFSR は FRS の進化版なので、より安定した複製サービスを提供できるようになっていますが、特に大きな利点として主に以下があげられます。

DFSR では差分のみを複製する為、ネットワークの負荷が削減されます。

ファイルに変更が加えられた場合、FRS はそのファイル全体を複製していました。

DFSR は Journal Wrap Error から自動復旧できます。

FRS では Journal Wrap Error が発生すると管理者が復旧するまで複製サービスは停止された状態となっていました。DFSR では自動復旧機能が組み込まれており、この問題による影響も最小限で抑えられます。Journal Wrap Error については以下の技術情報等に記載されています。

Sysvol および DFS レプリカ セットの Journal_Wrap エラーのトラブルシューティング https://support.microsoft.com/kb/292438/ja

2) 今どっちを使っているのか?

========================== 手順を紹介する前に、現在 FRS もしくは DFSR のどちらを利用して SYSVOL を複製しているのか確認方法を見ていきましょう。
ドメイン機能レベルを Windows Server 2008 以上で新規構築した場合、SYSVOL の複製には既定で DFSR が利用されます。しかし Windows Server 2008 未満のドメイン機能レベルで構築されている環境では、たとえその後ドメイン機能レベルを Windows Server 2008 以上に変更しても、手動で DFSR を使用するよう、移行しない限りは FRS が利用され続けます。現在のドメイン環境でどちらを利用しているかがわからない場合には ADSIEdit で CN=Domain System Volume (SYSVOL share) コンテナがどこに格納されているかで判断します。以下のように CN=File Replication Services 配下にある場合には FRS が利用されています。CN=DFSR-GlobalSettings 配下に CN=Domain System Volume というコンテナが存在する場合には既に DFSR が利用されている為、今回紹介する手順を実行する必要はありません。(DFSR によるレプリケーションがまったく構成されていない環境では CN=DFSR-GlobalSettings は存在しません。移行処理を既に実施している場合には CN=File Replication Services 配下に CN=Domain System Volume が空の状態で残ります。両方にある場合は移行途中の状態である事が考えられます。)

//FRS を利用している場合image

//DFSR を利用している場合 (DFSR に移行済みの場合には以下のように空のコンテナが残ります。) 
image 

3) 移行時の内部処理について

========================== 管理者は dfsrmig.exe のコマンドを数回実行するだけで移行処理は自動的に進む為、DFSR への移行手順は難しくありません。しかし、これではバックグラウンドでどういう処理がされているのかがわからない上、問題が発生してしまった場合にトラブルシュートができないので、内部的な処理も含めて移行手順について見ていきましょう。

- Migration State について DFSR への移行には dfsrmig.exe を利用して、移行したい状態 (Migration state) を指定します。 Migration State は格納される場所が 2 箇所 (Local/Global) あります。また、状態には 10 種類 (0-9) ありますが、4-9 まではローカルでのみ使用される Migration State になります。

Dfsrmig.exe で Migration State を指定すると、この指定された値は AD データベースに格納されます。この AD に格納されている設定値を Global Migration State と呼び、各ドメイン コントローラーが目標とする状態を示します。各ドメイン コントローラーはローカルの状態も保持していて、この状態を Local Migration State と呼びます。DFSR への移行処理は、各ドメイン コントローラーにて自身の状態 (Local Migration State) が AD に格納されている目標とする状態 (Global Migration State) と異なる事が分かると、DFSR.exe により状態を移行するために必要な処理が実施されます。

次に 10 種類の Migration State について。 Migration State は以下のように合計で 10 種類あります。

数値 英語 日本語
0 Start 開始
1 Prepared 準備完了
2 Redirected リダイレクト済み
3 Eliminated 削除済み
4 Preparing 準備中
5 Waiting For Initial Sync 初期同期の待機中
6 Redirecting リダイレクト中
7 Eliminating 削除中
8 Undo Redirecting リダイレクトの取り消し中
9 Undo Preparing 準備の取り消し中

実際の移行の流れについては図の方が分かりやすいので、以下の図を基に説明します。image

dfsrmig.exe で Global Migration State として設定できる移行状態は 0, 1, 2, 3 の 4 つあり、0 が移行開始、 3 が DFSR への移行が完了した状態を意味します。他の 5 つ (4,5,6,7,8,9) の状態は移行中の状態を示し、各ドメイン コントローラーで処理が進むにつれて Local Migration State に設定されていきます。数字が飛びまわるので覚えにくいですが、管理者が Global Migration State を順番に 0 –> 1 –> 2 –> 3 と設定する事により、各 DC ではこれを目標として処理が進み Local Migration State が 0 –> 4 –> 5 –> 1 –> 6 –> 2 –> 7 –> 3 と進みます。残りの 2 つの移行状態 (8,9) はロールバックの際に利用されます。移行状態が 3 になっていなければ処理をロール バックでき、以下のように 2 -> 8 -> 1 -> 9 -> 0 と処理が戻されます。

image 

- 各コマンドで実施される内部処理について DFSR への移行は管理者が 1 台の DC (可能な限り PDC) で以下のコマンドを順に実行する事により実施されます。
     dfsrmig.exe /CreateGlobalObjects
     dfsrmig.exe /SetGlobalState 1
     dfsrmig.exe /SetGlobalState 2
     dfsrmig.exe /SetGlobalState 3
これらコマンドにより Global Migration State の値が 0->1->2->3 と変更されていきます。各ドメイン コントローラーは自身の状態 (Local Migration State) が Global Migration State と異なる場合には、各ドメインコントローラーのローカル処理として Local Migration State を Global Migration State と同じ状態にする為に必要な処理が実施されます。この時に発生する内部処理について説明します。

State 0 ( 開始 ) DFSR への移行にはまず管理者が dfsrmig.exe /CreateGlobalObjects を実行する事により開始されます。このコマンドを実行する事で以下の処理が実施されます。

 

内部処理

Global Migration State を 0 に設定します。
AD Database (CN=DFSR-GlobalSettings,CN=System,DC=contoso,DC=com) に DFSR が後で利用する情報を書き込みます。

上記変更内容が各ドメイン コントローラーに AD の複製により反映され、各ドメイン コントローラーの Local Migration State が 0 になります。

State 1 ( 準備完了 ) 次に管理者は dfsrmig.exe /setglobalstate 1 を実行し、Global Migration State を 1 に変更します。各ドメインコントローラーでは自身の状態 (Local Migration State) が 0 なので、これを Global Migration State と同じ 1 にする為に各ドメイン コントローラーでは以下の処理が実施されます。

内部処理

SYSVOL のフォルダと同じディレクトリに SYSVOL_DFSR フォルダを作成します。この時、ACL の設定は SYSVOL と同じ設定になります。
Robocopy を用いて SYSVOL の内容が SYSVOL_DFSR にコピーします。
DFSR の複製に使用する情報を構成します。正確にはドメイン コントローラーが DFSR の複製をおこなうメンバとして追加され、複製のトポロジ情報が作成されます。
DFSRによるドメイン コントローラーの SYSVOL_DFSR フォルダの初期複製を実施します。初期複製が終わるまでの間は Local Migration State が 5 (初期同期の待機中) になります。
初期複製が完了すると Local Migration State が 1 (準備完了) になります。

上記変更内容が完了すると、SYSVOL_DFSR が DFSR により同期されている状態となりますが、SYSVOL 共有はまだ FRS を利用しています。

State 2 ( リダイレクト済み ) 次に管理者は dfsrmig.exe /setglobalstate 2 を実行し、Global Migration State を 2 に変更します。これまでの処理と同様、この情報が各ドメインコントローラーに複製され、 Local Migration State と比較されます。Local Migration State が 1 の場合にはこれを 2 にする為に必要な処理が実施されます。 (まだ Local Migration State が 1 にもなっていない場合にはまず 0->1 の処理が実施された後 1->2 への処理が実施されまるので、最終的には同じ状態になります。) 1->2 への処理は以下の通りです。

内部処理

ドメイン コントローラーの SYSVOL 共有をこれまでの FRS が同期している SYSVOL から DFSR が同期している SYSVOL_DFSR に切り替えます。

ここが今回の FRS から DFSR への移行処理内で唯一ダウンタイムが発生する処理になります。可能な限りダウンタイムが最小限になるように実装されていますが、ここの処理で SYSVOL 共有を従来の SYSVOL から SYSVOL_DFSR に変更される為、どうしても一時的に SYSVOL 共有を参照できない状態になってしまいます。この処理が完了し Local Migration State が 2 になったドメイン コントローラーでは SYSVOL 共有が SYSVOL_DFSR を指すようになります。(net share の実行結果から確認できます。)
補足:この段階ではまだ後戻りができます。DFSR への移行をやめたい場合には dfsrmig.exe /setglobalstate 1 もしくは dfsrmig.exe /setglobalstate 0 を実行する事により、戻りたい状態にロールバックされます。

State 3 ( 削除済み ) 最後に管理者は dfsrmig.exe /setglobalstate 3 を実行し、Global Migration State を 3 にします。一度 Global Migration State が 3 に設定されると、ロールバックはできないので、ご注意ください。各ドメイン コントローラーでは Local Migration State を 2->3 にする為に以下の処理が実施されます。

内部処理

FRS の複製情報が AD データベースから削除されます。これにより FRS による複製は実施されなくなります。
古い SYSVOL フォルダが削除されます。

この処理が完了することにより、無事 DFSR への移行が完了します。

4) DFSR に安全に移行する為の手順

========================== これまでは記載していませんが、各コマンドを順に実行する必要は必ずしもありません。仮に管理者が dfsrmig.exe で順に Global Migration State を上げるのではなく、いきなり dfsrmig.exe /SetGlobalState 3 だけを実行した場合でも、各ドメインコントローラーは自身の状態 (Local Migration State = なし) を Global Migration State である 3 を目標として処理をする為、最終的には全ドメイン コントローラーの状態は更新されます。しかし、この場合、各 DC が個別に処理を実施し、ドメイン コントローラー間の状態がばらばらになる為、DC 複数台ある環境ではダウンタイムが発生してしまう可能性があります。サイトが分かれている場合等には複製のタイミングによりさらにダウンタイムが長くなってしまいます。また、 State 3 のところでも記述しましたが、いきなり State 3 を指定した場合には、何か問題が発生しても dfsrmig.exe を使用してロールバックをすることができません。

その為、ここでは可能な限り安全に (ダウンタイムを可能な限り短く、障害がないように) FRS から DFSR に移行する為の手順をまとめます。基本的には dfsrmig.exe /GlobalMigrationState で状態を上げる度に dfsrmig.exe /GetMigrationState で全台の移行が完了したかを確認する事で十分ですが、より確実に確認したいという方の為に確認用件をさらに追加してあります。

1. 現在正常に動作している事を確認。 まずは各種イベント ログに問題を示す警告やエラーがないか、DCDIAG /V の実行結果にエラーはないか等を確認し、各ドメイン コントローラーが正常に動作しているかを確認してください。DFSR への移行には AD としての複製が問題なく実施できている事が必須になります。(Global Migration State や DFSR の構成情報が AD のデータベース内に保持され、これらが複製により各ドメイン コントローラーに渡っていきます。) また、現在 FRS が複製している SYSVOL の情報も利用する為、各ドメイン コントローラー間で SYSVOL 内の情報が同期できている事も大事です。

. 全ドメイン コントローラーの完全バックアップを採取します。 どれだけ準備をしていても予期せぬ問題が発生する可能性は必ずあります。こういった場合の復旧作業ではバックアップがあるかないかで大きく障害復旧にかかる時間が変わります。ドメインコントローラーでバックアップからのリストアを実施する場合、必ず TombStone LifeTime (条件によりますが、既定では短くて 30 日) 以内のバックアップが必要になります。実際に多くのお問い合わせではバックアップがない事により障害復旧に必要以上に時間がかかったり、復旧できない事もありますので、作業前に最新の状態のバックアップを採取する事を強くお勧めいたします。

3. ドメイン機能レベルを Windows Server 2008 以上に更新します。 ここからの作業はすべて PDC の役割を保持しているドメインコントローラーのみで実行してください。(正確には PDC で実行しなかった場合にも処理は成功しますが、他のドメイン コントローラーで作業した場合にも、最終的には PDC と通信し変更を加えます) PDC の役割を保持しているドメイン コントローラーを特定するにはコマンド プロンプトから netdom query fsmo を実行します。

ドメイン機能レベルは [Active Directory ユーザーとコンピューター] からドメイン名を右クリックし、[ドメインの機能レベルの昇格] から上げます。”現在のドメインの機能レベル” が Windows Server 2008 になっていない場合には Windows Server 2008 に上げて下さい。

image 

4. dfsrmig.exe /CreateGlobalObjects を実行します。 dfsrmig.exe /CreateGlobalObjects を実行し、DFSR への移行処理を開始します。この処理が完了すると AD データベース内にいくつかの情報が追加されます。

image 
処理が完了したかどうかは以下のように確認します。
- 確認方法1: Global Migration State の確認
dfsrmig.exe /GetGlobalState を実行し、Global Migration State が正しく 0 (開始) になっているかを確認します。正常時には以下のように表示されます。

image 
- 確認方法2: Local Migration State の確認
dfsrmig.exe /GetMigrationState を実行し、各ドメイン コントローラーの Local Migration State が 0 (開始) になっているかを確認します。以下のように同期が取られている旨が表示されれば、処理は完了しています。

image 
- 確認方法3: AD データベースの状態を確認
adsiedit で CN=DFSR-GlobalSettings,CN=System,DC=contoso,DC=com が作成されている事を確認します。

5. dfsrmig.exe /SetGlobalState 1 を実行します。 dfsrmig /SetGlobalState 1 を実行し、状態 1 (準備完了) へ移行します。この処理では新しい SYSVOL フォルダ (SYSVOL_DFSR) が従来の SYSVOL フォルダの内容から作成された後、このフォルダを DFSR を使用して複製するように構成します。(DFSR の初期複製が実施されます。)
image 
この処理が完了しても SYSVOL はまだ従来の FRS の SYSVOL を利用しているので、ユーザーへの影響はありません。SYSVOL 共有の参照先は次の処理で変更される為、この処理が完了するまでに次の処理に進んでしまうと DC 間で異なる状態になり、移行が進んでいる DC では DFSR、移行処理がまだ進んでいない DC では FRS を利用している状態になる可能性があります。これにより、移行処理が完了するまでの間、DC 間でSYSVOL の内容がうまく複製できない状況になる可能性があります。このような状況にならないためにも、次の処理に進む前に必ず以下の “確認方法2” の通り、全ドメイン コントローラーの Local Migration State が 1 (準備完了) になっている事を確認して下さい。

(*1) 状態移行に時間がかかる場合にはサイト間の複製の強制、および Dfsrdiag PollAD を各ドメイン コントローラーにて実行して下さい。Local Migration State が 0 –> 1 になるにはまず Global Migration State が 1 に変更された事が全ドメイン コントローラーに AD の複製により通知された後、その変更を各ローカルの DFSR が検出および処理する必要があります。その為、サイトが分かれている場合にはサイト間の複製を実施する事により、AD の複製を早く完了させる事ができます。AD 情報が複製された後、各ドメイン コントローラーにてdfsrdiag pollad を実行する事により DFSR が AD と同期を取り、最新の情報で更新されます。Local Migration State が 5 (初期同期の待機中) になっている場合には DFSR は既に処理を開始している為、後は DFSR の初期複製が完了するまで待ちます。(通常はないと思いますが、SYSVOL 内に大量のファイルが存在する場合には 1 日以上時間がかかる可能性があります。)

- 確認方法1: Global Migration State の確認
dfsrmig.exe /GetGlobalState を実行し、Global Migration State が正しく 1 (準備完了) になっているかを確認します。正常時には以下のように表示されます。
image 
- 確認方法2: Local Migration State の確認
dfsrmig.exe /GetMigrationState を実行し、各ドメイン コントローラーの Local Migration State が 1 (準備完了) になっているかを確認します。以下のように同期が取られている旨が表示されれば、処理は完了しています。
image
同期が取られていない場合には以下のようにその旨が通知されます。
image 
(*1) の通り、状態がまだ 0 (開始) になっているドメイン コントローラーでは AD の複製を実施後、dfsrdiag pollad を実行する事で待ち時間を短縮できます。状態が 5 (初期同期の待機中) になっている場合には DFSR の処理が完了するのを待つしかありません。
- 確認方法3: AD データベースの状態を確認
adsiedit で CN=Topology,CN=Domain System Volume, CN=DFSR-GlobalSettings,CN=System,DC=contoso, DC=com の中にドメイン コントローラーのコンテナが作成されている事を確認します。以前に比べ DC がレプリケーションパートナーとして追加されている事がわかります。
- 確認方法4: DFSR_SYSVOL フォルダ
SYSVOL と同じディレクトリに SYSVOL_DFSR が作成されている事を確認します。
(既定では C:\WINDOWS\SYSVOL_DFSR)

6. dfsrmig.exe /SetGlobalState 2 を実行します。 dfsrmig.exe /SetGlobalState 2 を実行し、状態 2 (リダイレクト済み) に移行します。 ここでの処理により SYSVOL 共有がこれまでの SYSVOL から新しい SYSVOL_DFSR に切り替わります。その為、一時的なダウンタイムは発生してしまいます。基本的には各 SYSVOL 共有がダウンしている時間は最小限に抑えられるように構成されていますが、状況によってはユーザーの利用率が少ない時間帯に実施する事もご検討下さい。
 image
この処理が正常に完了すると、従来の FRS の SYSVOL フォルダはまだ FRS により複製はされていますが、SYSVOL 共有としてはもう利用されていません。この状況でしばらく運用をして、問題がなければ次の処理 (最後のコマンド) に進み、FRS の SYSVOL を削除します。

- 確認方法1: Global Migration State の確認
dfsrmig.exe /GetGlobalState を実行し、Global Migration State が正しく 2 (リダイレクト済み) になっているかを確認します。
image 
- 確認方法2: Local Migration State の確認
dfsrmig.exe /GetMigrationState を実行し、各ドメイン コントローラーの Local Migration State が 2 (リダイレクト済み) になっているかを確認します。以下のように同期が取られている旨が表示されれば、処理は完了しています。
image 
- 確認方法3: SYSVOL 共有が指す場所の確認。
net share を実行して、SYSVOL 共有が SYSVOL フォルダではなく SYSVOL_DFSR に変更されている事を確認します。
image 
7. dfsrmig.exe /SetGlobalState 3 を実行します。 最後に dfsrmig.exe /SetGlobalState 3 を実行し、状態 3 (削除済み) に移行します。これにより古い FRS の SYSVOL が削除されます。
image  
- 確認方法1: Global Migration State の確認
dfsrmig.exe /GetGlobalState を実行し、Global Migration State が正しく 3 ( 削除済み) になっているかを確認します。正常時には以下のように表示されます。
image 
- 確認方法2: Local Migration State の確認
dfsrmig.exe /GetMigrationState を実行し、各ドメイン コントローラーの Local Migration State が3 (削除済み) になっているかを確認します。以下のように同期が取られている旨が表示されれば、処理は完了しています。
image 
- 確認方法3: SYSVOL が削除されているかの確認
従来の SYSVOL フォルダが削除されている事を確認します。

- 確認方法4: FRS の複製対象から SYSVOL が外れていることを確認。
adsiedit.msc で CN=Domain System Volume (SYSVOL share),CN=File Replication Services, CN=SYSTEM, DC=contoso,DC=com 内に情報が含まれていない事を確認します。(CN=Domain System Volume (SYSVOL share) が空の状態で残ります。)