跳转至

camsvc 和 scoop 导致的存储空间问题

之前看到 C 盘和 D 盘红得发亮,我还感慨说,没想到有一天也轮到我清理自己电脑的硬盘空间了。等到和一大堆 DDL 决斗以后,终于腾出时间解决这个问题,发现大部分空间都是被一些奇怪的东西占用的,只要能发现还有这么一个东西,就很容易解决。于是在此留下一些经验,作为参考。


前情提要

高考完当时换电脑,我电脑不是我自己选的。如果我自己选,高低要买个 1 TB 的笔记本。倒不是说预料到 2026 年硬盘要涨价,而是本来就是屯屯鼠,常用的字体一类都要留本地备份,音乐也基本都是本地音乐。但是当时没什么想法,最后家里面就意思说,现在家里还有多的本,你先拿上用,要是开学发现满足不了需求再换。于是就拿着这个本一直用到现在,别人问我怎么选笔记本,我也没选过,也没法提供什么建议。ThinkBook 16 G5+ IRH,13 代 i5,16 GB 的 RAM,加上 512 GB 的硬盘。用到现在其实也还好。

反正秉承着分区的优良传统,我给我电脑分了这么几个盘。C 盘,200 GB,用途就不用多说了。D 盘,141 GB,主要是软件,也放虚拟机(不想被 aTrust 监视或者被 WPS 乱改关联)。E 盘,108 GB,放数据。F 盘,8 GB,学校。G 盘,16 GB,本地音乐,但是我音乐的标题一直有点问题,还没开始仔细调。

之前被别人叫去清理过多次 C 盘空间,加上平常对文件管理还是有一套,我自认为对怎么让 C 盘不红还是有点心得的。于是我早早就把 %USERPROFILE% 下面桌面、下载、文档那些目录都丢到 E 盘(毕竟我很喜欢把下载文件夹当成临时文件夹用),把微信 QQ 数据丢到 D 盘,本来安装路径在 C:\Program FilesC:\Program Files (x86) 的软件都把盘符换到 D 盘,Steam 游戏也放 D 盘,Scoop 包管理器安装目录也在 D 盘。想着都做到这种程度了,D 盘红都不能让 C 盘红了。

结果没想到,06 月 10 日的时候,这几个盘看上去就像这样(单位 GB):

盘符 可用空间 总空间 使用比例
C 18.8 200 90.60%
D 9.51 141 93.26%
E 49.2 108 54.44%
F 6.20 8 22.50%
G 10.5 16 34.38%

于是我 C 盘跟 D 盘一起红了。

尝试

我用火绒清了一下垃圾,发现没用,该红的照样红。又看了虚拟机的空间占用,发现虽然它用掉了 60 GB,但我好像什么都做不了,于是只好把备份用的 Windows 10 镜像挪到了 E 盘的备份目录下面。最后因为我着急弄 DDL 暂时没空管,但是 D 盘红了确实会很麻烦,于是把微信和 QQ 的数据又从 D 盘挪到了 E 盘。事实上,因为我已经把文档的目录改到了 E 盘,它们本来就应该在 E 盘才对。这些东西占用 11.5 GB,于是危机暂时解除。

后来因为这个虚拟机的空间占用问题,又把之前捣鼓过的 Edgeless 捡起来了,但是到现在还没解决连不上网的问题(前两天也没时间鼓捣)。23 号发现 Windows Sandbox 突然能用了还高兴了一下,结果发现它一关机就直接重置了,和我想象中还不太一样,估计会弄得比较麻烦。

Scoop

22 号终于把 DDL(暂时)清空了,在 Scoop 升级软件(并将其他软件尽量统一给它管理,一直咕咕)的过程中突然灵机一动,想到 Scoop 下载完安装包以后应该也是会缓存的,不知道这个缓存有没有自动清理。

于是打开它的 cache 目录,发现了琳琅满目的安装包。运行 scoop help 以后,看到了两条命令:

cache      Show or clear the download cache
cleanup    Cleanup apps by removing old versions

其实之前没想到旧版本也会保留,但是仔细一想是这么个事;Scoop 每次都是切一下 current 目录的指针就把版本换掉了,从来没删过旧的版本。

于是运行两条命令:

