ExchangeServer灾难恢复的真实记录(1)

上一篇 / 下一篇  2008-03-27 00:39:45 / 个人分类:系统安全

一、Alarm!DisasterisFall……糟糕的事情总是在人们最不想它出现的时候出现。这天,那台4400服务器,就这样忽然死亡了……

据在现场的同事描述,服务器忽然变慢,停止了网络服务,直到停止一切响应。

为了恢复服务,他们只有重新启动该服务器。强制重新启动服务器后,出现蓝屏,系统报告stop:0x0000007b错误,inaccessable_boot_device。一开始我以为只是MBR坏了或者ntldrNTdetect.com坏了,那样的话我只需要在故障恢复台里面使用fixmbrfixboot来修复。由于服务器使用的是硬件RAID,只能在光盘启动时使用F6加载RAID的启动,然后进入故障恢复台,看看是否能否访问系统分区。进去后大惊,用diskpart可以看到系统分区,但是系统分区不再可读了,dir命令无法枚举任何文件和目录。

说到这里,要介绍一下该服务器的环境了。这台Windows2000AdvancedServer是这个域(下文使用domian.com命名)的第一台DomainController,五个操作主机角色(FSMO)都在上面。限于条件,上面运行了ExchangeServer2000,也用作了FileServer/PrinterServer。另外还有DHCP/WINS/DNS。备份的磁带,容量不足以完成完整备份……所以说,服务器的退出服务,对于我们是一场真正的灾难。如果没有其他的DomainController,可能我们要忙上好长时间了。就是因为还有其他DomainController,我们还有一线希望!

二、MissionImpossible?ImpossibleisNothing!0、使用其它服务器替代网络服务客户所受的影响必须降到最小。由于网络中使用DHCP服务器为客户机分配地址和提供网络信息,我们必须先解决客户机DHCP租约到期更新的问题

原先我们只有这一台DHCP服务器,而现在它坏掉了。于是我们在另外的Server上安装了DHCP,划分的地址范围是原先的20。这样做的理由是到期更新租约的客户机毕竟不是很多,当然也可以根据租约时间长短和客户机的数量自行调整,更新越快,划分的地址越多。

同时,我们安装了WINSDNS,并且为DNS添加了原先手动设置的区域和记录。

1、恢复域控制器ActiveDirectory是基于Windows2000网络环境的基石。有太多的信息保存在这里,有了ActiveDirectory,我们可以恢复相当多的服务器配置信息,比如DNS的配置之类。所以我们首先要考虑的,就是恢复主机角色。

顺便介绍一下主机角色。ActiveDirectory定义了五种操作主机角色(FSMO):

架构主机schemamaster

域命名主机domainnamingmaster

相对标识号(RID)主机RIDmaster

主域控制器模拟器PDCE

基础结构主机infrastructuremaster

架构主机是可以更新目录架构的唯一域控制器。架构更新会从架构主机复制到活动目录森林中的所有其它域控制器。整个森林中只有唯一一台架构主机。

域命名主机是可以执行以下任务的唯一域控制器:在森林中添加或删除域,添加或删除描述外部目录的交叉引用对象。

相对标识号(RID)主机是负责向其它域控制器分配RID池的唯一一台服务器。在创建安全主体(例如用户、组或计算机,也可以理解成账号)时,需要将RID与域内的标识符结合来创建唯一的安全标识符(SID)。每一个域控制器都会收到用于创建对象的RID池(默认为512)。RID主机通过分配不同的池来确保这些ID在每一个域控制器上都是唯一的。通过RID主机,还可以在同一森林中的不同域之间移动对象。

域命名主机是基于森林的,整个森林中只有一个域命名主机。相对标识号(RID)主机是基于域的,森林中的每个域都有自己的相对标识号(RID)主机。

主域控制器模拟器(PDCE)主要实现向后兼容低级客户端和服务器,也就是允许在Windows2000域中使用WindowsNT备份域控制器(BDC)。本机模式Windows2000环境里会将密码更改转发到PDCE。域控制器验证密码失败后,会与PDCE联系,以检查该密码是否可以通过验证。因为也许密码的更改还没有被复制到当前验证登录的域控制器中。森林中各个域的PDCE都会与森林的根域中的PDCE进行同步。PDCE是基于域的,森林中的每个域都有自己的PDCE

基础结构主机确保所有域间操作对象的一致性。当引用另一个域中的对象时,此引用包含该对象的全局唯一标识符(GUID)、安全标识符(SID)和可分辨的名称(DN)。如果被引用的对象移动,则在域中担当结构主机角色的域控制器会负责更新该域中跨域对象引用中的SIDDN。基础结构主机是基于域的,目录林中的每个域都有自己的基础结构主机

