相关缩写和术语

RSAT

微软为了方便用户远程管理windows server,专门推出了远程服务器管理工具,以下简称RSAT,通过RSAT,用户可以方便地在一台管理机来管理剩余的windows server服务器,RSAT是一个工具集,包括了Server Manager、Hyper-V Manager、Failover Cluster Manager、Computer Management、Windows Powershell等重要的管理工具。

FOCM

微软的“故障迁移群集管理器”(Failover cluster manager,简称FOCM)可用于管理windows系列群集,包括windows群集、hyper-v群集和sqlserver群集,非常方便。每个群集都有一个群集的名称,FOCM就是通过群集名称来管理各个群集的。另外,只要是windows系列的群集,都必须跟域绑定在一起,所以创建群集的前提条件是有一个域环境。

Hyper-V Manager

微软推出的用于管理Hyper-V的管理工具,可以管理hv主机中的本地vm。

host OS

物理服务器操作系统,在本项目中安装的是hyper-v server 2012 r2(以下简写为hv12r2),一个windows server 2012 r2精简版本,没有GUI,只有命令行。

host

物理服务器,因为安装了hv12r2,所以称之为hv主机

Windows Boot Manager

windows启动管理器,简称wbm,wbm提供了多个启动模式,包括安全模式、带网络连接的安全模式,只要你启动了相应的

directory services restore mode

目录服务恢复模式,简称dsrm

domain contorller

域控制器,简称dc

additional domain controller

额外域控制器,简称adc

背景和故障描述

在某个项目中部署了hyper-v群集,网络拓扑如下:

hyv-cluster-top
  • 三台host安装了hv12r2,通过iscsi协议访问共享存储;

  • 安装了两台本地vm:dc2(域林中的第一台域控制器,运行在hyv4主机中)和dc1(额外域控制器,运行在hyv3主机中),分别担任域控制器和额外域控制器角色。三台hv主机加入域并构建了一个故障迁移群集;

  • 另外一台本地vm:ws12r2-mgmt-1担任管理机,安装了rsat,包括hyper-v manager和focm,平时系统管理员通过远程桌面登陆该管理机,利用hyper-v manager来管理hv主机中的本地vm,利用focm来管理hyper-v群集中的高可用性vm。

但是机房的电力环境堪忧,经常停电,dc1在半年前的一次停电事故中就崩溃了,但是dc2还能正常工作,所以也没太在意,也未备份。终于在最近一次停电事故中,dc2也崩溃了,两个域控制器全部失效!所有跟域控制器有关的操作都无法进行,包括最重要的netlogon。

修复过程

目标:修复这两台域控制器。

因为域控制器已经失效,所以无法通过远程桌面访问,于是遇到第一个问题:

问题1、如何访问已崩溃的域控制器vm的控制台

因为域控制器失效,就无法使用域账号登陆ws12r2-mgmt-1,也就无法使用hyper-v manager连接hv主机,那就打不开域控制器的控制台。打不开控制台就获取不到更多的错误信息,也就无法修复域控制器。陷入了死循环!son of a …​!这个问题进一步演变成了:如何使用hyper-v manager访问一台加入了域,但是域控制器全部失效的hv主机

有人说,那何不直接使用本地管理员账号登陆hv主机的控制台,然后使用host os自带的hyper-v manager来管理打开dc的控制台?前面说过,hv主机的host OS是hv2012r2,没有图形界面,也就没有hyper-v manager。

怎么办?这都是活动目录的netlogon失效引起的,那我们能否可以使用一台工作组服务器的hyper-v manager来管理hv主机呢?答案也是否定的,因为hyper-v manager在连接远程hv主机的时候,同样需要域账号进行认证。

那就只能使出终极杀招:将hv主机强制脱离域[1],变成一台工作组服务器,然后使用另外一台工作组服务器的hyper-v manager去连接该hv主机,两台工作组服务器的本地administrator密码设为一样。