scoop cache rm *
scoop cleanup *

分别删除缓存的安装包文件(显示共 165 个文件 7.9 GB),还有软件的过往版本。清理完成后 D 盘剩余 41.1 GB。推算的话,Scoop 这里大概清理出来 20 GB 的存储。到这里 D 盘的问题就结束了。

camsvc

但是 C 盘的空间又去哪里了呢?我对这个问题一直想不明白。软件基本没装到 C 盘,最多有几个装到了 %APPDATA% 的,但也不可能吃这么多空间。之前断断续续测过几个可能占用空间比较大的文件夹,比如 Program FilesProgram Files (x86)%LOCALAPPDATA%%APPDATA%Windows;直接选中然后 Alt+Enter 查看属性,发现也没有想象中占用那么多。

于是做了如下几个测算:

  • 硬盘外部显示,整个盘当时还有 17.8 GB 可用。事实上中间达到过个位数,然后触发了存储感知,可能不知道删了些什么东西回了回血。
  • 进入硬盘,显示隐藏文件(我电脑一直开着显示受保护的操作系统文件),然后 Alt+A 全选,再 Alt+Enter 查看属性。显示为大小 271 GB,占用空间 123 GB。我能理解这个地方不看大小,而是看使用空间(虽然我不知道为什么会有这么大差异);但占用空间与剩余空间加起来,应该正好等于总容量才对。也就是说,中间还有将近 60 GB 的缺口。
  • 在 C 盘属性中看到一个详细信息,点进去先是要了管理员权限(这个很重要),然后跳转到了「设置 → 系统 → 存储 → 其他驱动器上使用的存储空间 → C」。这个地方的信息很多,有兴趣可以展开看一下。重点就是,「系统和保留」一项占用了 121 GB,但是之前测算 Windows 目录其实也只有 50 GB 多一点。
存储空间详细信息
项目 占用
系统和保留 121 GB
安装的应用 52.9 GB
其他 6.95 GB
临时文件 1.00 GB
其他用户 47.0 MB
地图 12.4 MB
文档 0 B
图片 0 B
音乐 0 B
视频 0 B
邮件 0 B
OneDrive 0 B
桌面 0 B

于是我把所有数据给 GLM-5.1 写了一遍,并询问我 C 盘到底剩多少空间。选择这个模型只是因为它是百炼免费额度目前最先到期的,最近一直在用罢了。

GLM-5.1 的回答中,出现了一个非常关键的要点:显示不等于能被统计。如果没有管理员权限,就没办法统计真实的磁盘占用。此外,它还推荐我去用 TreeSize 去统计。

于是我用 Scoop 装了一个(Scoop 真是伟大的发明),给了管理员权限,然后开始统计。我本来以为会像属性那个加载速度一样慢,没想到几秒钟就完成了,果然还得是专业的软件。事实证明,C:\ProgramData\Microsoft\Windows\CapabilityAccessManager 这个目录下,有什么东西占用了 60.1 GB 的空间。

GLM-5.1 说这是一个已知的 bug,但我肯定不能直接信。于是我开始在网上找这个到底是什么东西,然后找到了一篇发布在 MS Learn 上的问题,确认了它确实是 bug:CapabilityAccessManager is devouring my hard drive

因为一点小疏忽,不知道这个页面结构是「问题 - 问题评论 - 解答方案」,我就看了问题评论里面的那个回复,没看别的。当然一样有效,但是中间遇到了一些麻烦。如果有兴趣看我到底遇到了什么麻烦,可以展开看。

完整解决过程

于是我试图进入那个文件夹,但是打开时说单击继续获得永久访问权,单击完跟我说不行,要我去「安全」选项卡里面改。选项卡里面选「高级」,说「无法显示当前所有者」,我就在里面搜索我的用户名,把所有者改成我,给了我自己「完全控制」权限。现在能进去了,发现果然是一个 db-wal 文件特别大,占用了 59.9 GB。

然后打开 services.msc,然后找 camsvc,发现没有。Capability Access Manager 也没有。想了一下可能是翻译的问题,于是又去看中文的服务,发现有一个「功能访问管理器服务」,属性里面确实叫 camsvc。然后把它停止了。

