MaxOfflineTimeInDays (既定値 60 日) を超過したために、SYSVOL の複製が停止してしまった場合の対処策

Published Date: feedback 共有

こんにちは。Windows Commercial Support Directory Services チームです。

本日は、SYSVOL の複製が止まってしまった場合に回復する手順をご案内いたします。
SYSVOL の複製は、何らかの原因にて MaxOfflineTimeInDays (既定値 60 日) 以上、複製ができない状態が続くと停止します。
この時、DFS Replication のイベント ログに イベント ID: 4012 が記録されます。

上記の状態に陥ったときには、以下の手順にて SYSVOL の初期化を実施します。
初期化といっても、SYSVOL のデータが消えるわけではなく、マスターにする DC を指定し、それ以外の DC は、マスターに指定した DC から、データをコピーします。
※ マスターには、最も新しく正しい SYSVOL の内容を保持している DC を選択してください。他の DC は、マスターのデータと同じ内容になります。
※ 念のため、作業前に各 DC の SYSVOL フィルター(C:\Windows\SYSVOL) 配下のデータを事前にバックアップしてください。

なお、文末では補足情報として、SYSVOL の初期化を行うサンプル スクリプトもあわせてご紹介しておりますので、よろしければご参照ください。


[1] 事前準備 (DFS 管理ツールの導入)

概要・影響 :
ドメイン内の全 DC で DFS 管理ツールをインストールします。
ツールのインストールのみとなりますため、DC で新たなサービスが起動することや動作に影響が発生することはございません。

手順 :

  1. DC に管理者としてログオンします。

  2. [サーバー マネージャー] を起動後、[ダッシュボード] - [役割と機能の追加] をクリックします。

  3. [開始する前に] 画面が起動するので、[次へ] ボタンをクリックします。

  4. [インストールの種類] 画面が起動するので、[役割ベースまたは機能ベースのインストール] オプション ボタンが選択されていることを確認後、[次へ] ボタンをクリックします。

  5. [サーバーの選択] 画面が起動するので、操作している対象の DC が選択されていることを確認後、[次へ] ボタンをクリックします。

  6. [サーバーの役割] 画面が起動するので、何も選択せずに [次へ] ボタンをクリックします。

  7. [機能] 画面が起動するので、以下を展開し、”DFS 管理ツール” チェック ボックスを “オン” にし、[次へ] ボタンをクリックします。

[リモート サーバー管理ツール]
-[役割管理ツール]
-[ファイル サービス ツール]
-[DFS 管理ツール]

  1. [確認] 画面が起動するので、[インストール] ボタンをクリックします。
    ※ インストール後の再起動は不要です。