事实证明该思路是可行的,首先将hyv4强制脱离域,然后在esxi6的一台win8.1 vm中安装rsat,最后通过hyper-v manager打开hyv4中的dc2这台域控制器的控制台。至此解决了问题1

这,仅仅只是开始,打开控制台只是为了获取到更多的错误信息,以便定位和解决故障。dc2启动后不久就遇到了蓝屏,于是碰到第二个问题:

问题2、 c00002e2 0xc0000001 directory services restore mode

STOP: c00002e2 Directory Services could not start because of the following error: A device attached to the system is not functioning.

Error Status: 0xc0000001. Please shutdown this system and reboot into Directory Services Restore Mode, check the event log for more detailed information.

该错误信息提示需重启至Directory Services Restore Mode,然而重启后在控制台中按F8无反应。即便是激活了笔记本的Fn,再按F8也没有效果,又需要解决另外一个问题:如何进入已损坏windows VM的dsrm。解决完该问题后继续回到问题2,估计是ntds数据库损坏,需要修复:

C:\Windows\system32\>cd \windows\system32
C:\Windows\system32>ntdsutil
C:\Windows\system32\ntdsutil.exe: activate instance NTDS
Active instance set to "ntds".
C:\Windows\system32\ntdsutil.exe: files

将弹出以下错误:

Could not initialize the Jet engine: Jet Error -501. Failed to open DIT for AD DS/LDS instance NTDS. Error -2147418113

需要先退出ntdsutil,对数据库进行修复

C:\Windows\system32\ntdsutil.exe: quit
C:\Windows\system32\md backupad
C:\Windows\system32>copy ntds.dit backupad
C:\Windows\system32>esentutl /g c:\windows\ntds\ntds.dit (1)
C:\Windows\system32>esentutl /p c:\windows\ntds\ntds.dit
C:\Windows\system32>cd \windows\ntds
C:\Windows\NTDS\>move *.log backupad
1 该命令执行ntds.dit数据库的校验检测.不出意外的话将以失败告终,所以还需要执行后面的修复操作

自此完成了ntds数据库的修复工作,下面检查一下:

C:\windows\system32>ntdsutil
C:\Windows\system32\ntdsutil.exe: activate instance ntds
Active instance set to "ntds".
C:\Windows\system32\ntdsutil.exe: files
file maintenance: info

Drive Information:

        C:\ NTFS (Fixed Drive  ) free(46.6 Gb) total(59.9 Gb)

DS Path Information:

        Database   : C:\Windows\NTDS\ntds.dit - 22.1 Mb
        Backup dir : C:\Windows\NTDS\dsadata.bak
        Working dir: C:\Windows\NTDS
        Log dir    : C:\Windows\NTDS - 50.0 Mb total
                        edbres00002.jrs - 10.0 Mb
                        edbres00001.jrs - 10.0 Mb
                        edb00006.log - 10.0 Mb
                        edb00005.log - 10.0 Mb
                        edb.log - 10.0 Mb

当然,也可以用esentutl /g进行检查

C:\> esentutl /g c:\windows\ntds\ntds.dit

Extensible Storage Engine Utilities for Microsoft(R) Windows(R)
Version 6.1
Copyright (C) Microsoft Corporation. All Rights Reserved.

Initiating INTEGRITY mode...
        Database: c:\windows\ntds\ntds.dit
  Temp. Database: TEMPINTEG2684.EDB

Checking database integrity.

                     Scanning Status (% complete)

          0    10   20   30   40   50   60   70   80   90  100
          |----|----|----|----|----|----|----|----|----|----|
          ...................................................

Integrity check successful.

Operation completed successfully in 1.482 seconds.

大功告成,终于修复了一台域控制器,最后重启至正常模式,使用其它域成员服务器进行netlogon测试均正常。

问题3、如何进入已损坏windows VM的dsrm