之后删除,为了避免再遇到奇怪的权限问题直接用了管理员 cmd,DEL /F CapabilityAccessManager.db-wal,就这么删掉了。

接下来应该重启那个服务了,然后发现了大问题。

1
2
3
Windows 无法启动 功能访问管理器服务 服务(位于 本地计算机 上)。

错误 1067: 进程意外终止。

本来以为可能重启一下就好了,然后发现重启一下也还是这个错误,但是空间是确实腾出来了。边截图边在想是不是不开这个服务也没什么关系,截完图准备传给手机上,发现电脑连不上网了,坏大事了。

想来唯一能出错的就是那个权限问题,但是原来的所有者就无法显示……最后瞎猫碰死耗子,给 SYSTEM 也加了「完全控制」权限,然后这个服务就能启动了,网也能连了。

虽然是连上网了,但是这个时候读完回答,发现这个文件还会膨胀回来?于是回去一看,又 70+ MB 了。参考回答中的一些做法把位置服务关掉,发现它不膨胀了,于是重新执行了一遍删除,重启以后就完全没有问题了。

总而言之,我的解决方案差不多就是这样的:

  1. 打开目录:C:\ProgramData\Microsoft\Windows。选中文件夹 CapabilityAccessManagerAlt+Enter 查看属性,切换到「安全」选项卡,选择「高级」。
  2. 更改所有者,输入你自己的用户名,检查名称,确定。这里好像会有弹窗说要不要给你自己「完全控制」权限,如果有就确定。
  3. 现在所有者是你了,在窗口左下角点添加,选择主体,还是输你用户名,检查名称,确定;完全控制,确定。然后再来一遍,选择主体输「SYSTEM」,完全控制,确定。
  4. Win+R,输入「services.msc」,确定。找「功能访问管理器服务」,停止。
  5. 启动管理员权限的 cmd。不会的话,开始菜单搜索「cmd」,然后点「以管理员身份运行」。
  6. DEL /F C:\ProgramData\Microsoft\Windows\CapabilityAccessManager\CapabilityAccessManager.db-wal,回车。
  7. Win+I 打开设置,导航「隐私和安全性 → 位置」,关闭「定位服务」和「在应用请求位置时发出通知」。相信我,虽然手机上经常要用定位,但电脑上大概率用不上定位的,用的基本上也都是收集个人信息。我的位置信息访问记录中都是一些无关紧要的东西,都想不出来要我位置信息干什么的那种软件。关了应该不会造成很大的问题。
  8. 回到 services.msc 窗口,再启动这个服务。重启电脑。

然后这个问题就应该被解决了。如果你也用 TreeSize 或者 WizTree 这样的软件,发现自己被 camsvc 吃了很大一块存储,可以照此解决。

现在我 C 盘有了 73.4 GB 空间。我就说哪个盘红了都不能是 C 盘红。

其他

在上面的那个问题页面,回答里面有这样一个链接:Out of Control Capability Access Manager.db-Wal File Size,比较详细地分析了问题的现象、原理及修复进展。有兴趣可以阅读。简单来说,这是一个大概率与 Windows 11 25H2 及以后更新有关的 bug,大概会在 7 月 14 日或者 8 月 11 日修复。

回答里面还有另外一个用户的清理心得。照他的方式清理了一下 WinSxS(与 GLM-5.1 交叉确认),大概又多了 5 GB 空间。

在搜索词相同时,Kagi 能够找到这篇问题,排名第一(以及上面那个分析文章排名第二),但是必应找不到。必应只能给出一些非常简中网络的链接,比如知乎、CSDN、博客园,还有另外一些没有任何有效解答方案的 MS Learn 链接。虽然在这些链接里面也有引用真正有效的这篇回答,但无疑增加了我分拣信息的压力。我给 Kagi 付费已经有几个月了,非常满意。嗯对,给搜索引擎付费。

清理 db-wal 文件加快了我开机时的联网速度。之前在开机后很长一段时间,任务栏都不会出现有关联网的选项。

另外,我很好奇 GLM-5.1 怎么知道这个是 bug 的。大概率是幻觉歪打正着,毕竟我没给联网权限,05 月 13 日才刚确认,而模型是 04 月 08 日正式发布的。