磁盘配额按文件逻辑大小计费,不反映NTFS压缩后的物理空间节省;需通过dir /s、PowerShell或fsutil等外部手段,对比逻辑大小与“Size on Disk”差值来间接统计压缩收益。
windows 磁盘配额(disk quota)本身不统计、也不反映 ntfs 压缩导致的物理空间与逻辑空间差值。这是关键前提——配额系统只按逻辑大小(文件内容字节数) 计费,而非实际占用的磁盘簇空间(size on disk),更不会单独标出“因压缩节省了多少物理空间”。
也就是说:
- 你启用配额后,用户上传一个 100 MB 的文档 → 即使它被 NTFS 压缩后只占 60 MB 物理空间,配额仍按 100 MB 逻辑大小计入该用户的配额用量;
- 配额报告里不会出现“压缩节省量”“物理占用”“未压缩大小”等字段,也没有内置视图或 API 可直接导出这个差值。
那怎么知道压缩带来的空间差?靠外部手段间接统计:
一、用命令行查单个文件/文件夹的逻辑 vs 物理大小
打开管理员权限的 CMD 或 PowerShell,运行:
dir /a /s "D:\MyFolder"
输出中会同时显示:
-
size:所有文件逻辑总大小(未压缩字节数) -
size on disk:实际占用的磁盘空间(已压缩后的物理大小)
二者相减,就是该路径下因压缩节省的空间。
✅ 示例:
245 File(s) 1,284,392,156 bytes← 逻辑大小245 File(s) 892,015,616 bytes← 物理占用
差值 ≈ 392 MB 被压缩“省”出来
二、用 PowerShell 批量计算整个卷的压缩差值
以 D 盘为例(需管理员权限):
$vol = Get-PSDrive D
$logical = (Get-ChildItem D:\ -Recurse -File | Measure-Object Length -Sum).Sum
$physical = (Get-ChildItem D:\ -Recurse -File | ForEach-Object { $_.Length -eq 0 ? 0 : (Get-Item $_.FullName).Length } | Measure-Object -Sum).Sum # 实际不这么写,正确做法是:
# 更可靠方式:
$files = Get-ChildItem D:\ -Recurse -File -ErrorAction SilentlyContinue
$logicalSum = ($files | Measure-Object Length -Sum).Sum
$physicalSum = ($files | ForEach-Object { (Get-Item $_.FullName).Length } | Measure-Object -Sum).Sum
Write-Host "逻辑大小: $([math]::Round($logicalSum / 1GB, 2)) GB"
Write-Host "物理占用: $([math]::Round($physicalSum / 1GB, 2)) GB"
Write-Host "压缩节省: $([math]::Round(($logicalSum - $physicalSum) / 1GB, 2)) GB"⚠️ 注意:Get-Item.Length 返回的就是 Size on Disk(NTFS 层面的实际分配字节数),不是逻辑大小。这是 Windows PowerShell 对 NTFS 文件对象的原生支持。
三、用 fsutil 查指定文件的精确物理占用
对任意文件,可精准获取其磁盘实际占用:
fsutil file queryallocranges "D:\report.docx"
输出会列出所有分配的簇范围,总和即为物理大小。配合 dir 查逻辑大小,即可算出差值。
四、配额场景下的实用建议
如果你在管理多用户共享卷(如 D:\Shared),又启用了 NTFS 压缩 + 配额:
- 不要指望配额报表告诉你“谁压缩得多”,它只管谁存了多大逻辑数据;
- 若需评估压缩收益,定期用上述
dir /s或脚本扫描全卷,生成压缩效益报告; - 对高频写入+高比例压缩的目录(如日志归档、文本数据库),可考虑关闭压缩(右键属性 → 取消勾选“压缩此驱动器”),避免配额统计与存储成本脱节。
不复杂但容易忽略:配额是逻辑层计量,压缩是文件系统层优化,二者不在同一维度。想看清“省了多少”,得绕开配额,直接问 NTFS。

















