Windows AD PowerShell(十二):磁盘与性能

2169 字
11 分钟
Windows AD PowerShell(十二):磁盘与性能

这是 Windows AD PowerShell 学习记录的第十二节。磁盘空间、目录数据库大小、LDAP 查询量和复制队列,是域控变慢时常见的四条线索;单独一项异常不等于已经找到根因。## 十二、磁盘与性能

Terminal window
# 查磁盘空间
Get-PSDrive C | Select Used, Free
# 查 NTDS.dit 大小
Get-Item "C:\Windows\NTDS\ntds.dit" | Select Length
# LDAP 性能计数器
Get-Counter "\NTDS\LDAP Searches/sec" -SampleInterval 1 -MaxSamples 5
Get-Counter "\NTDS\DRA Pending Replication Synchronizations"
# 查 RPC 动态端口
netstat -an | findstr 49152

💡 NTDS.dit 会随删除操作持续膨胀,删除用户不会让它变小。 要真正回收空间必须做离线碎片整理(ntdsutil → activate instance ntds → compact to), 期间 AD 服务中断,需停机窗口。

💡 DRA Pending Replication Synchronizations 持续不降 = 复制积压, 配合 repadmin /replsummary 一起看。

数据来源说明:2026 年 9 月 28 日对实验域控 QYNET-CORE01 做了只读远程 WMI 查询,取得了 C: 容量、ntds.dit 文件大小和一组 NTDS 性能计数器快照。下面标注“VM 实测”的数值来自这次查询;Get-PSDrive、Get-Item、Get-Counter、netsh 和 netstat 并未在该 VM 控制台逐条运行,它们的输出如有展示会明确标为格式示例。本节未清理文件、停止服务或压缩数据库。

十二、磁盘与性能#

12.1 查询磁盘空间#

在域控本机运行最简单的查看命令:

Terminal window
Get-PSDrive C | Select-Object Name,Used,Free
# 格式示例;Used 和 Free 的原始单位是字节
Name Used Free
---- ---- ----
C 22953246720 40876716032

如果想直接看 GiB,避免盯着长串数字计算:

Terminal window
Get-PSDrive C |
Select-Object Name,
@{Name='UsedGiB';Expression={[math]::Round($_.Used / 1GB, 2)}},
@{Name='FreeGiB';Expression={[math]::Round($_.Free / 1GB, 2)}}
# 按本次远程 WMI 数值换算的示例展示,并非这条命令的实机直出
Name UsedGiB FreeGiB
---- ------- -------
C 21.38 38.07

**VM 实测:**远程读取 Win32_LogicalDisk 得到 C: 总容量 63,829,962,752 字节(约 59.45 GiB),空闲 40,876,716,032 字节(约 38.07 GiB)。上面的 Used 是用总容量减空闲容量得到的对应值。查看其他卷时,把 C 换成目标盘符即可。

还可以查询卷的总量、文件系统和剩余空间:

Terminal window
Get-Volume -DriveLetter C |
Select-Object DriveLetter,FileSystem,Size,SizeRemaining
# 格式示例;同样按 VM 的远程查询值填写容量,未在 VM 上执行 Get-Volume
DriveLetter FileSystem Size SizeRemaining
----------- ---------- ---- -------------
C NTFS 63829962752 40876716032

排障时不能只看 C::如果 AD 数据库、事务日志、SYSVOL 或备份被放在其他卷,也要查对应盘。磁盘接近满额时先确认哪个目录在增长;不要凭“空间不够”就清理 NTDS 日志或直接删除数据库文件。

12.2 查询 ntds.dit 大小#

ntds.dit 是 AD DS 的目录数据库文件。先查看实际路径与大小:

Terminal window
Get-Item 'C:\Windows\NTDS\ntds.dit' |
Select-Object FullName,Length,
@{Name='SizeMiB';Expression={[math]::Round($_.Length / 1MB, 2)}}
# 格式示例;长度与本次远程 WMI 实测值相同
FullName Length SizeMiB
-------- ------ -------
C:\Windows\NTDS\ntds.dit 54525952 52

**VM 实测:**通过远程 CIM_DataFile 按文件名查询,C:\Windows\NTDS\ntds.dit 的 FileSize 为 54,525,952 字节,即 52 MiB。路径可能因安装方式而不同,不能把 C:\Windows\NTDS 当成所有 DC 的固定位置;可在 DC 上通过 ntdsutil 的 files → info 核对数据库与日志目录。

💡 删除对象后,数据库文件通常不会立刻变小。 AD 会定期进行在线整理,回收数据库内部可重复利用的空间,但不会因此缩小磁盘上的 ntds.dit 文件。启用 AD 回收站后,已删除对象在可恢复期内还会保留属性,更不能期待“删几个用户,文件立刻缩小”。观察数据库大小要看长期趋势,而不是一次删除后的瞬时变化。

真需要缩小文件时:离线碎片整理#

微软文档给出的 ntdsutil 路径大致如下,这里仅用于识别流程,本文不执行:

ntdsutil
activate instance ntds
files
info
compact to D:\CompactNTDS

compact to 会在指定目录生成一份新的数据库;执行它并不意味着已经自动替换生产数据库。要先有经验证的系统状态备份、足够的临时空间和维护窗口,并停止 AD DS 服务或在 DSRM 中操作;之后还要按工具提示完成数据库替换、日志处理与服务验证。整个过程可能造成 AD 服务中断,不能作为日常“清磁盘”手段。若只因文件看起来大就压缩,通常得不偿失。

12.3 观察 LDAP 查询速率#

在 DC 上按 1 秒间隔取 5 次 LDAP Searches/sec:

