系统学习 故障排查学习路径:从方法论到系统、网络、数据库与 K8s

windows-disk-full

系统盘空间耗尽、WinSxS 或日志占用异常的定位与清理。

现象

系统盘剩余空间变成红色,资源管理器提示磁盘空间不足;Windows 更新报 0x80070070,应用无法写临时文件,用户登录后提示“配置文件加载失败”或桌面只剩临时配置。也可能机器仍能运行,但虚拟内存告警、休眠失败、系统还原无法创建还原点,事件日志和备份任务连续报错。

系统盘满不一定是用户文件多。WinSxS、休眠文件、页面文件、卷影副本、更新缓存、IIS 与应用日志、崩溃转储都可能占掉大量空间,而且其中一部分在资源管理器里显示的大小并不准确。

快速定位

先确认卷的真实容量和剩余空间,再按一级目录统计占用。递归统计很慢,应在维护窗口执行:

Get-Volume -DriveLetter C | Format-List DriveLetter,FileSystemLabel,Size,SizeRemaining
Get-PSDrive C | Select-Object Used,Free
Get-ChildItem C:\ -Directory -Force -ErrorAction SilentlyContinue |
  ForEach-Object {
    $sum = (Get-ChildItem $_.FullName -Recurse -File -Force -ErrorAction SilentlyContinue |
      Measure-Object Length -Sum).Sum
    [pscustomobject]@{ Path = $_.FullName; GB = [math]::Round($sum / 1GB, 2) }
  } | Sort-Object GB -Descending | Select-Object -First 15

重点检查系统目录、日志、休眠与页面文件:

Get-ChildItem C:\Windows\Temp,C:\Windows\SoftwareDistribution\Download -Recurse -File -Force -ErrorAction SilentlyContinue |
  Measure-Object Length -Sum
Get-ChildItem C:\Windows\Logs -Recurse -File -Force -ErrorAction SilentlyContinue |
  Sort-Object Length -Descending | Select-Object -First 20 FullName,@{n='MB';e={[math]::Round($_.Length/1MB,1)}}
Get-ChildItem C:\ -Force -File | Where-Object Name -in 'hiberfil.sys','pagefile.sys','swapfile.sys' |
  Select-Object Name,@{n='GB';e={[math]::Round($_.Length/1GB,2)}}
vssadmin list shadowstorage

组件存储不能用资源管理器的大小判断,必须让 DISM 分析。WinSxS 中大量文件是硬链接,重复计数会显得异常大:

dism /online /cleanup-image /analyzecomponentstore

如果怀疑虚拟磁盘膨胀,可先定位 WSL 或容器的 vhdx 文件;不要在 WSL 运行时压缩:

Get-ChildItem $env:LOCALAPPDATA\Packages -Recurse -Filter *.vhdx -ErrorAction SilentlyContinue |
  Sort-Object Length -Descending | Select-Object -First 5 FullName,@{n='GB';e={[math]::Round($_.Length/1GB,2)}}

常见根因

  1. Windows 更新缓存、WinSxS 组件存储和 CBS 日志长期增长。
  2. hiberfil.sys、pagefile.sys、swapfile.sys 按内存规模占用,内存越大事越大。
  3. 卷影副本和系统还原点占用未设上限,备份软件反复创建快照。
  4. 升级残留 Windows.old、回收站、崩溃转储和临时安装文件。
  5. IIS、数据库、应用日志或杀毒隔离区没有轮转,单个目录涨到几十 GB。
  6. 用户配置文件、下载目录、OneDrive 缓存或虚拟磁盘(WSL、容器)占用系统盘。
  7. 已删除但被进程或快照占用的空间没有释放,表现为“删了文件但剩余空间不变”。

修复

按“低风险到高风险”的顺序处理,每一步后重新看剩余空间,避免一次改太多无法回退。

先清回收站、临时目录和系统日志目录中明确可删除的内容。临时文件被占用时跳过即可,不要强删正在使用的文件:

Clear-RecycleBin -DriveLetter C -Force -ErrorAction SilentlyContinue
Remove-Item C:\Windows\Temp\* -Recurse -Force -ErrorAction SilentlyContinue

更新缓存要在停止服务后清理,下载目录删除后补丁会重新下载:

Stop-Service wuauserv,bits -Force
Remove-Item C:\Windows\SoftwareDistribution\Download\* -Recurse -Force -ErrorAction SilentlyContinue
Start-Service bits,wuauserv

组件存储清理优先用 DISM。startcomponentcleanup 删除被取代的组件,通常安全;/resetbase 会让已安装更新无法卸载,生产机不要随意使用:

dism /online /cleanup-image /startcomponentcleanup

休眠文件按需处理。关闭休眠会删除 hiberfil.sys 并同时关闭快速启动;内存很大的机器收益明显,但会失去休眠和快速启动能力:

powercfg /a
powercfg /hibernate off

如果仍需要休眠但想缩小文件,可先确认系统支持再改为精简模式:

powercfg /h /type reduced

页面文件不要直接删。先看是否为系统托管,再决定保留大小或迁到其他盘:

Get-CimInstance Win32_ComputerSystem | Select-Object AutomaticManagedPagefile
Get-CimInstance Win32_PageFileUsage

在“系统属性 → 高级 → 性能 → 虚拟内存”中调整。系统盘没有页面文件会影响完整内存转储和故障分析;禁用页面文件也可能让内存压力下的程序更早失败,不建议为省空间盲目关闭。

卷影副本要先用 vssadmin list shadowstorage 确认使用量,再设置上限或删除最旧快照。注意:快照可能承载系统还原点、备份历史或文件历史,删除前确认恢复需求:

vssadmin resize shadowstorage /for=C: /on=C: /maxsize=10%
vssadmin delete shadows /for=C: /oldest

Windows.old 不要手工删,权限和组件链接容易删不干净。用“磁盘清理 → 清理系统文件”移除,客户端也可通过存储感知处理;同样,C:\Windows\Installer 和 C:\ProgramData\Package Cache 虽然占空间,但用于修复和卸载,不能当普通缓存清理。

日志类目录先确认轮转策略,再删除旧文件;IIS 日志默认在 C:\inetpub\logs\LogFiles,应用日志按厂商文档处理。事件日志不建议用 wevtutil cl 清空,审计场景可能违规;应设置大小上限或归档。若清理后空间仍不释放,检查卷影副本和是否有进程持有已删除文件,再考虑重启相关服务或主机。最后的手段是扩容分区或把数据迁到其他卷,操作前备份并确认分区布局。

相关命令

参考链接

读完自测

合上页面,先回答,再展开对照。

  1. 资源管理器显示 WinSxS 有几十 GB,能不能直接删除该目录?
  2. 关闭休眠和调整页面文件分别有什么代价?
  3. 删除了大文件但系统盘剩余空间没有变化,可能是什么原因?
答案
  1. 不能。WinSxS 是组件存储,里面大量文件是硬链接,资源管理器会重复计数。应先用 dism /online /cleanup-image /analyzecomponentstore 判断,再用 startcomponentcleanup 清理;/resetbase 不可逆,不能随意执行。
  2. 关闭休眠会删除 hiberfil.sys,同时失去休眠和快速启动;调整或移除页面文件可能影响完整内存转储和内存压力下的稳定性。应按机器用途和故障分析需求选择。
  3. 可能是卷影副本/系统还原点仍保留旧数据、文件被进程打开但已删除、回收站未清空,或删除的是硬链接而实际数据仍在组件存储中。用 vssadmin list shadowstorage 和资源监视器进一步确认。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令