排查 Windows 停止错误 - 目录服务初始化失败

本文提供的步骤可解决 Azure 中 Active Directory 域控制器虚拟机 (VM) 停滞在循环中并指出需要重启的问题。

症状

使用启动诊断查看 VM 的屏幕截图时,屏幕截图显示 VM 需要重启,因为出现错误,在 Windows Server 2008 R2 中显示停止代码0xC00002E1,或者在 Windows Server 2012 或更高版本中0xC00002E2

显示停止代码0xC00002E2的错误屏幕示例的屏幕截图:你的电脑遇到问题,需要重启。

原因

错误代码 0xC00002E2 表示 STATUS_DS_INIT_FAILURE,错误代码 0xC00002E1 表示 STATUS_DS_CANT_START。 当目录服务出现问题时,这两个错误都会发生。

操作系统启动时,本地安全身份验证服务器 (LSASS.exe) 强制 自动重启,该服务器对用户登录进行身份验证。 如果 VM 上的操作系统是对其本地 Active Directory 数据库没有读/写访问权限的域控制器,则无法进行身份验证。 由于无法访问 Active Directory (AD) ,LSASS.exe 无法进行身份验证,因此必须重启 OS。

此错误可能是由以下任何条件引起的:

  • 无法访问将本地 AD 数据库 (NTDS 的磁盘。DIT) 。
  • 包含本地 AD 数据库的磁盘 (NTDS。DIT) 已用完可用空间。
  • 本地 AD 数据库 (NTDS。缺少 DIT) 文件。
  • VM 具有多个磁盘,并且存储区域网络 (SAN) 策略配置不正确。 SAN 策略未设置为 ONLINEALL,并且非 OS 磁盘在磁盘管理器上以脱机模式附加。
  • 本地 AD 数据库 (NTDS。DIT) 文件已损坏。

解决方案

过程概述

  1. 创建和访问修复 VM。
  2. 磁盘上的可用空间。
  3. 检查包含 AD 数据库的驱动器是否已附加。
  4. 启用目录服务还原模式。
  5. 建议:在重新生成 VM 之前,请启用串行控制台和内存转储收集。
  6. 重新生成 VM。
  7. 重新配置 SAN 策略。

注意

遇到此错误时,来宾 OS 无法正常运行。 你将在脱机模式下进行故障排除以解决此问题。

创建和访问修复 VM

  1. 使用 VM 修复命令的步骤 1-3 准备修复 VM。
  2. 使用远程桌面连接连接到修复 VM。

释放磁盘上的空间

由于磁盘现在已附加到修复 VM,因此请验证包含 Active Directory 内部数据库的磁盘是否有足够的空间来正确执行。

  1. 通过右键单击驱动器并选择 “属性”,检查磁盘是否已满。

  2. 如果磁盘的可用空间小于 300 Mb, 请使用 PowerShell 将其扩展到最大 1 Tb

  3. 如果磁盘已达到 1 Tb 的已用空间,请执行磁盘清理。

    1. 使用 PowerShell 从损坏的 VM 中分离数据磁盘
    2. 从损坏的 VM 分离后, 将数据磁盘附加到 正常运行的 VM。
    3. 使用 磁盘清理工具 释放更多空间。
  4. 可选 - 如果需要更多空间,请打开 CMD 实例并输入 defrag <LETTER ASSIGNED TO THE OS DISK>: /u /x /g 命令以在驱动器上执行碎片化:

  • 在 命令中,将 替换为 <LETTER ASSIGNED TO THE OS DISK> OS 磁盘的字母。 例如,如果磁盘号为 F:,则该命令将为 defrag F: /u /x /g

  • 根据碎片的级别,删除碎片可能需要数小时。

如果磁盘上有足够的空间,请继续执行下一个任务。

检查包含 Active Directory 数据库的驱动器是否已附加

  1. 打开提升的 CMD 实例并运行以下命令:

    1. 加载注册表文件:

      REG LOAD HKLM\BROKENSYSTEM f:\windows\system32\config\SYSTEM

      指定 f: 假定磁盘为驱动器 F:。 使用属于包含 OS 磁盘的驱动器的驱动器号。

    2. 确定 NTDS 的驱动器号和文件夹 。DIT

      REG QUERY "HKLM\BROKENSYSTEM\ControlSet001\Services\NTDS\parameters" /v "DSA Working Directory"
      REG QUERY "HKLM\BROKENSYSTEM\ControlSet001\Services\NTDS\parameters" /v "DSA Database file"
      REG QUERY "HKLM\BROKENSYSTEM\ControlSet001\Services\NTDS\parameters" /v "Database backup path"
      REG QUERY "HKLM\BROKENSYSTEM\ControlSet001\Services\NTDS\parameters" /v "Database log files path"
      
    3. 卸载注册表文件:

      REG UNLOAD HKLM\BROKENSYSTEM

  2. 使用 Azure 门户,验证 NTDS 所在的驱动器。DIT 已设置,已添加到 VM。

  3. 使用来宾 OS 中的磁盘管理控制台,验证磁盘是否包含 NTDS。DIT 处于联机状态。

    1. 可以在管理工具>计算机管理存储中找到磁盘管理工具>,也可以使用 CMD 实例中的 命令进行访问diskmgmt.msc
  4. 如果磁盘未附加到 VM,请重新附加数据磁盘以解决此问题。

    如果磁盘已正常附加,请继续执行下一个任务。

启用目录服务还原模式