默认的,这五种FSMO存在于森林根域的第一台域控制器(主域控制器)上,而子域中的相对标识号(RID)主机、PDCE、基础结构主机存在于子域中的第一台域控制器。

[1]清除原有DomainController的信息因为这台服务器已经不再可用,我们必须重新安装,所以需要将原来的服务器的数据从ACTIVEDIRECTORY中删除。

完成这个目标,需要使用ntdsutil这个工具。(为便于阅读,这些命令已折行,粗斜体为输入内容)

c:\>ntdsutil

ntdsutil:metadatacleanup

metadatacleanup:selectoperationtarget

selectoperationtarget:connections

serverconnections:connecttodomaindomain.com

selectoperationtarget:listsites

Found1site(s)

0-CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=domain,DC=com

selectoperationtarget:selectsite0

Site-CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=domain,DC=com

Nocurrentdomain

Nocurrentserver

NocurrentNamingContext

selectoperationtarget:listdomainsinsite

Found1domain(s)

0-DC=domain,DC=com

selectoperationtarget:selectdomain0

Site-CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=domain,DC=com

Domain-DC=domain,DC=com

Nocurrentserver

NocurrentNamingContext

selectoperationtarget:listserversfordomaininsite

Found2server(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

selectoperationtarget:selectserver0

selectoperationtarget:quit

metadatacleanup:removeselectedserver

出现对话框,询问你是否确定删除该DC。按“确定”删除DC1主控服务器。

metadatacleanup:quit

ntdsutil:quit

ActiveDirectoryusersandcomputers中删除DomaincontrollersDC1服务器对象,可以使用ADSIEDIT工具。ADSIEDITWindows2000supporttools中的工具,你需要安装Windows2000supporttool,安装程序在windows2000光盘中的support\tools目录下。在DC2上打开ADSIEDIT工具,展开DomainNC[DC2.domain.com],展开OU=Domaincontrollers,右击CN=DC1,然后选择Delete,把DC1服务器对象删除。

ActiveDirectorySitesandService中删除DC1服务器对象,可以打开Administrativetools中的ActiveDirectorySitesandService,展开Sites,展开Default-First-Site-Name,展开Servers,右击DC1,选择Delete,单击“确认”按钮确认。

[2]在额外域控制器上通过ntdsutil.exe工具夺取五种FMSO(为便于阅读,这些命令已折行,粗斜体为输入内容)

c:\>ntdsutil

ntdsutil:roles

fsmomaintenance:selectoperationtarget

selectoperationtarget:connections

serverconnections:connecttodomaindomain.com

selectoperationtarget:listsites

Found1site(s)

0-CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=domain,DC=com

selectoperationtarget:selectsite0

Site-CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=domain,DC=com

Nocurrentdomain

Nocurrentserver

NocurrentNamingContext

selectoperationtarget:listdomainsinsite

Found1domain(s)

0-DC=domain,DC=com

selectoperationtarget:selectdomain0

Site-CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=domain,DC=com

Domain-DC=domain,DC=com

Nocurrentserver

NocurrentNamingContext

selectoperationtarget:listserversfordomaininsite

Found1server(s)

0-CN=DC2,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,

DC=domain,DC=com

selectoperationtarget:selectserver0

selectoperationtarget:quit

fsmomaintenance:seizedomainnamingmaster

出现对话框,按“确定”

fsmomaintenance:seizeinfrastructuremaster

出现对话框,按“确定”

fsmomaintenance:seizePDC

出现对话框,按“确定”

fsmomaintenance:seizeRIDmaster

出现对话框,按“确定”

fsmomaintenance:seizeschemamaster

出现对话框,按“确定”

fsmomaintenance:quit

ntdsutil:quit

(注:Seize用于原FSMO不在线时操作,如果原FSMO在线,则需要使用Transfer操作)


[3]设置额外控制(DC2.domain.com&,,amp;,,lt;,,/SPAN>)为GC(全局编录)打开AdministrativeTools中的ActiveDirectorySitesandServices,展开Sites,展开Default-First-Site-Name,展开Servers,展开DC2.domain.com(额外控制器),右击NTDSSettings选择Properties,然后在“GlobalCatalog”前面打勾,单击“确定”按钮,然后重新启动服务器。

[4]重新安装并恢复损坏的主域控制器修复DC1.domain.com之后,在DC1.domain.com服务器上重新安装Windows2000Server。基本上按照原来的服务器配置安装组件,但是先不要安装“证书服务”(安装“证书服务”后,无法进行有关改名和域的操作)。安装好Windows2000Server之后,再运行dcpromo升级为额外的域控制器;如果需要DC1.domain.com担任五种FMSO角色,通过ntdsutil工具进行角色转换,使用Transfer操作(注意:这时DC2在线,不能用Seize,只能Transfer)。完成后再安装“证书服务”。

通过ActiveDirectorySitesandServices设置DC1.domain.comGC,而取消DC2.domain.comGC。至此,修复ActiveDirectory部分。

(注:建议domainnamingmaster同时必须作为GC,而不和RIDmaster使用同一台DomainController

2、恢复邮件服务器由于ExchangeServer会扩展ActiveDirectorySchema,将配置信息保存在ActiveDirectory中,所以我们不能简单地重新安装了事。那样会覆盖掉以前的所有配置信息,包括地址簿结构、邮件存储还有其他的非邮件存储数据。让我们一步一步地来尝试修复。

[1]安装ExchangeServer为了适应灾难恢复环境下的安装,ExchangeServer以及后面的ExchangeServerServicePack的安装文件都提供了/disasterrecovery参数来实现灾难恢复环境下的系统修复。

我们需要将系统恢复到崩溃前的状态,如果安装了SPPatch,新的系统也要安装相同的SPPatch

安装组件的选择也很重要,必须与崩溃时的系统所安装的组件一致。所以,日常维护中记录软件的安装配置也是一项很重要的工作。

在这个例子中,安装好邮件服务器后,依次安装SP3还有Rollout,恢复到崩溃之前的软件安装。

[2]修复邮件存储ExchangeServer2000发生损坏时,信息存储是最容易受到影响的组件之一。实际上Windows家族的很多设计为永远在线工作的数据库,都使用了Exchange数据库引擎。信息存储由下列四个数据库文件组成:

Priv1.edb

Priv1.stm

Pub1.edb

Pub1.stm

Priv1.edb数据库文件包含简单邮件传输协议(SMTP)邮件,其中包括正在传送的邮件和存储在服务器上的邮件。Priv1.stm数据库文件包含正在传送的邮件和存储的非SMTP邮件。Pub1.edb数据库文件包含用于SMTP格式信息的公用文件夹存储。Pub1.stm包含用于非SMTP格式数据的共用文件夹存储。

我们的邮件服务器是standalone的,没有使用站点连接器,也没有安装密钥管理。所以,我们选择了KB313184的恢复流程。

由于我们的数据库是异常退出,所以需要确认数据库的一致性。如果数据库是一致的,则所有日志文件都已提交给信息存储。如果数据库不一致,则数据库可能未损坏。相反,日志文件可能丢失、被损坏或尚未提交到数据库。

我们运行下面的eseutil命令以检查公用和专用数据库的一致性(为便于阅读,这些命令已折行,粗斜体为输入内容)。

C:\ProgramFiles\exchsrvr\BIN>eseutil/mh"C:\ProgramFiles\exchsrvr

\MDBDATA\priv1.edb"
C:\ProgramFiles\exchsrvr\BIN>eseutil/mh"C:\ProgramFiles\exchsrvr

\MDBDATA\pub1.edb"

注意:这里假设正在从C盘上的ProgramFiles\ExchSrvr\Bin文件夹中运行程序,并且.edb文件位于ProgramFiles\ExchSrvr\Mdbdata文件夹中,如果执行了升级,这些数据库文件可能位于C:\Exchsrvr\Mdbdata文件夹中。如果优化了数据库,则这些文件可能位于另一驱动器上,可根据实际情况自行替换。

要验证.edb文件是否一致,请检查标有“State”的输出行。为了方便观察可以在前面的命令行后面分别加上“>mypriv.txt”和“>mypub.txt”,生成两个文本文件。或者使用|more”参数来逐屏输出。

在我们的例子里,服务器上的数据库state是“DirtyShutdown”,所以需要对数据库进行软故障恢复,以检查Mdbdata文件夹中是否存储了日志文件的副本。

注意:以下步骤并不是按操作顺序排列的,也不是每一步都必须执行的,修复邮件存储,需要根据实际情况选择一步或者几部执行!

(a)保存有日志文件的存储恢复执行软故障恢复时,所有未提交的日志文件都将被提交给信息存储数据库。打开数据库和日志文件所驻留的文件夹,然后在命令提示符处键入下面的内容(为便于阅读,这些命令已折行,粗斜体为输入内容):

C:\ProgramFiles\exchsrvr\MDBDATA>"C:\ProgramFiles\exchsrvr

\BIN\eseutil.exe"/rE00

单击“”运行修复。实用工具将显示下面的消息:

Microsoft(R)ExchangeServer(TM)DatabaseUtilities

Version6.0

Copyright(C)MicrosoftCorporation1991-2000.Allrightreserved.

InitiatingRECOVERYmode...

Logfilebasename:E00

LogFiles:(currentdirectory)

Systemfiles:(currentdirectory)

Performingsoftrecovery...

完成软故障恢复之后,程序将显示下面的消息:

Operationcompletedsuccessfullyinx.xxxseconds.

可再次运行eseutil/mh命令。如果公用信息存储和专用信息存储的状态都更改为“一致”,表明数据库已经修复。

(b)无日志文件或者日志文件损坏的存储恢复如果eseutil/r命令未恢复数据库到一致状态,请使用硬故障恢复(强制状态恢复)命令。(注意:该命令可能会丢失某些Exchange2000数据,其中包括尚未提交给信息存储数据库的日志文件中所包含的消息。Microsoft建议,只有在执行软故障恢复后公用信息存储或专用信息存储仍没有恢复到一致的状态时,才使用此命令。)

在命令提示符处,键入下列命令(为便于阅读,这些命令已折行,粗斜体为输入内容):

Priv1.edb文件恢复到一致状态:

C:\ProgramFiles\exchsrvr\MDBDATA>"C:\ProgramFiles\exchsrvr\BIN\eseutil"/ppriv1.edb

Pub1.edb文件恢复到一致状态:

C:\ProgramFiles\exchsrvr\MDBDATA>"C:\ProgramFiles\exchsrvr\BIN\eseutil"/ppub1.edb

单击“”运行修复。实用工具将显示下面的消息:

Microsoft(R)ExchangeServer(TM)DatabaseUtilities

Version6.0

Copyright(C)MicrosoftCorporation1991-2000.Allrightreserved.

InitiatingREPAIRmode...

Database:priv1.edb

Streamingfile:priv1.stm

Temp.Database:TEMPREPAIR1820.EDB

Checkingdatabaseintegrity.

ScanningStatus(complete)

0102030405060708090100

|----|----|----|----|----|----|----|----|----|-----|

....................................................

修复过程中将自动包括.stm文件。在完成此过程之后,程序将显示下面的消息:

Integritychecksuccessful.

(c)进行邮件存储的脱机碎片整理建议对修复的数据库文件执行碎片整理。特别是磁盘空间不足的时候。可以在另外的机器上执行这种脱机碎片整理工作。如果对Pub1.edb文件和Priv1.edb文件都运行了软故障恢复过程,请分别对这两个文件运行下面的碎片整理命令(为便于阅读,这些命令已折行,粗斜体为输入内容)。

Priv1.edb进行碎片整理:

C:\ProgramFiles\exchsrvr\BIN>eseutil/d

C:\ProgramFiles\exchsrvr\MDBDATA\priv1.edb

Pub1.edb进行碎片整理:

C:\ProgramFiles\exchsrvr\BIN>eseutil/d

C:\ProgramFiles\exchsrvr\MDBDATA\pub1.edb

注意:如果存储数据库很大,整理需要一段时间。如果提示磁盘空间不足,请将ProgramFile\ExchSrvr\Bin文件夹复制到更大的磁盘,然后尝试从该位置运行此命令。

删除Mdbdata文件夹中的所有.log文件、.chk文件,然后删除Temp.edb文件(如果存在)。关闭所有收发信的服务,以避免用户在修复过程中访问邮件存储。将数据库装入一次,然后立即将其卸载(Dismount)。

建议对修复的数据库文件执行碎片整理。特别是磁盘空间不足的时候。可以在另外的机器上执行这种脱机碎片整理工作。如果对Pub1.edb文件和Priv1.edb文件都运行了软故障恢复过程,请分别对这两个文件运行下面的碎片整理命令(为便于阅读,这些命令已折行,粗斜体为输入内容)。

Priv1.edb进行碎片整理:

TAG: 安全 攻防 黑客 技巧

引用 删除 Guest   /   2008-04-11 13:55:42
1
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-12-11  
 123456
78910111213
14151617181920
21222324252627
28293031   

我的存档

数据统计

  • 访问量: 79041
  • 日志数: 12606
  • 建立时间: 2008-03-13
  • 更新时间: 2008-03-27

RSS订阅