[2] 複製の初期化

  1. ドメイン内の全 DC でコマンド プロンプトを管理者権限で開き、以下のコマンドを実行し、DFSR サービスを停止します。
    ※ 複製元と複製先を含め、全 DC で同時に停止状態にしておきます。

    net stop dfsr

  2. マスターの 複製元 で [スタート] - [管理ツール] - [ADSI エディター] を起動します。

  3. [ADSI エディター] 画面の左ペインから [ADSI エディター] を右クリックし、[接続] を選択します。

  4. 既定の設定のまま [OK] を押します。

  5. [ADSI エディター] 配下に [既定の名前付けコンテキスト (サーバー名)] が表示されます。

  6. 左ペインの [既定の名前付けコンテキスト] を展開し、以下のパスに移動します。

    [DC=<ドメイン名>] - [OU=Domain Controllers] - [CN=複製元] - [CN=DFSR-LocalSettings] - [CN=Domain System Volume]

  7. 右ペインに表示された [CN=SYSVOL Subscription] を右クリックし、[プロパティ] を選択します。

  8. [属性エディター] タブから以下の属性を確認し、以下の設定値を入力して [OK] をクリックします。

    属性: msDFSR-Enabled
    設定値: FALSE

    属性: msDFSR-options
    設定値: 1

  9. 続けて、左ペインで、以下のパスに移動します。
    ※ マスター以外の DC が複数台ある環境では、以下の「複製先」に関する設定および手順は、複製元 (マスター) 以外のすべての DC について同様に実施します。

    [DC=<ドメイン名>] - [OU=Domain Controllers] - [CN=複製先] - [CN=DFSR-LocalSettings] - [CN=Domain System Volume]

  10. 右ペインに表示された [CN=SYSVOL Subscription] を右クリックし、[プロパティ] を選択します。

  11. [属性エディター] タブから以下の属性を確認し、以下の設定値を入力して [OK] をクリックします。

    属性: msDFSR-Enabled
    設定値: FALSE

  12. ADSI エディターを操作した 複製元 上で、コマンド プロンプトより下記のコマンドを実行して、設定した内容を他の DC へ複製させます。

    repadmin /syncall /APe

  13. マスターの 複製元 で DFSR サービスを再開します。
    ※DFS Replication ログにイベント ID: 4114 が記録されることを確認します。

    net start dfsr

  1. 続いて、ADSI エディターから、マスターの 複製元 に関する msDFSR-Enabled の値を変更します。

    [DC=<ドメイン名>] - [OU=Domain Controllers] - [CN=複製元] - [CN=DFSR-LocalSettings] - [CN=Domain System Volume] 配下の CN=SYSVOL Subscription

    属性: msDFSR-Enabled
    設定値: TRUE

  2. コマンド プロンプトより下記のコマンドを実行して、設定した内容を他の DC へ複製させます。

    repadmin /syncall /APe

  3. マスターの 複製元 でコマンド プロンプトより下記のコマンドを実行して、同期を開始します。
    ※DFS Replicationログにイベント ID: 4602 が記録されることを確認します。

    dfsrdiag pollad

  1. 複製先 で DFSR サービスを再開します。
    ※DFS Replicationログにイベント ID: 4114 が記録されることを確認します。

    net start dfsr

  1. 続いて、複製元 上でADSI エディターから、マスター以外の 複製先 に関する msDFSR-Enabled の値を変更します。

    [DC=<ドメイン名>] - [OU=Domain Controllers] - [CN= 複製先] - [CN=DFSR-LocalSettings] - [CN=Domain System Volume] 配下の CN=SYSVOL Subscription

    属性: msDFSR-Enabled
    設定値: TRUE

  2. 複製元 上で、コマンド プロンプトより下記のコマンドを実行して、設定した内容を他の DC へ複製させます。

    repadmin /syncall /APe

  3. 複製先 上で、コマンド プロンプトを開き、以下のコマンドを実行します。
    ※DFS Replication ログにイベント ID: 4614 および 4604 が記録されることを確認します。

    dfsrdiag pollad

  1. 複製先 上で、net share コマンドを実行し、SYSVOL、および NETLOGON が共有されていることを確認します。

[3] SYSVOL 複製の確認

SYSVOL の複製状態に問題がないかを以下の手順にて確認します。

  1. 複製元 上で以下のフォルダーにアクセスします。

    C:\Windows\SYSVOL\domain\Policies

  2. テスト用のテキストファイルをフォルダー配下に保存します。

  3. 複製先 上で以下のフォルダーにアクセスします。

    C:\Windows\SYSVOL\domain\Policies

  4. 複製元 にて作成したテキスト ファイルがコピーされていることを確認したら、ファイルを削除します。

  5. 複製元 上でも当該ファイルが削除されているかを確認します。


【補足】 PowerShell スクリプトを利用して実施する方法

上記 [1],[2] の SYSVOL 複製の初期化作業 は、弊社のアーカイブ記事で公開されている PowerShell スクリプトを利用しても実施可能です。
※本スクリプトは Azure IaaS 上の検証ラボ環境を題材としたアーカイブ記事で公開されているものですが、処理内容は DFSR で複製される SYSVOL の権威的 / 非権威的同期の強制方法に準拠しており、オンプレミス環境でも同様にご利用いただけます。

Authoritative Restore of SYSVOL after Deallocation of Azure DCs

DC が多数存在する環境などで、ADSI エディターによる手作業を各 DC で繰り返すのが煩雑な場合に、本スクリプトのご利用をご検討ください。
スクリプトは任意 1 台の DC で実行するか、または「AD DS および AD LDS ツール」RSAT モジュールが導入されたマシンで、各 DC へのリモート操作 (Invoke-Command) が可能な状態で実行します。

【スクリプト実行に関する注意事項】
・必ず全 DC を起動し、稼働している状態で実行してください。一部の DC が停止した状態では正しく動作しません。
・Domain Admins 権限で実行してください。
・スクリプト実行後は、本記事の [3] SYSVOL 複製の確認 の手順にて、SYSVOL 共有が復旧していることを確認してください。
・既定では取得順の先頭の DC ($domainControllers[0]) がマスター になります。マスターにしたい DC を明示的に指定する場合は、コメントにあるとおり Get-ADDomainController -Identity <DC_Hostname> で指定してください。
つまり、マスターを手動で指定する場合は、コメント行を除いたスクリプトの 2 行目を書き換える必要があります。
変更前:$primaryDC = $domainControllers[0]
変更後:$primaryDC = Get-ADDomainController -Identity DC01.contoso.com

【スクリプトで実行される内容】
このスクリプトは、ブログ本文 [2] 複製の初期化(ADSI エディターでの手作業) と同じ「SYSVOL の権威的/非権威的同期(D4/D2)」を、ドメイン内の全 DC に対して自動で一括実行するものです。