原来自vista开始,微软为了提高开机速度,更改了boot manager默认设置,F8菜单被隐藏了起来。需要用户手工打开这个选项,如何打开呢?

因为这是一台损坏的VM,所以只能启动到以下界面:

system-recovery-options

没有GUI,只有命令行可用。由于在hyper-v控制台中,F8的失效意味着需要将dsrm设置为默认启动项。

c:\>bcdedit /copy {default} /d "DSRM Mode"
The entry was successfully copied to {d1caf19e-4976-11e5-8432-9492d15296bf}.
c:\>bcdedit /set {d1caf19e-4976-11e5-8432-9492d15296bf} safeboot dsrepair
The Operation completed successfully
c:\>bcdedit /timeout 5
c:\>bcdedit
Windows Boot Manager
--------------------
identifier              {bootmgr}
device                  partition=\Device\HarddiskVolume1
description             Windows Boot Manager
locale                  en-US
inherit                 {globalsettings}
default                 {current}
resumeobject            {d1caf198-4976-11e5-8432-9492d15296bf}
displayorder            {current}
                        {d1caf19e-4976-11e5-8432-9492d15296bf}
toolsdisplayorder       {memdiag}
timeout                 30
displaybootmenu         Yes

Windows Boot Loader
-------------------
identifier              {current}
device                  partition=C:
path                    \Windows\system32\winload.exe
description             Windows Server 2008 R2
locale                  en-US
inherit                 {bootloadersettings}
recoverysequence        {d1caf19c-4976-11e5-8432-9492d15296bf}
recoveryenabled         Yes
osdevice                partition=C:
systemroot              \Windows
resumeobject            {d1caf198-4976-11e5-8432-9492d15296bf}
nx                      OptOut

Windows Boot Loader
-------------------
identifier              {d1caf19e-4976-11e5-8432-9492d15296bf}
device                  partition=C:
path                    \Windows\system32\winload.exe
description             DSRM mode
locale                  en-US
inherit                 {bootloadersettings}
recoverysequence        {d1caf19c-4976-11e5-8432-9492d15296bf}
recoveryenabled         Yes
osdevice                partition=C:
systemroot              \Windows
resumeobject            {d1caf198-4976-11e5-8432-9492d15296bf}
nx                      OptOut
safeboot                DsRepair (1)
1 dsrm安全模式

退出命令行,然后点击重启计算机选项。

重启之后,出现如下画面:

wbm-dsrm-options

通过键盘的上下键终于可以选择DSRM mode进入了dsrm登陆界面,然而好事多磨,在登陆界面又遇到了一个问题:administrator密码丢失,没有道理啊,我记录下所有administrator的密码,不会记错,百思不得其解,兜兜转转了半个小时,最后无意中发现原来在dcpromo过程中将会创建一个dsrm的administrator账号,如下图所示:

dsrm-password-setting

该账号不同于本地管理员或域管理员,是专门在dsrm下使用的,而且登陆账号应是.\Administrator,既不是Administrator,也不是local\Administrator。最终通过穷举法顺利地进入了dsrm。

saftmode-dsrm-GUI
几种不同的administrator账号
  • local 初始化安装一台windows服务器后,默认的administrator密码,

  • domain 顾名思义,就是域管理员账号,具有最高的权限。

  • dsrm 在将一台域成员提升为域控制器时,将设置dsrm的administrator密码,仅限于dsrm下登陆系统,账号格式为.\Administrator

tips

  • 在安全模式-命令行下,可以使用start notepad来查看和编辑文本文件。

  • 购买HP服务器的时候,可以同时采购OEM版本的windows server 2008 r2操作系统的安装媒介和授权,在安装媒介中将提供两种安装序列号:physical key和virtual key,其中physical key既可以用于激活物理计算机操作系统(Host OS),也可以用于激活一台虚拟计算机操作系统(guest OS)。


1. 因为域控制器已失效,所以只能强制脱离域。