
简介面向 Windows Server 2003 域环境运维学习者与系统管理员的实操文档围绕主域控与辅助域控的部署及主域控制器迁移展开适合需要理解活动目录多域控架构、FSMO 角色转移与故障接管的中初级技术人员参考。压缩包内为 1 个 docx 文件约 566KB以图文与命令行记录相结合的方式整理完整实验过程。内容覆盖通过 dcpromo 创建新林 Jiajie.com、配置 DNS 与 NETBIOS 名称、部署现有域额外域控制器并验证复制以及利用 ntbackup 备份系统状态在图形界面和 ntdsutil 命令行下转移或夺取 RID、PDC、基础结构、域命名、架构五类主机角色和全局编录。文档还归纳了 transfer 与 seize 命令的适用场景及参数差异便于读者按实际环境对照排查快速建立域控迁移的整体思路。已有 2064 人学习。1. 主域控、辅助域控与主控制器迁移一台老 Server 2003 实验环境里的三件正事主域控、辅助域控的搭建以及主域控制器的迁移这套流程我最近在一套完全隔离的 Windows Server 2003 Enterprise Edition 环境里从头走了一遍两台机器主机名分别记为 A 和 B地址用 1.1.1.1/8 和 1.1.1.2/8域名的 DNS 全名写成 jiajie.local。这里事前做了两处改动原始笔记里用的是 .com 后缀内网域在工程上应该用 .local 这类专用后缀承接避免和公网解析冲突管理员密码和管理员用于操作时输入的密码在文中也统一替换成占位值真实环境里必须换成长口令。整套东西的价值不在“复古”而在于它把域架构里最容易出问题的三个点一次性暴露出来DNS 依赖、复制链路、FSMO 角色归属。适合正在维护存量 2003 环境、要在隔离环境复现故障、或者准备把一台老域控整体迁走的人拿来照着走。2. 主域控落地dcpromo 向导里十一个不能瞎点的选择装主域控这一步dcpromo一敲下去后面每一步选择都会写进 AD 数据库事后想改只有降级重来一条路。原料里那十一步向导流程本身没问题但每一步背后的判断标准没写照着点很容易在“DNS 全名”和“权限”两页上翻车。2.1 先把地址、名字和时间定死搭域之前网络层必须先固定下来不能靠 DHCP。域控的地址一旦漂移DNS 里的 SRV 记录会指向一个不存在的 IP客户端找域控就像拨一个空号。原始规划是主域控 A 用 1.1.1.1/255.0.0.0辅助域控 B 用 1.1.1.2/255.0.0.0B 的 DNS 指向 A。这个规划在隔离环境里成立但 1.1.1.0/8 是公网上的知名地址段任何一次误接入生产网络都会撞车我自己踩过这个坑后来一律换成 10.10.10.x 这种私有段。# 在主域控 A 上固定地址与 DNS避免续约后 SRV 记录指向错误地址 netsh interface ip set address 本地连接 static 10.10.10.1 255.0.0.0 10.10.10.1 netsh interface ip set dns 本地连接 static 10.10.10.1 primary # 在辅助域控 B 上固定地址DNS 必须只指向主域控 netsh interface ip set address 本地连接 static 10.10.10.2 255.0.0.0 10.10.10.1 netsh interface ip set dns 本地连接 static 10.10.10.1 primarynetsh interface ip set address的四个参数依次是接口名、静态地址、子网掩码、默认网关。这里默认网关填自己是一个折中隔离环境里不需要出网但填一个不存在的网关会导致启动时等待超时填本机地址最省事。set dns的primary关键字表示设置首选 DNSB 的首选只能写 A 的地址不能写 127.0.0.1也不能追加公网 DNS。时间这一项原料没提但它是域环境里最容易被忽略的硬条件。域内 Kerberos 默认容忍 5 分钟时钟偏移两台机器时间差超过阈值表现为密码明明是对的却登录失败、复制报错、dcdiag一大堆告警。主域控最好手工把时间源指定到一个内网时间服务器辅助域控走域层级同步。# 主域控 A 对外同步时间辅助域控 B 保持默认的域层级同步即可 w32tm /config /manualpeerlist:10.10.10.250 /syncfromflags:manual /reliable:yes /update net stop w32time net start w32time w32tm /resync/reliable:yes表示这台机器对外是可信时间源/manualpeerlist写内网时间服务器地址多个用空格分隔。辅助域控不要设这个参数它会自动向域层级里的上级同步人工指定反而容易和主域控拉开偏差。命名上还有一个隐形限制NETBIOS 名最长 15 个字符。DNS 全名可以很长但 NETBIOS 名超长会被截断后续如果加域的是老系统登录框里根本认不出来。原始规划里 DNS 全名是 jiajie.localNETBIOS 名是 JIAJIE这个对应关系是规范的域名取短、全大写、不含特殊符号。2.2 向导里的四个关键选择各有各的适用条件第一页“域控制器类型”选“新域的域控制器”这是唯一正确的起点选“现有域的额外域控制器”是给辅助域控用的两者装错只能降级重来。第二页“创建一个新域”选“在新林中的域”。这一页还有“子域”和“新林中的域”两个选项区别在于选“新林中的域”会独立成一个林和现有域没有任何信任关系选“子域”则继承父域的架构和 schema共用林级两个 FSMO 角色。实践里如果你只是要一个独立的测试域新林最简单不用去处理父子域的 DNS 委派。第六步 DNS 全名填 jiajie.local第七步 NETBIOS 名自动带出 JIAJIE。这里有个细节值得说DNS 全名一旦写错事后改是要跑rendom的2003 环境里风险极高写之前先确认拼写别在最后一位上打错。第八、九步是数据库、日志和共享系统卷的存储位置。默认落在C:\WINDOWS\NTDS和C:\WINDOWS\SYSVOL测试环境无所谓但如果这台机器将来要承载真实目录把 NTDS 数据库和日志分到不同物理盘上是有意义的日志是顺序写、数据库是随机写分开能减少 IO 争用。SYSVOL 必须放在 NTFS 分区上它会通过文件复制服务同步给所有域控。第十步“DNS 注册诊断”原料里的做法是选第二项。这一步的界面会先跑一遍诊断如果 DNS 配置有问题会出现两个选项一是“在这台计算机上安装并配置 DNS 服务器将新的域设置为使用该 DNS 服务器”二是“只在这台计算机上安装并配置 DNS 服务器”。第一项会把本机 DNS 指向自己第二项只装服务不改指向。对于单机首台域控选第一项更省事装完 SRV 记录会自动注册进去。如果诊断没有报错这一步会直接跳过说明这台机器已经能解析到合适的 DNS。第十一步“权限”两个选项分别是“与 Windows 2000 Server 操作系统兼容”和“只与 Windows Server 2003 操作系统兼容”。这个选择的实质是匿名 SID 和 Pre-Windows 2000 Compatible Access 组的宽松程度。选 2003 模式更严格、更安全但环境里只要还留着一台 NT4 或 2000 的成员服务器就要退回兼容模式否则那台机器连不上来。这是个很典型的“看起来是安全选项、实际是兼容性选项”的地方。最后是目录服务还原模式密码。原料里把它设成和管理员密码一样这在测试环境省事但生产里是两个权限概念完全不同的口令还原模式密码只在目录服务离线还原时使用泄露了等于能离线改目录库。建议单独设一个并且记在能找得到的地方这个密码没有后悔药忘了只能重装域控。2.3 装完不代表能用四步现场验收向导跑完会自动重启重启之后dcpromo的日志会给你一个“安装完成”的结论但真正能用还要验四件事。第一步看共享。打开命令行敲net share应该能看到NETLOGON和SYSVOL两个共享。这两个共享是组策略和登录脚本的落地点只要有一个没出来说明 SYSVOL 的 FRS 还没完成初始同步2003 上这个过程可能要等十几分钟期间客户端会报“找不到域”或者组策略处理失败。第二步看 DNS 记录。打开 DNS 管理器展开正向查找区域 jiajie.local确认几个关键子目录存在_msdcs、_sites、_tcp、_udp。再展开_tcp里面应该有一串以_ldap、_kerberos、_kpasswd开头的 SRV 记录指向A.jiajie.local。这些记录就是客户端“找域控”的唯一依据缺一条对应协议就直接失效。# 从任何一台机器上手工验证 SRV 记录是否能解析出主域控 nslookup -typeSRV _ldap._tcp.dc._msdcs.jiajie.local nslookup -typeSRV _kerberos._tcp.jiajie.local-typeSRV表示查服务定位记录_ldap._tcp.dc._msdcs.这一串是 LDAP 服务的标准命名客户端开机加域时第一条查的就是它。返回结果里应该看到svr hostname a.jiajie.local和端口 389。如果返回“非存在域”基本上是 DNS 区域没建好或者动态更新被关了。第三步跑一遍诊断。dcdiag和netdiag都不在系统里自带需要在安装光盘的\SUPPORT\TOOLS目录里跑suptools.msi装上。装完在命令行里敲dcdiag /v重点看 Connectivity、Advertising、Frssysvol、KccEvent 这几项是不是 PASS。Advertising 这一项尤其关键它验证的是这台域控有没有把自己正常“广播”到 DNS 里失败意味着复制和客户端发现都会出问题。第四步看事件日志。目录服务日志里不该有 1083、1355、1864 这类级别的错误文件复制服务日志里不该有 JRNL_WRAP_ERROR。前一类多半是 DNS 或权限问题后一类是 FRS 日志被覆盖意味着 SYSVOL 同步已经断了需要做非权威还原。2.4 用应答文件把安装变成可复现的图形向导点一遍还行要装第二遍、第三遍就容易漏步骤。dcpromo支持应答文件把上面那些选择写进一个 ini安装就变成一条命令。; 主域控无人值守安装应答文件 dcpromo_main.txt [DCInstall] ReplicaOrNewDomainDomain NewDomainForest NewDomainDNSNamejiajie.local DomainNetbiosNameJIAJIE ForestLevel2 DomainLevel2 InstallDNSYes ConfirmGcYes CreateDNSDelegationNo DatabasePathC:\WINDOWS\NTDS LogPathC:\WINDOWS\NTDS SysvolPathC:\WINDOWS\SYSVOL SafeModeAdminPasswordLab2003 RebootOnCompletionYesForestLevel和DomainLevel的取值 2 对应 Windows Server 2003 模式取 0 是 Windows 2000 混合模式、1 是 Windows 2000 本机模式这就是图形界面里“权限”那一页对应的参数。InstallDNSYes对应前面说的“在这台计算机上安装并配置 DNS 服务器”。CreateDNSDelegationNo是因为这是林根域没有上级区域可以委派。SafeModeAdminPassword就是目录服务还原密码这里必须写明文应答文件因此要当敏感文件处理装完立刻删掉或锁权限。# 执行应答文件安装 dcpromo /answer:C:\setup\dcpromo_main.txt/answer:后面跟绝对路径参数名不区分大小写。执行前确认这台机器的工作组名和计算机名已经改好dcpromo不会替你改主机名。装完重启再用前面四步验收一遍主域控这块就算立住了。3. 辅助域控额外域控制器搭建复制链路比安装向导更值得盯额外域控制器的安装向导只有八步比主域控还短但它失败的概率高得多因为多了一个“能不能连上现有域”的前置条件。原料里那句“检查主辅是否相通”看着轻描淡写实际上这里出的问题占了我遇到的额外域控故障的七八成。3.1 地址、DNS 和连通性三件必须先做完的事额外域控的地址规划是死规矩IP 用同网段的另一个地址子网掩码和主域控一致网关随意隔离环境填自己DNS 首选必须是主域控的 IP。这条 DNS 规则在装之前和装之后还不一样。装之前B 的 DNS 指向 A是为了让 B 能解析出 jiajie.local 和那些 SRV 记录装完之后B 自己也是域控了DNS 可以改成指向自己但通常保留指向 A 更稳因为 A 才是 DNS 区域的主副本所在。这里最常见的错误是把公网 DNS 追加上去一旦客户端的解析请求在 A 那里超时就会跑到公网 DNS 去问“jiajie.local 在哪”得到一个“查无此域”的答复然后放弃表现为时好时坏的登录失败。连通性检查不能只 ping 通就算完。ping 走的是 ICMP域控之间真正要通的是 53DNS、88Kerberos、135RPC 终结点映射、389LDAP、445SMB、636LDAPS、3268全局编录。2003 默认没有开防火墙理论上全通但只要中途有一台机器开了自带防火墙或者装了第三方安全软件最先挂的就是 135 端口的 RPC 定位dcpromo会卡在“正在配置 Active Directory”那一屏很久然后报错。# 在辅助域控 B 上确认能解析出主域控的服务记录 ping -n 2 10.10.10.1 nslookup -typeSRV _ldap._tcp.dc._msdcs.jiajie.local nslookup -typeSRV _gc._tcp.jiajie.local # 确认 RPC 和 LDAP 端口可达 telnet 10.10.10.1 135 telnet 10.10.10.1 389telnet在 2003 上需要先启动 Telnet 客户端服务或者直接用portqry这个支持工具包里的命令行工具。连不上 135 的时候不要急着改 DNS那通常是安全软件或者路由的问题。_gc._tcp这条记录查的是全局编录首台域控默认就是 GC返回结果里应该有a.jiajie.local:3268。还有一条容易被忽略B 的计算机名不能和 A 一样也不能和域里任何一个已有对象重名。重名的情况下dcpromo报的错很含糊只说无法创建账户实际原因要去看事件日志里的 2089 或者 NTDS 复制错误。3.2 向导里选“现有域的额外域控制器”之后第一页选“现有域的额外域控制器”这是和主域控安装唯一的分叉点。选完之后向导会要你提供凭据这里要输入的是有权限在域里创建域控制器账户的账号也就是 Domain Admins 组成员如果这个域不是新林的第一台还需要 Enterprise Admins 权限。用户名JIAJIE\administrator 密码 主域控管理员口令 域 jiajie.local凭据这一步的报错信息非常不友好只要账号密码或者 DNS 解析任何一个环节有问题统一提示“无法联系到 Active Directory 域控制器”。排查顺序我一般固定成三步先nslookup jiajie.local确认域名能解析出 A 的 IP再nslookup -typeSRV确认 SRV 记录在最后用这个账号在主域控上登录一次确认口令没过期。三步都过还报错才去怀疑网络和防火墙。下一屏要输入“额外的域控制器域名”填 jiajie.local。再往下是数据库、日志和 SYSVOL 的位置和主域控一样的道理测试环境全默认。最后一屏是目录服务还原密码原料里设成了和主域控一样的值这个在测试环境方便记忆但在真实环境里每台域控的还原密码应该独立因为任何一台的还原密码泄露都等于给了攻击者一个离线改目录的入口。安装过程比主域控长因为要从 A 复制整个目录数据库和 SYSVOL 过来。这个阶段最关键的现象是向导界面上停在“正在配置 Active Directory”实际上后台在做初始复制如果网络慢或者目录对象多卡一两个小时都正常。这个阶段千万不要强行重启中断初始复制的域控会处于一种半残状态后续要么重装要么做权威还原。装完重启第一件事是确认 B 在Domain Controllers这个 OU 下面。打开“Active Directory 用户和计算机”展开Domain Controllers容器应该能看到 A 和 B 两台计算机对象B 的类型显示为“域控制器”。如果 B 落在Computers容器里说明它的角色没写对那它就是一个普通加域的成员服务器不是域控。3.3 复制到底通没通用这三个命令看原料里那句“经测试主域控制器的数据能及时复制到辅助域控上面”是个结论但没说怎么测。手工测法很简单在 A 上建一个测试用户然后到 B 上打开 AD 用户和计算机看这个用户出不出来出来说明复制通了等十几分钟还不出来就是断了。命令行测法更可靠repadmin和dcdiag都在支持工具包里。# 查看 B 上的入站复制伙伴和最近一次复制结果 repadmin /showrepl b.jiajie.local # 看整个林的复制健康度摘要重点看 largest delta 和错误数 repadmin /replsummary # 强制从 A 立即复制一次到 B不用等自动调度 repadmin /replicate b.jiajie.local a.jiajie.local DCjiajie,DClocal/showrepl的输出里每个命名上下文这里就是DCjiajie,DClocal和三个林级分区会列出上次复制成功的时间和结果码结果码 0 表示成功8451、8452 之类表示复制调用失败。/replsummary的largest delta是两个站点间最久没同步的时长超过一小时基本可以判定复制调度出了问题。/replicate的第三个参数是命名上下文 DN写错会提示找不到分区。图形界面里也有等价操作打开“Active Directory 站点和服务”展开Sites → Default-First-Site-Name → Servers → B → NTDS Settings右侧会列出从 A 复制的连接对象右键选“立即复制”即可。这个操作和命令行/replicate效果一样区别是图形界面会弹一个结果框。# 复制专项诊断只看复制相关的测试项 dcdiag /test:replications /v dcdiag /test:advertising /v/test:replications会逐个命名上下文检查复制状态/test:advertising检查这台域控有没有把自己正确注册到 DNS 里。这两个测试在刚装完额外域控的时候特别值得跑一遍因为它们能把“装成功了但没真通”这种状态揪出来。3.4 全局编录和多主复制先把概念摆正到了这一步有必要把两个概念说清楚否则后面的 FSMO 迁移会一直糊着。第一个是多主复制。2003 的 AD 是多主模型任何一台域控都能接受目录修改修改再通过复制同步到其他域控。这就是为什么 A 和 B 上都能建用户、改密码。但多主模型有个副作用两台域控同时改同一个对象的同一个属性会产生冲突最后按版本号和属性版本号决胜。所以额外域控装完不是“备份机”它是一台能独立接活的完整域控这点和主备数据库的思路完全不同。第二个是全局编录。GC 是一台域控上的特殊角色它保存了本域所有对象的完整副本以及林中其他域的对象的部属性副本。客户端登录时如果本地域控不是 GC遇到跨域的资源访问就要去问 GC问不到就可能出现“找不到用户”或者登录特别慢。首台域控默认就是 GC这个可以在“Active Directory 站点和服务”里右键B → NTDS Settings → 属性看“全局编录”那个勾有没有打上。单域单林的环境里两台域控都做 GC 是常规做法好处是任何一台挂掉另一台都能独立承接登录。但如果这个林将来要加子域就要注意一条老规矩基础结构主机不能同时是 GC除非所有域控都是 GC或者只有单一域。这条规矩在迁移时特别容易踩后面避坑章节还会再提一次。到这里主域控加辅助域控的双机结构就算完整了。原料里说“主域控制器的数据能及时复制到辅助域控上面”验证方式就是前面那三个命令加上手工建对象的对比结论是可信的——但“能复制”和“能接管”是两回事接管要靠 FSMO 角色迁移。4. FSMO 五角色迁移图形界面和 ntdsutil 两条路走一遍域内所有域控在权限上是对等的唯独五个操作不能多主必须有唯一的持有者这就是 FSMO。它分成两级林级两个域级三个。原料里的图形界面流程和命令行流程我都走了一遍两种方式各有适用场景图形界面适合第一次做、能看见每一步命令行适合批量或者远程。4.1 五个角色分别管什么什么时候该迁先把角色职责摆清楚不然迁移时容易漏掉一两个。角色级别职责不迁的后果架构主机 Schema Master林控制 schema 的修改全林唯一无法扩展架构装 Exchange 之类会直接失败域命名主机 Domain Naming Master林控制域的增删、应用分区的增删无法新建或删除域RID 主机 RID Master域给各域控分配 RID 池对象 SID 的后半段从这来RID 池耗尽后无法创建新安全主体PDC 仿真主机 PDC Emulator域密码变更的优先复制目标、时间同步源、老客户端兼容改密码后老系统登录不上时间源混乱基础结构主机 Infrastructure Master域维护跨域对象引用的更新跨域组的成员变更显示为 SID 而非名称一个单域单林的环境里这五个角色初始都在同一台机器上也就是首台域控 A。什么时候需要迁两种情况一是准备把这台老机器退役角色必须先迁走才能降级二是这台机器硬件不稳或者要做长时间维护角色迁到 B 上让业务继续跑。如果只是日常巡检完全没必要动迁移本身是有风险的操作。判断角色当前在哪台机器上最省事的命令是netdom它也在支持工具包里。# 一次性列出五个 FSMO 角色的当前持有者 netdom query fsmo # 也可以用 dsquery 分角色查2003 系统自带不用装支持工具 dsquery server -hasfsmo schema dsquery server -hasfsmo domaindns dsquery server -hasfsmo rid dsquery server -hasfsmo pdc dsquery server -hasfsmo infrastructurenetdom query fsmo输出五行每行一个角色加持有者名称这是最快的确认方式。dsquery server -hasfsmo的取值分别是schema、domaindns、rid、pdc、infrastructure注意域命名主机在这里写的是domaindns而不是domainnaming写错会提示无效参数。迁移前后各跑一次对比结果就知道迁干净没有。4.2 迁移前必须先做的 system state 备份原料把备份放在迁移步骤的第一条这个顺序是对的而且比它写得更严格——备份不只是做一次是做完之后要做一次还原验证否则你并不知道这个备份能不能用。# 用系统自带的 ntbackup 备份 system state 到非系统盘 ntbackup backup systemstate /j DC-A-Before-FSMO /f D:\backup\dc_a_systemstate.bkf /l:sbackup systemstate是备份类型参数它会把注册表、COM 类注册数据库、系统启动文件、证书服务数据库和 Active Directory 一起打包。/j是作业名写在日志里方便回溯。/f是目标文件路径一定要放在非系统盘上放系统盘等于没备份。/l:s表示只写摘要日志取值f是完整日志、n是不写日志。系统状态备份只覆盖 AD 数据库和 SYSVOL 的一部分DNS 区域如果是 AD 集成的那就在里面如果是标准区域文件要单独把C:\WINDOWS\system32\dns目录拷出来。另外还要记一份当前的角色归属清单也就是刚才netdom query fsmo的输出出问题时至少知道该往哪回。提示备份文件要在另一台机器上也留一份。域控本身挂了的时候备份和域控在同一个盘上等于没有备份。4.3 图形界面迁移前三个角色RID、PDC、基础结构这三个都是域级角色操作入口都在“Active Directory 用户和计算机”。关键动作是第一步先把管理控制台连接到目标域控 B否则你点“更改”的时候改的是当前连着的这台机器的角色很容易出现“点了没反应”或者“提示已经是本机”的怪现象。1. 在 B 上打开 Active Directory 用户和计算机 2. 右键域节点 jiajie.local → 连接到域控制器 → 选中 B → 确定 3. 再次右键域节点 → 操作主机 4. RID 选项卡 → 更改 → 是 5. PDC 选项卡 → 更改 → 是 6. 基础结构 选项卡 → 更改 → 是第 2 步的“连接到域控制器”是整个流程里最容易被跳过的一步。跳过之后控制台默认连的是本机而本机此刻还不是角色持有者点“更改”实际是把角色从 A 抢到当前连接的 DC 上如果当前连的还是 A就会出现“操作主机已经是这台计算机”的提示看起来像失败了其实什么都没发生。“更改”按钮在角色已经在本机时会灰掉这也是判断有没有连对目标的一个直观信号。三个角色迁完之后每个选项卡上显示的当前操作主机都应该是 B。基础结构主机这一项有个额外条件要留意如果 B 是全局编录而林里还有别的域基础结构主机会失效。原料这套是单域不受影响但如果将来扩成多域要么把基础结构主机放在非 GC 的域控上要么把所有域控都设成 GC。这条规则在 2003 时代是硬约束很多“跨域组成员显示成 SID”的怪问题都源于此。4.4 域命名主机和架构主机入口藏得比较深域命名主机的入口在另一个控制台里。“Active Directory 域和信任关系”打开后同样是先右键根节点连接到 B再右键根节点选“操作主机”点“更改”。1. 打开 Active Directory 域和信任关系 2. 右键根节点 → 连接到域控制器 → 选中 B → 确定 3. 右键根节点 → 操作主机 → 更改 → 是架构主机的入口默认根本不显示要先注册一个管理单元 DLL再用 MMC 手工添加。# 注册架构管理单元注册成功会弹出 DllRegisterServer 成功的提示 regsvr32 schmmgmt.dll # 打开空白 MMC 控制台 mmc注册完之后在 MMC 里按CtrlM打开“添加/删除管理单元”在列表里找到“Active Directory 架构”依次点“添加”“关闭”“确定”。接着右键“Active Directory 架构”节点选“更改域控制器”点“指定名称”输入 B 的计算机名或者完整名称B.jiajie.local确定之后再右键选“操作主机”点“更改”。regsvr32 schmmgmt.dll这一步失败的情况不少常见原因是文件本身缺失或者被安全软件拦了。schmmgmt.dll在C:\WINDOWS\system32下正常情况下是存在的如果报“找不到模块”先确认路径写全了没有再确认这台机器的系统文件有没有被精简过。4.5 ntdsutil 命令行transfer 和 seize 是两件完全不同的事图形界面适合做一次命令行适合反复做和在脚本里做。ntdsutil的路径是固定的进工具、进 roles 上下文、连目标服务器、退出连接上下文、执行转移。ntdsutil roles connections connect to server b.jiajie.local quit transfer RID master transfer PDC transfer infrastructure master transfer domain naming master transfer schema master quit quitconnect to server后面跟的是目标域控的完整名称成功后会有“已连接到服务器”的提示。连接上下文里执行完quit会回到fsmo maintenance提示符这时候才能执行transfer。每条transfer执行完会弹一个确认框选“是”完成操作。最后两个quit分别退出 roles 上下文和 ntdsutil 本体。原料给出的转移命令表我原样保留但补一列说明适用条件命令含义适用场景transfer PDC转移 PDC 仿真主机两台域控都在线正常交接transfer RID master转移 RID 主机两台域控都在线正常交接transfer infrastructure master转移基础结构主机两台域控都在线正常交接transfer domain naming master转移域命名主机两台域控都在线正常交接transfer schema master转移架构主机两台域控都在线正常交接seize PDC强行占用 PDC 仿真主机原持有者已离线且不会再回来seize RID master强行占用 RID 主机原持有者已离线且不会再回来seize infrastructure master强行占用基础结构主机原持有者已离线且不会再回来seize domain naming master强行占用域命名主机原持有者已离线且不会再回来seize schema master强行占用架构主机原持有者已离线且不会再回来这两组命令的区别必须说透transfer是协商式的要求原持有者在线并把角色正常交接出去seize是抢占式的不管原持有者状态直接在目标机上把角色认下来。用seize之后原持有者如果还能启动它会以为自己仍然持有这个角色两台机器同时认为自己有唯一的写权限后果是目录数据分裂这种状态很难修。所以判断标准只有一条原持有者能不能回来。能回来就用transfer回不来才用seize并且seize之后要立刻对原机器做元数据清理不让它再以域控身份启动。迁移完成用前面那条netdom query fsmo再跑一遍五行输出都应该指向 B。原料里写的“到此为止五大主机和全局编录已经迁移完毕”全局编录那一块是另一套操作在“Active Directory 站点和服务”里先把 A 的NTDS Settings属性里的全局编录勾去掉再把 B 的勾打上顺序不能反——先取消 A 再勾 B中间会有一小段时间林里没有 GC如果这个空窗期有客户端登录可能失败最好放在业务空闲时段做。5. 避坑与排查五个当场让人冒汗的现象下面这五条都是我在这套环境里真实撞过的每条按现象、原因、解决写遇到的时候可以直接对着查。5.1 dcpromo 报“无法联系到域控制器”但 ping 明明是通的现象在辅助域控 B 上跑dcpromo填完凭据那一步等半分钟弹“无法联系到 Active Directory 域控制器”但ping 10.10.10.1完全正常共享也能访问。原因dcpromo找域控靠的不是 ICMP是 DNS 里的 SRV 记录。DNS 首选指向了公网服务器或者指向了 B 自己此时 B 还没有 DNS 区域解析 jiajie.local 得到“非存在域”凭据验证直接失败。另一种情况是 DNS 指向正确但_msdcs子域被删了SRV 记录查不到。解决把 B 的 DNS 首选改成 A 的地址用nslookup -typeSRV _ldap._tcp.dc._msdcs.jiajie.local确认能解析出 A 的主机名和 389 端口再重跑dcpromo。如果 SRV 记录本身缺失到 A 上打开 DNS 管理器检查_msdcs区域是否随 AD 集成区域一起存在必要时重启 A 的 Netlogon 服务触发重新注册。5.2 额外域控装完repadmin 显示复制失败错误码 8524现象B 装完重启repadmin /showrepl里所有命名上下文都是红色错误码 8524 或者 1722提示“DSA 操作无法继续”。原因8524 是 RPC 层面连不上通常有两个来源。一是两台机器时间差超过 5 分钟Kerberos 票据直接失效看起来像网络问题。二是 B 的 DNS 里同时存在多条指向 A 的 A 记录其中一条是错的旧地址复制请求打到旧地址上超时。解决先在两台机器上跑w32tm /resync对齐时间再在 DNS 管理器里检查 jiajie.local 区域下 A 的 A 记录是不是只有一条、地址对不对。改完之后用repadmin /replicate手工触发一次成功后再跑repadmin /replsummary确认最大延迟降下来。5.3 架构主机那个“更改”按钮是灰的点了没反应现象regsvr32 schmmgmt.dll提示注册成功MMC 里也加上了“Active Directory 架构”但右键“操作主机”之后“更改”按钮灰着或者点了提示当前已经是这台计算机。原因MMC 里的架构管理单元默认连的是本机而本机此刻还不是架构主机持有者所以“更改”按钮的语义是“把角色从当前持有者改到当前连接的这台机器”按钮灰掉说明当前连接的目标已经是持有者或者当前连接的目标根本不可写。解决右键“Active Directory 架构”先“更改域控制器”并指定 B确定之后再进“操作主机”。如果按钮仍然灰检查当前登录账号是不是 Schema Admins 组成员——这个组的成员资格是迁架构主机的前提不在组里连菜单都点不动。5.4 全局编录迁移完了两台机器上都没打勾现象按流程把 A 的 GC 勾去掉、给 B 打上勾过一会儿回看发现 A 和 B 的“全局编录”勾都没了客户端登录变得极慢事件日志里出现 1126 错误。原因去 A 的勾和给 B 打勾之间有时间差如果 B 打勾那一步没有真正写进配置比如属性页关掉时点了取消或者 AD 复制还没把变更同步出去就会形成空窗。另外如果操作时连接的不是 B 而是本机勾打在了错误的机器上。解决在“Active Directory 站点和服务”里右键B → NTDS Settings → 属性重新确认“全局编录”勾选状态并点应用等几分钟让配置分区复制出去再在 A 上确认勾已去掉。用nslookup -typeSRV _gc._tcp.jiajie.local验证 GC 记录指向的是 B。这个操作最好在业务低峰做空窗期越短越好。5.5 用 seize 强行夺权之后原域控一开机就出乱子现象A 硬件故障直接下线在 B 上用seize把五个角色全抢了过来业务恢复。几天后 A 修好重新开机域内开始出现复制冲突、部分用户登录时好时坏事件日志里大量 2095 和 1863。原因A 的目录数据库里仍然记录着自己持有那五个角色它开机后照常对外服务两台机器同时认为自己有唯一的写权限RID 池分配和架构修改都会打架。这是seize最典型的后遗症。解决A 修好之后不要直接接入网络先做元数据清理把它从 AD 里彻底摘掉如果确实要让 A 重新做域控就重装系统再以额外域控身份重新加入。清理用ntdsutil的 metadata cleanup 上下文完成删掉 A 的服务器对象、它的 NTDS Settings 对象和对应的复制连接。清理完再开机接入网络冲突才会消失。6. 迁完之后的验收一份照着敲就能确认的清单迁移这类操作做完那一刻的“看起来成功”和真正的“干净”之间隔着一段距离。我现在的习惯是不管走图形界面还是命令行收尾一定把这套动作固定走一遍少一步都不算完。先把角色归属再确认一次这是最硬的指标# 五个角色必须全部指向新的持有者 B netdom query fsmo # 检查目录分区复制是否全部收敛 repadmin /replsummary dcdiag /test:replications /v dcdiag /test:advertising /vnetdom query fsmo的输出里五行都应该是B.jiajie.local只要有一行还是 A就说明那个角色没迁成功回到ntdsutil里补一次。repadmin /replsummary关注两列最大延迟和失败数延迟应该在一小时以内失败数应该是 0。再把这张表逐项对一遍每项都有明确的判定标准检查项判定标准出问题时先看哪FSMO 归属五个角色全在 Bnetdom query fsmo输出全局编录B 勾选、A 已取消_gc._tcp的 SRV 记录SYSVOL 共享A、B 上net share都有 SYSVOL文件复制服务日志DNS 区域A、B 上都能解析_msdcs下的 SRVDNS 管理器正向区域复制延迟largest delta小于一小时repadmin /showrepl错误码时间同步两台机器时间差在 5 分钟内w32tm /query /status表格里最容易被忽略的是 SYSVOL 那一项。FSMO 迁完不代表 SYSVOL 的复制拓扑也跟着调整如果 A 要退役B 必须能独立提供 SYSVOL否则组策略和登录脚本会失效。验证方法是把 A 关机在 B 上打开\\jiajie.local\SYSVOL看能不能访问能访问并且策略能正常下发才算真接管。还有一个进阶技巧值得单独提一句ntdsutil里除了 roles 上下文还有一个files上下文可以检查 SYSVOL 的复制状态并做非权威还原。当dcdiag报 Frssysvol 失败、事件日志出现 JRNL_WRAP_ERROR 的时候标准做法就是在这个上下文里先reset再non-authoritative restore然后重启 FRS 服务让它从 A 重新拉一份完整的 SYSVOL。这个操作比删掉 SYSVOL 目录重建安全得多别图快直接删文件。最后说一条我自己的血泪教训。第一次做这套迁移的时候我图省事只做了transfer没做备份迁到一半发现架构主机那一步因为账号不在 Schema Admins 组里卡住了角色处于一个“RID 已经到 B、架构还在 A”的中间态两台机器都不完整。那之后我每次动 FSMO 之前都会强制走一遍 system state 备份加角色清单打印并且提前确认操作账号在 Schema Admins 和 Enterprise Admins 里——这两件事加起来不到十分钟但能把回滚的余地留出来。整理好的应答文件模板、ntdsutil命令清单和这份验收表我都归在同一个目录里照着替换域名和地址就能直接跑希望帮到你。本文还有配套的精品资源点击获取