介绍
存储感知是 Windows 11、Windows 10 和 Windows Server 版本中的内置功能,通过删除不必要的文件,帮助你自动释放磁盘空间。 此功能通常用于管理本地文件和过时的云内容、清理下载文件夹以及管理物理和虚拟桌面基础结构(VDI)环境中的用户配置文件。 但是,用户可能会遇到存储感知由于配置问题、产品 bug、不受支持的环境或外部软件干扰而无法按预期工作的情况。 本文整合了实际支持体验,为管理员和支持人员提供全面的分步解决方案。
故障排除清单
使用此清单进行系统故障排除:
- 标识 Windows 版本或 SKU(例如企业版、多会话、服务器、IoT)。
- 确定存储感知是否应可用于 OS 和 SKU。
- 检查是否安装了最新的 Windows 更新(包括已知修补程序,如KB5050092)。
- 检查 组策略>注册表 以获取正确的配置(尤其是文件夹清理阈值)。
- 验证 Windows 设置>系统>存储中的存储感知设置。
- 验证存储感知“计划任务”是否存在,并在任务计划程序中检查其状态。
- 在任务计划程序和事件查看器中查找相关的错误消息。
- 确定最新的第三方软件(防病毒、DLP、备份)是否存在,并检查更新的文件访问时间。
- 检查要清理的文件夹和驱动器。 另请检查打开的句柄。
- 确定问题是文件特定、文件夹特定还是配置文件特定。
- 查看最近的系统、网络和存储拓扑更改。
- 确定问题是影响单个用户、子集还是所有用户。
- [可选]尝试手动运行存储感知,并查看存储空间更改。
常见问题和解决方案
以下部分详细介绍了最常见的故障模式,并提供分步解决方案。
存储感知缺失、未运行或不可用
原因
- 设计上有意缺少的功能(例如 Windows 11 多会话版本 23H2 或 22H2)。
- 不支持的 SKU 或版本。
- 已知错误(例如,KB5050092修复前的环境)。
- 计划任务已删除或取消注册。
决议
- 检查操作系统 (OS) 和 SKU 的支持情况:请检查是否应该有“存储感知”功能(请参考 Microsoft 文档)。
- 应用 OS 更新:
- 对于缺失或非活动的“Storage Sense”功能,请安装最新的 Windows 累积更新。
- 对于多会话版本 23H2 或 22H2,请应用KB5050092或更高版本(KB5051989)。
- 检查任务计划程序:如果存储感知任务未注册或缺失,则此条件可能是设计或由 bug 引起的(引用KB5050092)。
解决方法
如果缺少某个功能,请使用 PowerShell 或第三方工具和脚本进行清理。
存储感知运行但不按预期删除文件
原因
- 组策略对象或注册表设置或目标不正确。
- 不在存储感知范围内的文件和文件夹(例如,下载中的子文件夹、非系统驱动器)。
- 防病毒或安全功能工具更新“LastAccessTime”文件。
- 文件受到保护:文件处于打开状态、正在使用、隐藏或系统标记。
决议
- GPO 和注册表:
- 请确保策略已应用且注册表项正确。
- HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\StorageSense
- 例如,“下载”文件夹的 ConfigStorageSenseDownloadsCleanupThreshold DWORD。
- 若要检查策略,请使用 gpupdate /force 和 gpresult /h result.html。
- 请确保策略已应用且注册表项正确。
- 策略范围:仅清理下载根文件夹中的文件。 子文件夹和海关文件夹需要脚本。
- 文件夹与属性检查:
-
使用 PowerShell:
Get-ChildItem \<DownloadsPath> | Where-Object { $_.LastAccessTime -lt (Get-Date).AddDays(-30) } -
确保文件未隐藏,且不是系统文件,也未在使用中。
-
- 从防病毒扫描中排除:
- 从例行扫描中排除下载或相关文件夹。
- 如果不可能,请使用自定义脚本中的“LastWriteTime”作为删除日期属性。
- 手动运行:若要验证配置,请尝试通过 Windows 设置运行手动存储感知。
存储感知计划任务失败(“类未注册”或其他错误)
原因
- 操作系统或功能更新的 bug(例如:删除 SettingSyncStateReporter)
- 计划任务已删除或不匹配
决议
- 已知的良性故障:如果存储感知手动工作,通常可以忽略“类未注册(0x80040154)”等错误。
- 更新 Windows:等待修复问题的累积更新或参考可用的补丁程序。
- 重新创建任务:受影响的 SKU 不需要或无法进行。 而是依赖于等待产品更新。
由于属性或环境因素而未删除文件和文件夹
原因
- 文件已隐藏或系统标记(存储感知会跳过这些文件)。
- 锁定或打开文件(通过用户会话或第三方工具)。
- 防病毒、备份、DLP、Teams、同步应用程序更新时间戳。
决议
-
解锁或释放文件:
- 使用 Sysinternals Handle.exe 或进程资源管理器识别打开的句柄并关闭它们。
- 若要释放永久性锁,请重启系统。
-
文件属性:确保文件未隐藏或系统标记(使用 PowerShell 或 Windows 资源管理器删除属性)。
-
环境排除:从扫描中排除目标目录,尤其是针对防病毒。
-
文件夹的自定义脚本:使用 PowerShell 清理文件夹和文件:
Get-ChildItem "C:\Downloads" -Recurse | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } | Remove-Item -Recurse -Force
用户配置文件容器或存储空间配额错误
原因
- 用户配置文件容器达到分配的配额。
- 文件系统或共享存储卷几乎已满。
- 磁盘错误代码(例如,0xC000CF13),用户配置文件文件夹中的“空间不足”。
决议
- 扩大配额:通过概况解决方案或 VHD/VHDX 管理工具调整概况或容器大小。
- 磁盘管理:使用磁盘管理(diskmgmt.msc)检查和扩展卷。
更改后网络或文件共享不可访问性
原因
- 在网络或存储迁移后,DNS缓存依然保留旧的文件共享IP地址。
- NLB 或 DirectAccess 配置错误。
决议
- 刷新 DNS 缓存:
- ipconfig /flushdns
- 验证解决方法:
- nslookup <文件共享>
- ipconfig /displaydns
- 重启客户端:作为最后手段,重启客户端以刷新缓存。
存储系统、日志已满或存储设备缺失
原因
- USN 日志已满或达到分配限制(事件日志/堆栈显示日记或群集错误)。
- 存储 ID 更改或拓扑更新后未检测到磁盘/LUN。
决议
- 清除 USN 日志:
- fsutil usn deleteJournal /D <DriveLetter>:
- 运行磁盘检查工具 (Chkdsk):
- chkdsk /f <DriveLetter>:
- 对于设备问题:
- 在 Device Manager 中重新扫描磁盘。
- 与存储供应商协调进行阵列或设备重新映射。
- 如果问题仍未解决,请重启。
文件夹或 VM 磁盘上的访问权限被拒绝错误
原因
- 系统或用户权限不正确或缺失。
- 密码或凭据更改未同步。
决议
- 检查权限:**
- 在 PowerShell 中使用 Get-Acl <路径> 来检查 SYSTEM 或完全访问权限。
- 调整 ACL:** 使用 “属性>安全性 ”选项卡或 icacls 命令。
- 同步凭据:根据需要执行密码更改。 然后,再次验证。
存储组件中的安全漏洞
原因
- CVE 会影响存储(如案例中所述)。
- 等待更新部署。
决议
应用安全更新:跟踪并安装解决 CVE 的相关 Windows 更新。
常见问题快速参考表
| 症状 | 根源 | 决议 |
|---|---|---|
| 多会话中缺少存储感知功能 | 按设计移除,产品漏洞 | 安装KB5050092/KB5051989(如果适用) |
| 存储感知任务“类未注册” | OS 组件删除/已知良性错误 | 根据需要,忽略、应用更新,必要时手动运行 |
| 下载中未删除的文件 | AV 处理文件,策略未配置,仅处理文件而不包括文件夹 | 从 AV 中排除、查看 GPO/reg、文件夹脚本 |
| 云文件未脱水 | 属性(隐藏/系统),最近访问 | 取消属性设置,检查访问日志,使用非隐藏 |
| IP 更改后无法访问文件共享 | DNS 缓存已过时 | ipconfig /flushdns;如果未解决,请重启 |
| 配置文件或文件夹显示“空间不足” | 配额已超出,存储空间已满 | 增加配额,扩展共享,清理空间 |
| USN 日志或存储日志已满 | 达到生命周期限制 | fsutil usn deleteJournal /D <drive>; chkdsk (执行 fsutil usn 命令以删除日志;然后运行 chkdsk 检查磁盘) |
| Hyper-V“访问被拒绝”附加磁盘 | 配置目录缺少权限 | 重设文件夹的系统/用户权限 |
| LUN/存储更改后未检测到存储 | 存储 ID 不匹配,设备隐藏 | 在设备管理器中重新扫描、重新启动、存储供应商支持 |
| 存储感知不会清理非系统驱动器 | 当前设计不支持 | 对非系统驱动器使用自定义脚本 |
数据收集
在联系Microsoft支持人员之前,可以收集有关你的问题的以下信息。
-
策略/注册表导出:
- gpresult /h gp.html
- 相关密钥的注册表导出命令
-
任务计划程序快照
- 存储感知任务的状态及历史记录
-
文件元数据的 PowerShell:
- <Get-ChildItem 路径> | 选择 Name、LastAccessTime、Attributes
-
Sysinternals 实用工具:
- Handle.exe,进程监视器(Procmon),进程资源管理器
-
磁盘工具:
- diskmgmt.msc
- chkdsk /f <驱动器>
- fsutil usn deleteJournal /D <驱动器>
-
事件/系统日志:
- 存储感知:C:\Windows\System32\LogFiles\setupcln\setupact.log
- 事件查看器:应用程序、系统、Hyper-V、FailoverClustering 日志
-
网络:
- ipconfig /displaydns,ipconfig /flushdns,nslookup <host>
-
用户档案配额:
- 管理工具、PowerShell 或特定于解决方案的实用工具
-
命令行引用表
| Scenario | 示例命令 |
|---|---|
| GP 验证 | gpresult /h gp.html |
| 注册表导出 | reg export <key><file> |
| 文件元数据 | <Get-ChildItem path> / dir /ta |
| 磁盘运行状况 | chkdsk /f <驱动器> |
| USN 日记 | fsutil usn deleteJournal /D <驱动器> |
| 任务计划程序 | 打开任务计划程序应用 |
| DNS 问题 | ipconfig /flushdns / nslookup |