Terminal window
Get-Counter '\NTDS\LDAP Searches/sec' -SampleInterval 1 -MaxSamples 5 |
ForEach-Object {
[pscustomobject]@{
TimeStamp = $_.TimeStamp
SearchesPerSec = [math]::Round($_.CounterSamples[0].CookedValue, 2)
}
}
# 格式示例,不是 VM 上执行 Get-Counter 的五次采样
TimeStamp SearchesPerSec
--------- --------------
2026/9/28 15:01:01 0
2026/9/28 15:01:02 1
2026/9/28 15:01:03 0
2026/9/28 15:01:04 0
2026/9/28 15:01:05 2

VM 实测:远程读取 Win32_PerfFormattedData_NTDS_NTDS 的单次快照时,LDAPSearchesPersec = 0。这只能说明采样当时没有观察到每秒 LDAP 搜索量,不能证明平时没有流量或性能问题。排障应在慢的时段持续采样,与 CPU、磁盘延迟、NTDS\ATQ Request Latency 等指标及客户端日志一起看。

⚠️ 性能计数器名称可能本地化。 上面的 \NTDS\... 是英文系统上的常见写法;中文 Windows 若提示找不到路径,先在目标 DC 上执行 Get-Counter -ListSet * | Where-Object CounterSetName -match 'NTDS|目录',检查该机器列出的实际 Paths,不要把“计数器路径不匹配”误判为 NTDS 服务不存在。

12.4 观察复制队列#

这个计数器表示本 DC 等待处理的目录同步请求数:

Terminal window
Get-Counter '\NTDS\DRA Pending Replication Synchronizations' `
-SampleInterval 5 -MaxSamples 3 |
ForEach-Object {
[pscustomobject]@{
TimeStamp = $_.TimeStamp
Pending = $_.CounterSamples[0].CookedValue
}
}
# 格式示例,不是 VM 上执行 Get-Counter 的三次采样
TimeStamp Pending
--------- -------
2026/9/28 15:02:05 0
2026/9/28 15:02:10 0
2026/9/28 15:02:15 0

VM 实测:同一组 WMI 性能快照中,DRAPendingReplicationSynchronizations = 0,DRAPendingReplicationOperations = 0。这是一个时间点的本机队列值,不是复制成功证明。队列长时间升高或不下降,才提示需要进一步查复制任务是否积压;即使为 0,仍可能是没有启动新的复制请求,或者复制伙伴不可达。因此还要配合:

Terminal window
repadmin /replsummary
repadmin /showrepl QYNET-CORE01
repadmin /queue QYNET-CORE01
# 这些命令本节未在 VM 上执行;解释与输出参见第五节

如果 repadmin 报错,先按第五节:复制健康核对失败码、伙伴和最后成功时间,不能仅凭性能计数器把原因归到磁盘或网络。

12.5 RPC 动态端口:别只盯 49152#

原大纲写了 netstat -an | findstr 49152。它只是在文本中搜到数字 49152 的行,既无法看到整个动态端口范围,也不能证明搜到的连接就是 AD 复制使用的 RPC。Windows 常见默认动态 TCP 端口范围是 49152–65535,但可以修改;先查本机配置:

Terminal window
netsh int ipv4 show dynamicport tcp
# 格式示例,未在本次 VM 上执行
Protocol tcp Dynamic Port Range
---------------------------------
Start Port : 49152
Number of Ports : 16384

如需查看当前有哪些高端口正在监听:

Terminal window
Get-NetTCPConnection -State Listen |
Where-Object { $_.LocalPort -ge 49152 -and $_.LocalPort -le 65535 } |
Select-Object LocalAddress,LocalPort,OwningProcess
# 格式示例;监听端口会随机器和时间变化
LocalAddress LocalPort OwningProcess
------------ --------- -------------
0.0.0.0 49666 764

可再用 Get-Process -Id <OwningProcess> 确认进程;但在高端口监听也不代表它一定是 RPC。排查 DC 复制的 1722 错误时,还要检查 DNS、RPC Endpoint Mapper 的 TCP 135、端点映射返回的实际端口,以及两台 DC 之间的防火墙和路由。Test-NetConnection 只测通 135,也不能证明后续动态端口都能通。

12.6 三种常见现象怎么串起来看#

现象先查什么不要急着做什么
DC 磁盘告警、登录变慢各卷剩余空间、NTDS/日志/备份所在目录、磁盘 I/O删 NTDS 日志或直接压缩数据库
LDAP 查询量突然增加持续采样搜索量、请求延迟、CPU,以及应用端请求模式单凭一次高数值就认定是 AD 数据库损坏
复制延迟、队列持续增长repadmin /replsummary、/showrepl、/queue,再看磁盘/网络/伙伴状态不问原因就全林 repadmin /syncall /AdeP

这里尤其要记住:磁盘容量、数据库文件大小、队列长度和实际服务健康,是四个不同的问题。 本次实验机 ntds.dit 只有 52 MiB、队列快照为 0,但这两个数字本身不构成“AD 一切正常”的结论。

参考资料#


上一篇:Windows AD PowerShell(十一):备份与恢复

下一篇:Windows AD PowerShell(十三):站点与服务

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
Windows AD PowerShell(十二):磁盘与性能
https://springtsuki.xucjno.com/posts/springtsuki/notes/windowsad/powershell/928-disk/
作者
SpringTsuki
发布于
2026-09-28
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
SpringTsuki
你好,我是浅月。
公告
浅月的开发小窝!欢迎你来到这里!
音乐
封面

音乐

暂未播放

0:000:00
暂无歌词
分类
标签
站点统计
文章
56
分类
9
标签
42
总字数
188,888
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
GitHub Actions
博客版本
Firefly v6.13.5
文章许可
CC BY-NC-SA 4.0

文章目录