全体の流れ
1.DC の一覧取得とマスター選定:ドメイン内の全 DC を取得し、先頭の DC をマスター(権威)に設定します。
2.DFSR サービス停止(全 DC):属性変更を反映する前に、全 DC で DFSR を停止します。
3.SYSVOL 複製の無効化(D2 / 非権威化):全 DC の msDFSR-Enabled を FALSE に設定し、変更を全 DC へ複製します。
4.DFSR を起動 → 20 秒待機 → 停止(全 DC):いったん起動して無効化設定を DFSR に認識させ、再度停止します。
5.権威指定と複製の再有効化(D4 / 権威化):マスターに msDFSR-Options=1 を設定し、全 DC の msDFSR-Enabled を TRUE に戻して全 DC へ複製します。
6.DFSR サービス起動(全 DC) :複製を再開します。マスターが正本となり、他の DC はマスターから再同期します。

【スクリプトおよび実行方法】

以下のスクリプトをメモ帳などのエディターにコピーし、コメント行を除いた 2 行目の $primaryDC = $domainControllers[0] を、マスターにしたい DC を指定する形(例: $primaryDC = Get-ADDomainController -Identity “DC01.contoso.com”)に書き換えます。
その後、ファイルを .ps1 拡張子で保存し、管理者権限で起動した PowerShell から実行します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# ローカル ドメイン内のすべての DC の一覧を取得します
$domainControllers = Get-ADDomainController -Filter *

# リスト先頭の DC を DFSR のマスター (プライマリ メンバー) として使用します
# 特定の DC を指定したい場合は Get-ADDomainController -Identity <DC_Hostname> を使用します
$primaryDC = $domainControllers[0]

# すべての DC で DFSR を停止します
foreach ($dc in $domainControllers)
{
Invoke-Command -ComputerName $dc.HostName -ScriptBlock {Stop-Service DFSR}
}

# DFSR サブスクリプション オブジェクトを変更して AD 上の SYSVOL レプリカを無効化し、複製します
foreach ($dc in $domainControllers)
{
$sysvolSubscriptionObject = "CN=SYSVOL Subscription,CN=Domain System Volume,CN=DFSR-LocalSettings," + $dc.ComputerObjectDN
Get-ADObject -Identity $sysvolSubscriptionObject | Set-ADObject -Server $primaryDC -Replace @{"msDFSR-Enabled"=$false}
Get-ADDomainController -filter * | foreach {Sync-ADObject -Object $sysvolSubscriptionObject -Source $primaryDC -Destination $_.hostname}
}

# すべての DC で DFSR を起動し、その後停止します
foreach ($dc in $domainControllers)
{
Invoke-Command -ComputerName $dc.HostName -ScriptBlock {Start-Service DFSR}
Start-Sleep -Seconds 20
Invoke-Command -ComputerName $dc.HostName -ScriptBlock {Stop-Service DFSR}
}

# DFSR サブスクリプションを変更して AD 上の SYSVOL レプリカを有効化し、マスターを設定します
# これらの変更を強制的に複製します
$sysvolSubscriptionObject = "CN=SYSVOL Subscription,CN=Domain System Volume,CN=DFSR-LocalSettings," + $primaryDC.ComputerObjectDN
Get-ADObject -Identity $sysvolSubscriptionObject | Set-ADObject -Server $primaryDC -Replace @{"msDFSR-Options"=1}

foreach ($dc in $domainControllers)
{
$sysvolSubscriptionObject = "CN=SYSVOL Subscription,CN=Domain System Volume,CN=DFSR-LocalSettings," + $dc.ComputerObjectDN
Get-ADObject -Identity $sysvolSubscriptionObject | Set-ADObject -Server $primaryDC -Replace @{"msDFSR-Enabled"=$true}
Get-ADDomainController -filter * | foreach {Sync-ADObject -Object $sysvolSubscriptionObject -Source $primaryDC -Destination $_.hostname}
}

# すべての DC で DFSR を起動します
foreach ($dc in $domainControllers)
{
Invoke-Command -ComputerName $dc.HostName -ScriptBlock {Start-Service DFSR}
}

本スクリプトは、弊社の公開情報として公開され、世界中で多くのご利用実績があるものでございますが、サンプル スクリプトという位置づけのため、お客様ご自身による十分な動作確認を前提としております。

公開情報

How to troubleshoot missing SYSVOL and Netlogon shares

変更履歴

2026/6/22: 一部文面の更新
2026/6/25: 「データベースの初期化」手順を削除し、PowerShell スクリプトによる実施方法を追加