将 VM 设置为在 目录服务还原模式 (DSRM) 模式下启动,以绕过检查 NTDS 是否存在。启动期间的 DIT 文件。

  1. 在继续之前,请验证是否已完成将磁盘附加到修复 VM 的先前任务,并确定 NTDS 的磁盘。DIT 文件位于 中。

  2. 使用提升的 CMD 实例,列出该存储上的启动分区信息,以查找活动分区中的标识符:

    bcdedit /store <Drive Letter>:\boot\bcd /enum

    将 替换为 <Drive Letter> 前面步骤中确定的字母。

    屏幕截图显示了 CMD 中命令示例的输出,该示例显示带有标识符的 Windows 启动管理器。

  3. safeboot DsRepair在启动分区上启用 标志:

    bcdedit /store <Drive Letter>:\boot\bcd /set {<Identifier>} safeboot dsrepair

    将 和 < Identifier > 替换为< Drive Letter >前面步骤中确定的值。

  4. 再次查询启动选项,以确保更改已正确设置。

    屏幕截图显示启用 safeboot DsRepair 标志后查询命令的输出。

若要启用内存转储收集和串行控制台,请通过打开提升的命令提示符会话 (以管理员身份) 运行,并运行以下命令来运行以下脚本。

  1. 启用串行控制台:
bcdedit /store <VOLUME LETTER WHERE THE BCD FOLDER IS>:\boot\bcd /ems {<BOOT LOADER IDENTIFIER>} ON
bcdedit /store <VOLUME LETTER WHERE THE BCD FOLDER IS>:\boot\bcd /emssettings EMSPORT:1 EMSBAUDRATE:115200
  1. 验证 OS 磁盘上的可用空间是否至少等于 VM 上的内存大小 (RAM) 。

  2. 如果 OS 磁盘上没有足够的空间,请更改将创建内存转储文件的位置,并将其引用为附加到 VM 且具有足够可用空间的任何数据磁盘。

    若要更改位置,请在以下命令中将 替换为 %SystemRoot% 驱动器号 (,例如, F:) 数据磁盘。

建议使用以下配置来启用 OS 转储

加载损坏的 OS 磁盘

REG LOAD HKLM\BROKENSYSTEM <VOLUME LETTER OF BROKEN OS DISK>:\windows\system32\config\SYSTEM

在 ControlSet001 上启用

REG ADD "HKLM\BROKENSYSTEM\ControlSet001\Control\CrashControl" /v CrashDumpEnabled /t REG_DWORD /d 1 /f
REG ADD "HKLM\BROKENSYSTEM\ControlSet001\Control\CrashControl" /v DumpFile /t REG_EXPAND_SZ /d "%SystemRoot%\MEMORY.DMP" /f
REG ADD "HKLM\BROKENSYSTEM\ControlSet001\Control\CrashControl" /v NMICrashDump /t REG_DWORD /d 1 /f

在 ControlSet002 上启用

REG ADD "HKLM\BROKENSYSTEM\ControlSet002\Control\CrashControl" /v CrashDumpEnabled /t REG_DWORD /d 1 /f
REG ADD "HKLM\BROKENSYSTEM\ControlSet002\Control\CrashControl" /v DumpFile /t REG_EXPAND_SZ /d "%SystemRoot%\MEMORY.DMP" /f
REG ADD "HKLM\BROKENSYSTEM\ControlSet002\Control\CrashControl" /v NMICrashDump /t REG_DWORD /d 1 /f

卸载损坏的 OS 磁盘

REG UNLOAD HKLM\BROKENSYSTEM

重新生成 VM

  1. 使用 VM 修复命令的步骤 5 重新组合 VM。

重新配置存储区域网络策略

  1. 在 DSRM 模式下启动时,唯一可以登录的用户是恢复管理员,该管理员在 VM 提升为域控制器时使用。 所有其他用户将显示身份验证错误。

    1. 如果没有其他可用的 DC,则必须使用 .\administratormachinename\administrator 和 DSRM 密码在本地登录。
  2. 设置 SAN 策略,使所有磁盘都处于联机状态。

    1. 打开提升的 CMD 实例并输入 DISKPART

    2. 查询磁盘列表。

      DISKPART> list disk

    3. 输入以下命令以选择需要联机的磁盘并更改 SAN 策略:

      DISKPART> select disk 1
      Disk 1 is now the selected disk.
      
      DISKPART> attributes disk clear readonly
      Disk attributes cleared successfully.
      
      DISKPART> attributes disk
      Current Read-only State : No
      Read-only : No
      Boot Disk : No
      Pagefile Disk : No
      Hibernation File Disk : No
      Crashdump Disk : No
      Clustered Disk : No
      
      DISKPART> online disk
      DiskPart successfully onlined the selected disk.
      
      DISKPART> san
      SAN Policy : Online All
      
  3. 修复问题后,请确保删除标志 DsRepair safeboot

    bcdedit /deletevalue {default} safeboot dsrepair

  4. 重启 VM。

    注意

    如果 VM 刚刚从本地迁移,并且想要将更多域控制器从本地迁移到 Azure,应考虑执行以下文章中的步骤,以防止将来的迁移中出现此问题:

    如何使用 Azure PowerShell将现有的本地 Hyper-V 域控制器上传到 Azure

联系我们寻求帮助

如果你有任何疑问或需要帮助,请创建支持请求联系 Azure 社区支持。 还可以向 Azure 反馈社区提交产品反馈。