怎么查看磁盘使用历史
C 盘还剩多少,这个好回答。但“上个月还剩多少”,Windows 一般不会告诉你。系统默认只提供实时读数,不存历史。所以想查看磁盘使用历史,得先分清你要的到底是哪一层历史:是剩余空间随时间的变化,还是磁盘读写忙不忙,又或者是哪个文件夹悄悄长胖了。三个方向对应三套完全不同的做法,跑错方向基本就是白忙一场。
先分清你要的历史是哪一种
这件事没有万能入口,原因在于“磁盘使用”本身就能拆成三类完全不同的数据:
- 空间占用历史:C 盘哪天开始变满的,是缓存、日志还是系统还原点吃掉的。
- 读写性能历史:磁盘什么时候最忙,响应时间有没有突然飙高,是不是盘快不行了。
- 文件变动历史:某个文件什么时候被改过、被删过、被谁覆盖过。
Windows 把这三类分给了不同的工具,而且大部分默认是关着的。性能计数器只在内存里滚动,页面一关就清零;存储设置只给当前快照;文件变动更是压根不记。有一说一有二说二,这是很多人搜半天搜不到东西的真正原因。
系统自带的存储页面只给你“此刻”
最顺手的入口是按 Win + I 打开设置,左侧选“系统”,点“存储”。这一页会把 C 盘按“应用和功能”“临时文件”“文档”“图片”等类别拆开,告诉你每一类占了多少 GB。

问题是这页没有任何时间轴。你今天看是 40 GB,明天看是 62 GB,但中间发生了什么、是哪一类涨的,页面不会告诉你。它是一张体检单,不是病历本。同理,右键任意文件夹看“属性”也只能给出当前的大小和占用空间。

性能监视器才是微软留给你的长期记录工具
按 Win + R 输入 perfmon 回车,这叫性能监视器。它平时用来实时看 CPU、内存曲线,但真正能长期留痕的是左侧的“数据收集器集”。默认情况下它什么都不记,得你亲手建一个采集任务。

完整流程是这样:
- 左侧展开“数据收集器集”→“用户定义”,右键选“新建”→“数据收集器集”。
- 起个名字,比如 DiskLog,勾选“手动创建(高级)”,下一步。
- 类型选“性能计数器”,下一步。
- 点“添加”,在计数器列表里找到
LogicalDisk,展开后选Free Megabytes,实例里只勾 C:,确定。 - 如果还想看繁忙程度,再补两个计数器:
% Disk Time和Avg. Disk sec/Transfer。 - 采样间隔改成 3600 秒,也就是一小时采一次,下一步。
- 选好日志保存目录(别放 C 盘),完成。
- 右键这个收集器集打开“属性”,切到“计划”选项卡,添加一条“每天、每 1 小时重复”的计划。
- 右键选“开始”,让它以后台方式跑起来。
Free Megabytes 这个计数器记的是每个逻辑盘当前的剩余容量,单位是 MB。一小时一条,一天 24 条,一年下来连一万行都不到,CSV 文件小得可以忽略。
想读数据的时候,右键该收集器集选“停止”,再右键“查看”→“日志数据”,就能把那段时间的折线调出来。横轴是时间,纵轴是剩余空间,斜率陡降的那几天一眼就能看出来。
嫌 perfmon 步骤多,用计划任务加一行脚本
性能监视器的界面确实绕,我自己第一次配的时候也来回点了半天。如果只想记“每天剩多少 GB”,用 PowerShell 更省事。把下面这段存成 D:\disklog.ps1:
$log = "D:\disklog.csv"
Get-CimInstance Win32_LogicalDisk -Filter "DriveType=3" | ForEach-Object {
[pscustomobject]@{
Time = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
Drive = $_.DeviceID
FreeGB = [math]::Round($_.FreeSpace / 1GB, 2)
TotalGB = [math]::Round($_.Size / 1GB, 2)
}
} | Export-Csv -Path $log -NoTypeInformation -Append -Encoding UTF8
然后在管理员 PowerShell 里挂一条计划任务,让它每小时跑一次:
schtasks /create /tn "DiskLog" /tr "powershell -NoProfile -ExecutionPolicy Bypass -File D:\disklog.ps1" /sc hourly /mo 1 /ru SYSTEM
跑几天以后,D:\disklog.csv 里就是一条条带时间戳的记录,拿 Excel 一画就是曲线。
悄悄说一句,这种土办法反而最耐用,换台电脑照样能跑,不依赖任何第三方软件。
硬盘本身其实记着一部分账
如果你说的“磁盘使用历史”是指这块盘用了多久、累计写了多少数据,那答案藏在硬盘固件里,而不是 Windows 里。管理员身份的 PowerShell 跑这一句:
Get-PhysicalDisk | Get-StorageReliabilityCounter |
Select-Object DeviceId, PowerOnHours, ReadErrorsTotal, WriteErrorsTotal, Temperature
返回的 PowerOnHours 就是通电小时数,四千小时大概相当于每天开八小时用了一年半。ReadErrorsTotal 和 WriteErrorsTotal 是累计读写出错次数,数字长期不涨就正常。
| 字段 | 含义 | 怎么判断异常 |
|---|---|---|
| PowerOnHours | 累计通电小时数 | 机械盘超过 3 万小时要留意 |
| ReadErrorsTotal | 累计读取错误次数 | 持续增长说明盘面可能有问题 |
| WriteErrorsTotal | 累计写入错误次数 | 同上 |
| Temperature | 当前温度(摄氏度) | 长期高于 55 度偏高 |
不是所有硬盘和驱动都返回这些值,SATA 机械盘支持得比较好,部分 NVMe 固态只返回通电时间,读出来是 0 或者干脆报错,不用太纠结。
事件查看器里能找到零散的时间点
按 Win + R 输入 eventvwr.msc,进“Windows 日志”→“系统”,右侧点“筛选当前日志”。这里有两类记录值得翻:
- 磁盘空间不足:Windows 在剩余空间告急时会往系统日志里写事件,这类记录能让你定位“哪一天开始不够用”。
- 磁盘报错:来源为
Disk的事件,比如编号 7、11、51、153 这类,指向坏块、超时重试或控制器异常。

