怎么查看磁盘使用历史

系统问题

C 盘还剩多少,这个好回答。但“上个月还剩多少”,Windows 一般不会告诉你。系统默认只提供实时读数,不存历史。所以想查看磁盘使用历史,得先分清你要的到底是哪一层历史:是剩余空间随时间的变化,还是磁盘读写忙不忙,又或者是哪个文件夹悄悄长胖了。三个方向对应三套完全不同的做法,跑错方向基本就是白忙一场。

先分清你要的历史是哪一种

这件事没有万能入口,原因在于“磁盘使用”本身就能拆成三类完全不同的数据:

  • 空间占用历史:C 盘哪天开始变满的,是缓存、日志还是系统还原点吃掉的。
  • 读写性能历史:磁盘什么时候最忙,响应时间有没有突然飙高,是不是盘快不行了。
  • 文件变动历史:某个文件什么时候被改过、被删过、被谁覆盖过。

Windows 把这三类分给了不同的工具,而且大部分默认是关着的。性能计数器只在内存里滚动,页面一关就清零;存储设置只给当前快照;文件变动更是压根不记。有一说一有二说二,这是很多人搜半天搜不到东西的真正原因。

系统自带的存储页面只给你“此刻”

最顺手的入口是按 Win + I 打开设置,左侧选“系统”,点“存储”。这一页会把 C 盘按“应用和功能”“临时文件”“文档”“图片”等类别拆开,告诉你每一类占了多少 GB。

Windows 11 设置 > 系统 > 存储 页面

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

文件夹属性窗口

性能监视器才是微软留给你的长期记录工具

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

 性能监视器主界面

完整流程是这样:

  1. 左侧展开“数据收集器集”→“用户定义”,右键选“新建”→“数据收集器集”。
  2. 起个名字,比如 DiskLog,勾选“手动创建(高级)”,下一步。
  3. 类型选“性能计数器”,下一步。
  4. 点“添加”,在计数器列表里找到 LogicalDisk,展开后选 Free Megabytes,实例里只勾 C:,确定。
  5. 如果还想看繁忙程度,再补两个计数器:% Disk TimeAvg. Disk sec/Transfer
  6. 采样间隔改成 3600 秒,也就是一小时采一次,下一步。
  7. 选好日志保存目录(别放 C 盘),完成。
  8. 右键这个收集器集打开“属性”,切到“计划”选项卡,添加一条“每天、每 1 小时重复”的计划。
  9. 右键选“开始”,让它以后台方式跑起来。

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 就是通电小时数,四千小时大概相当于每天开八小时用了一年半。ReadErrorsTotalWriteErrorsTotal 是累计读写出错次数,数字长期不涨就正常。

字段 含义 怎么判断异常
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,定位大目录用 ncdudu -sh *,实时负载用 iotop

macOS 没有性能监视器这种图形化采集器,命令行里 df -h 看当前,日志用 log show 按时间范围检索。更实用的是时间机器:它按小时保留快照,进时间机器界面能直接翻到几天前的盘上内容,间接看出空间是何时被吃掉的。

这些地方最容易白忙一场

任务管理器“性能”页里的磁盘曲线好看,但它只覆盖当前这次开机的时间,关机就没了。资源监视器(resmon)同理,磁盘响应时间、队列长度都是实时值,不落盘。存储感知也只负责清理,不做归档,它不会告诉你三个月前的占用情况。

还有一点容易误会:系统还原点和卷影副本不是空间历史。它们确实占了空间,也能让你翻到某个时间点的文件状态,但没法拼出一条“每天剩多少 GB”的曲线。

当初为了揪出谁在偷偷吃 C 盘,我连着记了两周的手写笔记,最后发现头号嫌疑人是系统还原点。绕了一圈,还不如一开始就把 perfmon 那个采集任务挂上——它省下的可不只是笔记纸。

操作系统种类多样、版本繁杂,本文内容可能无法完全匹配你的具体环境,不保证完全正确或普遍适用,仅供操作参考。