イベント ID 2104 が記録され、DFSR が停止する

Last Update: feedback 共有

本記事はマイクロソフト社員によって公開されております。

こんにちは。Windows Commercial Support Directory Services チームです。
今回は DFSR で非常に多くの更新が発生したことに起因して、DFSR での複製が停止してしまう事象についてご案内いたします。

概要

DFSR を利用してファイルの複製を行っている環境で、イベント ID: 2104 (Error: 9214 (内部データベース エラー (-1078))) が記録され、DFSR の複製が停止する場合があります。
本事象は、一般的に、ファイルに対して非常に多くの更新が行われたことによって発生いたします。
DFSR のバージョン番号の管理には 32 ビットのカウンターが設けられており、約 20 億のバージョン管理を行うことができますが、ファイルに対して非常に多くの更新が行われ、このバージョン番号の上限に達すると上記のエラーが発生します。

なお、このバージョン番号の使用状況については追跡する方法はなく、ファイル更新が過度に行われているかどうかは確認することができません。
また、回避方法もレプリケーション対象のファイルの更新頻度を減らす以外はなく、事象が発生した場合はデータベースの再作成を実施すること以外の方法はありません。

※ ユーザー プロファイルを DFSR で複製している場合に、上記の事象が発生する事例が報告されています。
以下の公開情報にも記載されている通り、移動ユーザー プロファイルやフォルダー リダイレクトの構成において、プロファイルの保存先のファイル サーバーを DFSR で同期させる構成はサポートされていません。

タイトル: DFS-R と DFS N の展開シナリオのマイクロソフトのサポート ポリシーについての情報
URL: https://learn.microsoft.com/ja-JP/troubleshoot/windows-server/networking/support-policy-for-dfsr-dfsn-deployment

対処手順

根本的な対処としては、レプリケーション対象のファイルの更新頻度を減らす必要がありますが、事象が発生してしまった場合の対処方法として、データベースの再作成の手順について案内します。
具体的には、後述の手順によりデータベースを初期化することで、DFSR の初期同期を開始し、レプレケーション状態を回復します。

なお、データベースの初期化となりますので、複製領域に格納されている実ファイルなどを削除したりするわけではありません。
(同名のファイルが存在する場合、ハッシュ値の比較を行い、ハッシュ値が一致する場合はファイルをダウンロードせず、データベース レコードの更新のみを行う動作となりますので、実ファイルを必ずすべて複製しなおすといった動作にはなりません)

以下では、GUI による手順と CUI による手順の 2 つの手順をご案内させていただきます。

GUI による手順


[1] レプリケーション グループの削除


  1. 管理者権限で複製元サーバーにログオンします。
  2. [DFSの管理] を起動します。
  3. 対象のレプリケーション グループを選択し、右クリックから [削除] します。
  4. 以下のコマンドを実行して AD に DFSR の情報を削除したことを伝達します。

dfsrdiag pollad

  1. 同様に複製先サーバーでも管理者権限で起動したコマンドプロンプトにて dfsrdiag pollad を実行します。

[2] データベースの削除


  1. 各サーバーにて以下のコマンドを実行し、DFSR のサービスを停止します。

net stop dfsr

  1. 複製元サーバーにて、ドライブ直下の隠しフォルダーに移動します。

例:Dドライブの場合

cd “d:\System Volume Information\DFSR”
※対象レプリケーショングループで利用するドライブを指定ください

  1. 以下のコマンドを実行してデータベースを削除します。

rmdir config /s
※ 別のプロセスで使用中とメッセージが出力されてもオペレーションを継続してください。

rmdir database_XXXXXXX /s
※ XXXX にはお客様環境での英数字が記載されますので、一度 dir コマンドを実行してフォルダー名をご確認ください。

  1. 同様に複製先サーバーでも、2, 3 の手順を実行します。

[3] レプリケーション グループの再作成


  1. 両方のサーバーにてデータベースを削除したら、サービスを起動させます。

net start dfsr

  1. 複製元サーバーにて、[DFS の管理] から再度レプリケーション グループを再作成します。
    ※ 再作成するときにプライマリ メンバーを複製元サーバーとし、複製先サーバーをメンバーとして設定を元に戻します。

  2. レプリケーション グループの作成が完了したら、両方のサーバーにて以下のコマンドを実行して AD に DFSR の情報を伝達します。