它给不了连续曲线,只能给时间点。但排查“盘是不是那几天出的毛病”,时间点往往比曲线更管用。我自己就靠一条 Disk 11 的记录,锁定了某根 SATA 线接触不良的时间窗口。
想知道文件夹怎么长胖的,得靠第三方快照对比
系统自带工具能告诉你盘满了,但很难告诉你哪个目录涨得最快。这块是第三方工具的强项:
- WizTree:直接读 NTFS 的主文件表,扫几个 TB 的盘也是秒级,看当前占用非常爽。
- TreeSize Free:按目录树排序,适合一层层往下钻。
- TreeSize Professional:能保存快照,再拿两次快照做对比,明确指出“这个文件夹三天里涨了 18 GB”。
- DiskPulse 一类监控工具:后台盯着指定目录,文件被改被删都会留记录。
不想装软件也有土办法:每周手动导出一次目录清单,用文本对比工具比差异,效果差不多,就是麻烦。
各条路能查到什么,一张表说清
| 想查的内容 | 用什么 | 能看到历史吗 | 前提条件 |
|---|---|---|---|
| 当前各类别占用 | 设置 → 系统 → 存储 | 不能,只有快照 | 无 |
| 剩余空间随时间变化 | perfmon 数据收集器集 | 能 | 需提前创建并启动采集 |
| 剩余空间逐日记录 | 计划任务 + PowerShell | 能 | 需先挂好定时任务 |
| 磁盘繁忙度与响应时间 | perfmon 计数器 | 能,需提前配 | 同数据收集器集 |
| 实时读写曲线 | 资源监视器 resmon | 不能,关掉即清零 | 无 |
| 磁盘报错、掉盘时间点 | 事件查看器系统日志 | 能,出过事才有记录 | 无 |
| 通电时长与累计错误 | Get-StorageReliabilityCounter | 能,硬件层累计值 | 管理员权限,部分盘不支持 |
| 文件夹增大的对比 | TreeSize Professional 等 | 能 | 需保存两次以上快照 |
Linux 和 macOS 上的对应做法
Linux 下系统日志本身就带性能数据,前提是装了 sysstat 并开启采集。历史数据放在 /var/log/sa/,用 sar -d -f /var/log/sa/sa15 就能看 15 号那天的磁盘负载。看当前空间用 df -h,定位大目录用 ncdu 或 du -sh *,实时负载用 iotop。
macOS 没有性能监视器这种图形化采集器,命令行里 df -h 看当前,日志用 log show 按时间范围检索。更实用的是时间机器:它按小时保留快照,进时间机器界面能直接翻到几天前的盘上内容,间接看出空间是何时被吃掉的。
这些地方最容易白忙一场
任务管理器“性能”页里的磁盘曲线好看,但它只覆盖当前这次开机的时间,关机就没了。资源监视器(resmon)同理,磁盘响应时间、队列长度都是实时值,不落盘。存储感知也只负责清理,不做归档,它不会告诉你三个月前的占用情况。
还有一点容易误会:系统还原点和卷影副本不是空间历史。它们确实占了空间,也能让你翻到某个时间点的文件状态,但没法拼出一条“每天剩多少 GB”的曲线。
当初为了揪出谁在偷偷吃 C 盘,我连着记了两周的手写笔记,最后发现头号嫌疑人是系统还原点。绕了一圈,还不如一开始就把 perfmon 那个采集任务挂上——它省下的可不只是笔记纸。