ad数据库ntds.dit本身不会因“写满磁盘”报错,真正导致事件id 623/1519/1479、服务停止及复制失败的是版本存储区溢出或edb.log日志占满系统盘,需区分并分别处理。
ad数据库文件ntds.dit本身不会“空间耗尽”而报错——它不随磁盘剩余空间变化直接报错。真正触发严重错误(如事件id 623、1519、1479,服务停止、登录失败、复制中断)的,是版本存储区(version store)溢出或事务日志文件(edb.log及衍生文件)占满系统盘,而非ntds.dit文件写满磁盘。需区分两类根本原因,分别处理。
确认是不是真正的“ntds.dit写满磁盘”
ntds.dit是ESE数据库文件,运行时被独占锁定,大小由对象数量、属性值、链接追踪数据和未回收的已删除对象决定。它不会动态增长到填满整个分区,但若C盘(默认存放路径)剩余空间不足20%(尤其
- 用df -h(PowerShell中用Get-PSDrive C)检查C盘可用空间,重点关注是否
- 运行esentutl /mh "C:\Windows\NTDS\ntds.dit"查看数据库状态:Healthy表示结构正常;Dirty Shutdown需修复;Jet database is corrupt需紧急恢复
- 检查C:\Windows\NTDS\下是否有大量edb000*.log(如超百个)、res1.log/res2.log是否已被删除(它们是20 MB预留空间,删掉即少20 MB容错余量)
处理版本存储区溢出(最常见真因)
这是“AD日志空间耗尽”类报错的主因:当大量对象被删除、属性频繁修改,或存在长事务未提交,ESE内部的版本存储会持续膨胀,达到上限后拒绝新写入,表现为NTDS ISAM错误+高CPU+DC假死。
- 先确认逻辑删除对象是否堆积:执行Get-ADObject -Filter * -IncludeDeletedObjects | Measure-Object,若返回数量远超实际对象(如百万级),说明回收站残留严重
- 在目录服务还原模式(DSRM)下运行:
ntdsutil
activate instance ntds
garbage collection
quit
quit
该操作强制触发墓碑对象物理清除(默认tombstone lifetime为180天,但可提前释放空间) - 避免后续堆积:禁用不必要的链接追踪(LVR)、定期审计启用AD回收站后的保留策略(默认360天,可缩短至90天)
清理或迁移事务日志与数据库文件
edb.log及其序列文件(edb00001.log等)每个10 MB,持续写入。若C盘小、日志未及时截断,会迅速占满空间,导致DC无法写入新事务。
- 临时缓解:重启DC进入DSRM,用esentutl /r edb /l "C:\Windows\NTDS" /d "C:\Windows\NTDS"重放并清空日志(仅适用于干净关机后残留日志)
- 长期方案:将日志路径迁出系统盘——在DSRM中运行:
ntdsutil
activate instance ntds
files
move log to D:\NTDS\Logs
再迁移数据库(可选):
move db to D:\NTDS\Data - 迁移后务必更新注册表HKLM\SYSTEM\CurrentControlSet\Services\NTDS\Parameters中DSA Database file与Database log files path两项,并重启验证
离线碎片整理(仅当确认需减小ntds.dit物理体积时)
该操作不解决“报错”,只优化空间利用率。它不能替代垃圾回收,也不能清理墓碑对象,但能消除内部页碎片,让ntds.dit文件变小、I/O更高效。
- 必须进入DSRM,确保sc query ntds返回STOPPED
- 备份整个C:\Windows\NTDS文件夹(系统状态备份更佳)
- 执行:
esentutl /d "C:\Windows\NTDS\ntds.dit" /t"D:\Temp\tempdfrg.edb"
注意:/t指定的临时路径需有≥当前ntds.dit大小的空闲空间 - 完成后重启,原ntds.dit已被替换;手动删除旧日志(edb*.log)、临时文件及ntds.dit.001(如有)










