Exchange Server灾难恢复实例分析
一、Alarm! Disaster is Fall……
糟糕的事情总是在人们最不想它出现的时候出现。这天,那台4400的服务器,就这样忽然死亡了……
据在现场的同事描述,服务器忽然变慢,停止了网络服务,直到停止一切响应。
为了恢复服务,他们只有重新启动该服务器。强制重新启动服务器后,出现蓝屏,系统报告stop: 0x0000007b错误,inaccessable_boot_device。一开始我以为只是MBR坏了或者ntldr及NTdetect.com坏了,那样的话我只需要在故障恢复台里面使用fixmbr和fixboot来修复。由于服务器使用的是硬件RAID,只能在光盘启动时使用F6加载RAID的启动,然后进入故障恢复台,看看是否能否访问系统分区。进去后大惊,用diskpart可以看到系统分区,但是系统分区不再可读了,dir命令无法枚举任何文件和目录。
说到这里,要介绍一下该服务器的环境了。这台Windows 2000 Advanced Server是这个域(下文使用domian.com命名)的第一台Domain Controller,五个操作主机角色(FSMO)都在上面。限于条件,上面运行了Exchange Server 2000,也用作了File Server/Printer Server。另外还有DHCP/WINS/DNS。备份的磁带,容量不足以完成完整备份……所以说,服务器的退出服务,对于我们是一场真正的灾难。如果没有其他的Domain Controller,可能我们要忙上好长时间了。就是因为还有其他Domain Controller,我们还有一线希望!
二、Mission Impossible? Impossible is Nothing!0、使用其它服务器替代网络服务客户所受的影响必须降到最小。由于网络中使用DHCP服务器为客户机分配地址和提供网络信息,我们必须先解决客户机DHCP租约到期更新的问题。
原先我们只有这一台DHCP服务器,而现在它坏掉了。于是我们在另外的Server上安装了DHCP,划分的地址范围是原先的20%。这样做的理由是到期更新租约的客户机毕竟不是很多,当然也可以根据租约时间长短和客户机的数量自行调整,更新越快,划分的地址越多。
同时,我们安装了WINS和DNS,并且为DNS添加了原先手动设置的区域和记录。
1、恢复域控制器Active Directory是基于Windows 2000网络环境的基石。有太多的信息保存在这里,有了Active Directory,我们可以恢复相当多的服务器配置信息,比如DNS的配置之类。所以我们首先要考虑的,就是恢复主机角色。
顺便介绍一下主机角色。Active Directory 定义了五种操作主机角色(FSMO):
架构主机 schema master
域命名主机 domain naming master
相对标识号(RID)主机 RID master
主域控制器模拟器 PDCE
基础结构主机 infrastructure master
架构主机是可以更新目录架构的唯一域控制器。架构更新会从架构主机复制到活动目录森林中的所有其它域控制器。整个森林中只有唯一一台架构主机。
域命名主机是可以执行以下任务的唯一域控制器:在森林中添加或删除域,添加或删除描述外部目录的交叉引用对象。
相对标识号(RID)主机是负责向其它域控制器分配RID池的唯一一台服务器。在创建安全主体(例如用户、组或计算机,也可以理解成账号)时,需要将RID与域内的标识符结合来创建唯一的安全标识符(SID)。每一个域控制器都会收到用于创建对象的RID池(默认为512)。RID主机通过分配不同的池来确保这些ID在每一个域控制器上都是唯一的。通过RID主机,还可以在同一森林中的不同域之间移动对象。
域命名主机是基于森林的,整个森林中只有一个域命名主机。相对标识号(RID)主机是基于域的,森林中的每个域都有自己的相对标识号(RID)主机。
主域控制器模拟器(PDCE)主要实现向后兼容低级客户端和服务器,也就是允许在Windows 2000域中使用Windows NT备份域控制器(BDC)。本机模式Windows 2000环境里会将密码更改转发到PDCE。域控制器验证密码失败后,会与PDCE联系,以检查该密码是否可以通过验证。因为也许密码的更改还没有被复制到当前验证登录的域控制器中。森林中各个域的PDCE都会与森林的根域中的PDCE进行同步。PDCE是基于域的,森林中的每个域都有自己的PDCE。
基础结构主机确保所有域间操作对象的一致性。当引用另一个域中的对象时,此引用包含该对象的全局唯一标识符(GUID)、安全标识符(SID)和可分辨的名称(DN)。如果被引用的对象移动,则在域中担当结构主机角色的域控制器会负责更新该域中跨域对象引用中的SID和DN。基础结构主机是基于域的,目录林中的每个域都有自己的基础结构主机
默认的,这五种FSMO存在于森林根域的第一台域控制器(主域控制器)上,而子域中的相对标识号(RID)主机、PDCE 、基础结构主机存在于子域中的第一台域控制器。
[1] 清除原有Domain Controller的信息因为这台服务器已经不再可用,我们必须重新安装,所以需要将原来的服务器的数据从ACTIVE DIRECTORY中删除。
完成这个目标,需要使用ntdsutil这个工具。(为便于阅读,这些命令已折行,粗斜体为输入内容)
c:>ntdsutil
ntdsutil: metadata cleanup
metadata cleanup: select operation target
select operation target: connections
server connections: connect to domain domain.com
select operation target: list sites
Found 1 site(s)
0 - CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=domain,DC=com
select operation target: select site 0
Site - CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=domain,DC=com
No current domain
No current server
No current Naming Context
select operation target: list domains in site
Found 1 domain(s)
0 - DC=domain,DC=com
select operation target: select domain 0
Site - CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=domain,DC=com
Domain - DC=domain,DC=com
No current server
No current Naming Context
select operation target: list servers for domain in site
Found 2 server(s)
0 - CN=DC1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,
DC=domain,DC=com
1 - CN=DC2,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,
DC=domain,DC=com
select operation target: select server 0
select operation target: quit
metadata cleanup: remove selected server出现对话框,询问你是否确定删除该DC。按“确定”删除DC1主控服务器。
metadata cleanup: quit
ntdsutil: quit从Active Directory users and computers中删除Domain controllers中DC1服务器对象,可以使用ADSI EDIT工具。ADSI EDIT是Windows 2000 support tools中的工具,你需要安装Windows 2000 support tool,安装程序在windows 2000光盘中的support ools目录下。在DC2上打开ADSI EDIT工具,展开Domain NC[DC2.domain.com],展开OU=Domain controllers,右击CN=DC1,然后选择Delete,把DC1服务器对象删除。
在Active Directory Sites and Service中删除DC1服务器对象,可以打开Administrative tools中的Active Directory Sites and Service,展开Sites,展开Default-First-Site-Name,展开Servers,右击DC1,选择Delete,单击“确认”按钮确认。
[2] 在额外域控制器上通过ntdsutil.exe工具夺取五种FMSO(为便于阅读,这些命令已折行,粗斜体为输入内容)
c:>ntdsutil
ntdsutil: roles
fsmo maintenance: select operation target
select operation target: connections
server connections: connect to domain domain.com
select operation target: list sites
Found 1 site(s)
0 - CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=domain,DC=com
select operation target: select site 0
Site - CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=domain,DC=com
No current domain
No current server
No current Naming Context
select operation target: list domains in site
Found 1 domain(s)
0 - DC=domain,DC=com
select operation target: select domain 0
Site - CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=domain,DC=com
Domain - DC=domain,DC=com
No current server
No current Naming Context
select operation target: list servers for domain in site
Found 1 server(s)
0 - CN=DC2,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,
DC=domain,DC=com
select operation target: select server 0
select operation target: quit
fsmo maintenance: seize domain naming master出现对话框,按“确定”
fsmo maintenance: seize infrastructure master出现对话框,按“确定”
fsmo maintenance: seize PDC出现对话框,按“确定”
fsmo maintenance: seize RID master出现对话框,按“确定”
fsmo maintenance: seize schema master出现对话框,按“确定”
fsmo maintenance: quit
ntdsutil: quit(注:Seize用于原FSMO不在线时操作,如果原FSMO在线,则需要使用Transfer操作)
[3] 设置额外控制(DC2.domain.com&, , amp;, , lt;, , /SPAN>)为GC(全局编录)
打开Administrative Tools中的Active Directory Sites and Services,展开Sites,展开Default-First-Site-Name,展开Servers,展开DC2.domain.com(额外控制器),右击NTDS Settings选择Properties,然后在“Global Catalog”前面打勾,单击“确定”按钮,然后重新启动服务器。
[4] 重新安装并恢复损坏的主域控制器修复DC1.domain.com之后,在DC1.domain.com服务器上重新安装Windows 2000 Server。基本上按照原来的服务器配置安装组件,但是先不要安装“证书服务”(安装“证书服务”后,无法进行有关改名和域的操作)。安装好Windows 2000 Server之后,再运行dcpromo升级为额外的域控制器;如果需要DC1.domain.com担任五种FMSO角色,通过ntdsutil工具进行角色转换,使用Transfer操作(注意:这时DC2在线,不能用Seize,只能Transfer)。完成后再安装“证书服务”。
通过Active Directory Sites and Services设置DC1.domain.com为GC,而取消DC2.domain.com的GC。至此,修复Active Directory部分。
(注:建议domain naming master同时必须作为GC,而不和RID master使用同一台Domain Controller)
2、恢复邮件服务器由于Exchange Server会扩展Active Directory的Schema,将配置信息保存在Active Directory中,所以我们不能简单地重新安装了事。那样会覆盖掉以前的所有配置信息,包括地址簿结构、邮件存储还有其他的非邮件存储数据。让我们一步一步地来尝试修复。
[1] 安装Exchange Server为了适应灾难恢复环境下的安装,Exchange Server以及后面的Exchange Server Service Pack的安装文件都提供了 /disasterrecovery 参数来实现灾难恢复环境下的系统修复。
我们需要将系统恢复到崩溃前的状态,如果安装了SP和Patch,新的系统也要安装相同的SP和Patch。
安装组件的选择也很重要,必须与崩溃时的系统所安装的组件一致。所以,日常维护中记录软件的安装配置也是一项很重要的工作。
在这个例子中,安装好邮件服务器后,依次安装SP3还有Rollout,恢复到崩溃之前的软件安装。
[2] 修复邮件存储Exchange Server 2000 发生损坏时,信息存储是最容易受到影响的组件之一。实际上Windows家族的很多设计为永远在线工作的数据库,都使用了Exchange数据库引擎。信息存储由下列四个数据库文件组成:
Priv1.edb
Priv1.stm
Pub1.edb
Pub1.stm
Priv1.edb 数据库文件包含简单邮件传输协议 (SMTP) 邮件,其中包括正在传送的邮件和存储在服务器上的邮件。Priv1.stm 数据库文件包含正在传送的邮件和存储的非 SMTP邮件。Pub1.edb 数据库文件包含用于SMTP 格式信息的公用文件夹存储。Pub1.stm包含用于非SMTP格式数据的共用文件夹存储。
我们的邮件服务器是stand alone的,没有使用站点连接器,也没有安装密钥管理。所以,我们选择了KB313184的恢复流程。
由于我们的数据库是异常退出,所以需要确认数据库的一致性。如果数据库是一致的,则所有日志文件都已提交给信息存储。如果数据库不一致,则数据库可能未损坏。相反,日志文件可能丢失、被损坏或尚未提交到数据库。
我们运行下面的eseutil命令以检查公用和专用数据库的一致性(为便于阅读,这些命令已折行,粗斜体为输入内容)。
C:Program FilesexchsrvrBIN>eseutil /mh "C:Program Filesexchsrvr
MDBDATApriv1.edb"
C:Program FilesexchsrvrBIN>eseutil /mh "C:Program Filesexchsrvr
MDBDATApub1.edb"注意:这里假设正在从C盘上的Program FilesExchSrvrBin文件夹中运行程序,并且.edb文件位于Program FilesExchSrvrMdbdata文件夹中,如果执行了升级,这些数据库文件可能位于C:ExchsrvrMdbdata文件夹中。如果优化了数据库,则这些文件可能位于另一驱动器上,可根据实际情况自行替换。
要验证.edb文件是否一致,请检查标有“State”的输出行。为了方便观察可以在前面的命令行后面分别加上“> mypriv.txt”和“> mypub.txt”,生成两个文本文件。或者使用“| more”参数来逐屏输出。
在我们的例子里,服务器上的数据库state是“Dirty Shutdown”,所以需要对数据库进行软故障恢复,以检查 Mdbdata 文件夹中是否存储了日志文件的副本。
注意:以下步骤并不是按操作顺序排列的,也不是每一步都必须执行的,修复邮件存储,需要根据实际情况选择一步或者几部执行!
(a) 保存有日志文件的存储恢复执行软故障恢复时,所有未提交的日志文件都将被提交给信息存储数据库。打开数据库和日志文件所驻留的文件夹,然后在命令提示符处键入下面的内容(为便于阅读,这些命令已折行,粗斜体为输入内容):
C:Program FilesexchsrvrMDBDATA>"C:Program Filesexchsrvr
BINeseutil.exe" /r E00单击“是”运行修复。实用工具将显示下面的消息:
Microsoft(R) Exchange Server(TM) Database Utilities
Version 6.0
Copyright (C) Microsoft Corporation 1991-2000. All right reserved.
Initiating RECOVERY mode...
Logfile base name:E00
Log Files:(current directory)
System files:(current directory)
Performing soft recovery...完成软故障恢复之后,程序将显示下面的消息:
Operation completed successfully in x.xxx seconds.可再次运行 eseutil /mh 命令。如果公用信息存储和专用信息存储的状态都更改为“一致”,表明数据库已经修复。
(b) 无日志文件或者日志文件损坏的存储恢复如果eseutil /r 命令未恢复数据库到一致状态,请使用硬故障恢复(强制状态恢复)命令。(注意:该命令可能会丢失某些 Exchange 2000 数据,其中包括尚未提交给信息存储数据库的日志文件中所包含的消息。Microsoft 建议,只有在执行软故障恢复后公用信息存储或专用信息存储仍没有恢复到一致的状态时,才使用此命令。)
在命令提示符处,键入下列命令(为便于阅读,这些命令已折行,粗斜体为输入内容):
将 Priv1.edb 文件恢复到一致状态:
C:Program FilesexchsrvrMDBDATA>"C:Program FilesexchsrvrBINeseutil" /p priv1.edb将 Pub1.edb 文件恢复到一致状态:
C:Program FilesexchsrvrMDBDATA>"C:Program FilesexchsrvrBINeseutil" /p pub1.edb单击“是”运行修复。实用工具将显示下面的消息:
Microsoft(R) Exchange Server(TM) Database Utilities
Version 6.0
Copyright (C) Microsoft Corporation 1991-2000. All right reserved.
Initiating REPAIR mode...
Database:priv1.edb
Streaming file:priv1.stm
Temp.Database:TEMPREPAIR1820.EDB
Checking database integrity.
Scanning Status (% complete)
0 10 20 30 40 50 60 70 80 90 100
|----|----|----|----|----|----|----|----|----|-----|
....................................................修复过程中将自动包括.stm 文件。在完成此过程之后,程序将显示下面的消息:
Integrity check successful.(c) 进行邮件存储的脱机碎片整理建议对修复的数据库文件执行碎片整理。特别是磁盘空间不足的时候。可以在另外的机器上执行这种脱机碎片整理工作。如果对 Pub1.edb 文件和 Priv1.edb 文件都运行了软故障恢复过程,请分别对这两个文件运行下面的碎片整理命令(为便于阅读,这些命令已折行,粗斜体为输入内容)。
对 Priv1.edb 进行碎片整理:
C:Program FilesexchsrvrBIN>eseutil /d
C:Program FilesexchsrvrMDBDATApriv1.edb对 Pub1.edb 进行碎片整理:
C:Program FilesexchsrvrBIN>eseutil /d
C:Program FilesexchsrvrMDBDATApub1.edb注意:如果存储数据库很大,整理需要一段时间。如果提示磁盘空间不足,请将 Program FileExchSrvrBin 文件夹复制到更大的磁盘,然后尝试从该位置运行此命令。
- 最新评论
