NTDS.dit 文件压缩实为脱机碎片整理,须在DSRM模式下运行esentutl /d命令,重建数据库结构并释放空间;该操作不释放tombstone对象等逻辑冗余,且2012 R2+已支持自动在线优化。
ntds.dit 文件不能像普通文件那样用 zip 或 ntfs 压缩来减小体积,所谓“压缩”实质是通过脱机碎片整理(offline defragmentation)回收内部页碎片、重建索引、释放未使用空间。该操作必须在域控制器完全离线状态下进行,否则会因文件被独占锁定而失败。
必须进入目录服务还原模式(DSRM)
运行中的域控制器会始终锁定 ntds.dit,任何直接调用 esentutl 的尝试都会报错 operation not supported on a database that is in use。唯一安全入口是 DSRM:
- 重启服务器,在启动时反复按 F8,选择“目录服务还原模式”;或提前执行
bcdedit /set safeboot dsrepair后重启 - 使用安装 AD 时设定的 DSRM 管理员密码 登录(不是域管理员账户)
- 确认服务已停止:运行
sc query ntds,返回状态应为 STATE: 1 STOPPED
执行 esentutl /d 进行物理层整理
esentutl.exe 是 Windows 内置的 ESE 引擎维护工具,/d 参数会重建整个数据库结构,同时完成校验、去碎片、重排索引三重任务:
- 基础命令:
esentutl /d "C:\Windows\NTDS\ntds.dit" /t"C:\Temp\tempdfrg.edb" -
/t指定临时路径,该卷必须有 不小于当前 ntds.dit 文件大小的空闲空间(例如 ntds.dit 为 12 GB,临时盘至少需 12 GB 可用) - 执行时间取决于数据库大小与磁盘 I/O,10–15 GB 典型耗时 40–120 分钟,期间严禁断电或强制关机
- 成功后原 ntds.dit 被替换,旧文件默认保留为
ntds.dit.001,如磁盘紧张需手动删除
操作前后的关键准备与验证
脱机整理虽不改变逻辑数据,但属高风险维护动作,疏漏易致 DC 启动失败或复制异常:
- 整理前务必完成完整系统状态备份(含 NTDS 文件夹全量拷贝),并确认无复制延迟
- 整理完成后重启进正常模式,检查
services.msc中 NTDS 服务是否自动启动 - 用
dcdiag /test:replications验证复制状态,重点排查事件 ID 2108/1084(提示数据库不一致) - 清理残留:手动删除临时文件(
tempdfrg.edb)、日志文件(edb*.log),保留edb.chk不删
它不能解决哪些问题
脱机碎片整理对以下情况无效,需配合其他手段:
- 已删除但仍在 tombstone lifetime(默认 180 天)内的对象——空间不会释放
- 大量禁用账户、冗余组成员关系(如 memberOf)、多值属性膨胀——需人工清理或脚本归档
- 链接追踪(LVR)积累的历史链接条目——只能靠自然老化或升级架构降低影响
- Windows Server 2012 R2 及更新版本中,自动在线碎片整理已覆盖大部分日常优化需求,脱机操作频率可大幅降低

