dfsrdiag pollad

  1. 時間を置き、DFSRが正常に動作していることをご確認ください。

CUI による手順


[1] レプリケーション グループの削除


  1. 管理者権限で複製元サーバーにログオンします。
  2. Windows PowerShell を起動します。
  3. 以下のコマンドを実行し、対象のレプリケーション グループを削除します。

Remove-DfsReplicationGroup -GroupName “<レプリケーション グループ名>” -RemoveReplicatedFolders -Domain “<ドメイン名>”

<例>

Remove-DfsReplicationGroup -GroupName “repgroup01” -RemoveReplicatedFolders -Domain “contoso.local”

  1. 以下のコマンドを実行して AD に DFSR の情報を削除したことを伝達します。

Update-DfsrConfigurationFromAD

  1. 同様に複製先サーバーでも管理者権限で起動した Windows PowerShell にて Update-DfsrConfigurationFromAD を実行します。

[2] データベースの削除


  1. 各サーバーにて以下のコマンドを実行し、DFSR のサービスを停止します。

Stop-Service DFSR

  1. 複製元サーバーにて、ドライブ直下の隠しフォルダーに移動します。

例:Dドライブの場合

cd “d:\System Volume Information\DFSR”
※ 対象レプリケーショングループで利用するドライブを指定ください

  1. 一度 dir コマンドを実行してフォルダー名を確認します。

  2. 以下のコマンドを実行してデータベースを削除します。

Remove-Item config -Recurse -Force
※ 別のプロセスで使用中とメッセージが出力されてもオペレーションを継続してください。

Remove-Item database_XXXXXXX -Recurse -Force
※ XXXX にはお客様環境での英数字が記載されますので、3 の手順で確認したフォルダー名に変更してください。

  1. 同様に複製先サーバーでも、2 ~ 4 の手順を実行します。

[3] レプリケーション グループの再作成


  1. 両方のサーバーにてデータベースを削除したら、サービスを起動させます。

Start-Service DFSR

  1. 複製元サーバーにて、再度レプリケーション グループを再作成します。
    ※ 再作成するときにプライマリ メンバーを複製元サーバーとし、複製先サーバーをメンバーとして設定を元に戻します。

New-DfsReplicationGroup -GroupName “<レプリケーション グループ名>”
New-DfsReplicatedFolder -GroupName “<レプリケーション グループ名>”-FolderName “<フォルダー名>”
Add-DfsrMember -GroupName “<レプリケーション グループ名>”-ComputerName “<複製元サーバー名>”,”<複製先サーバー名>”
Add-DfsrConnection -GroupName “<レプリケーション グループ名>” -SourceComputerName “ <複製元サーバー名>” –DestinationComputerName “<複製先サーバー名>”
Set-DfsrMembership -GroupName “<レプリケーション グループ名>” -FolderName “<フォルダー名>” -ContentPath “<フォルダーパス>” -ComputerName “<複製元サーバー名>” -PrimaryMember $True -StagingPathQuotaInMB “<ステージング領域のサイズ>”
Set-DfsrMembership -GroupName “<レプリケーション グループ名>”-FolderName “<フォルダー名>” -ContentPath “<フォルダーパス>” -ComputerName “<複製先サーバー名>” -StagingPathQuotaInMB “<ステージング領域のサイズ>”

<例>

New-DfsReplicationGroup -GroupName repgroup01
New-DfsReplicatedFolder -GroupName repgroup01 -FolderName test1
Add-DfsrMember -GroupName repgroup01 -ComputerName “2012R2SV01”,”2012R2SV02”
Add-DfsrConnection -GroupName repgroup01 -SourceComputerName 2012R2SV01 –DestinationComputerName 2012R2SV02
Set-DfsrMembership -GroupName repgroup01 -FolderName test1 -ContentPath C:\test1 -ComputerName 2012R2SV01 -PrimaryMember $True -StagingPathQuotaInMB 4096
Set-DfsrMembership -GroupName repgroup01 -FolderName test1 -ContentPath C:\test1 -ComputerName 2012R2SV02 -StagingPathQuotaInMB 4096

  1. レプリケーション グループの作成が完了したら、両方のサーバーにて以下のコマンドを実行して AD に DFSR の情報を伝達します。

Update-DfsrConfigurationFromAD

  1. 時間を置き、DFSR が正常に動作していることをご確認ください。

更新履歴

2022/10/17 : 本ブログの公開