我与电脑C盘的战争
如题。
事情要从前几天的一些烦心事说起。我的办公电脑——那台服役不知道多少年的、从我研一就流转到我手里的二手台式机,C盘满了。
一、背景
Windows系统在面对内存占用爆满的情况有一套成熟的自动化应对机制(例如创建分页文件,或者强制终止部分进程释放内存)。
但是,Windows分页文件占用的是硬盘(特别是C盘)的空间,而对于一些数年前的、配置较低的电脑,C盘空间并不是很大,很容易就会占满
——于是那天的一天时间内,我已经连续5次碰到了C盘可用空间0MB的惨状。
Windows系统是否存在和内存爆满一样的自动化应对机制,来应对C盘空间不足的问题?这个问题我去问了AI,答案是不能。因此我得手动清理C盘存储空间,直到存储空间够用为止。
二、关于C盘清理,我之前做过的所有尝试
(一)清理回收站、Download目录等用户目录
这是AI给我的第一条建议。事实上,这些地方我清理不了一点。
关于回收站和Download目录,我一直有随手清理的习惯,因此这几个文件夹几乎没有占用太多空间。我还想补充的是,我的Pictures目录、Videos目录也几乎没有占用太多空间——照片和视频我存储在其他位置。而Document目录我无能为力,因为据我所知很多软件都默认把用户数据存储在这里。
所以只得尝试其他方法。
(二)卸载不用的软件,或者把软件重装到其他磁盘
这恐怕是许多人第一时间想到的对策。我也一样。因此在之前许多次C盘占满以后,我已经多次做了这样的事情——去Windows控制面板里翻看系统上已安装的软件,并把一些占用空间太大、短时间内用不到的软件全部删去。正因为如此,我已经前前后后清理过matlab、openSCAD、VMWare等等一系列的软件了。至于“把软件重装到其他磁盘”,我一直有着安装软件时默认安装到D盘的好习惯,因此这一部分能够清理的也不是很多。
(三)调整分页文件的分配比例&关闭休眠文件和存储感知
这一点是AI给我的建议之一。不过我其实在很久以前也考虑过这一点了——我自掏腰包安装了一块固态硬盘(H盘),并把大部分分页文件(最多64GB)移动到了那里。
现在查看分页文件的情况,只能得到下表这样的占比。C盘剩下的这400-800MB存储空间是Windows运行所必要的,无法关闭,所以基本上这一块没有可清理的东西了:
每个驱动器的分页文件大小
| 驱动器卷标 | 分页文件大小(MB) |
|---|---|
| C: | 400-800 |
| D:[软件] | 无 |
| E:[文档] | 无 |
| F:[娱乐] | 无 |
| H:[新加卷] | 8000-65000 |
AI还提到,Windows 默认会在 C 盘保留一个和内存一样大的文件 (hiberfil.sys) 用于快速开机(休眠)。对于空间吃紧的旧电脑,这个奢侈功能可以关掉。具体做法是以系统管理员身份启动命令行(按win+x,之后选择“命令提示符(管理员)”),之后运行下面的指令:
1 | powercfg -h off |
实际测试后发现没有效果——也许在许多年前我就已经因为磁盘空间紧张而早早关闭过这个功能了。
存储感知是另一个磁盘空间占用的大头。其设置路径在 设置 > 系统 > 存储 > 存储感知 。经过检查,这个功能我也早早关掉了。
(四)Windows 更新缓存、系统搜索日志、临时文件等项目的清理
这些在AI给出的磁盘清理建议中属于高阶操作。好在我安装有360安全卫士,在360当中提供了开箱即用的“垃圾清理”的组件,使用这个组件就可以清理这几项内容。
实际清理下来,我的C盘多了大约2GB空间——还行,至少C盘能够存东西了。但这并非长久之计,因为Windows更新缓存和日志这些东西会随着使用而不断累积,不出1个月,它们又会把我的C盘剩余空间吃完。
(五) conda/pip/apt等包管理器缓存清理
这一部分的教程在网上有很多,因此不再赘述。下面列举一些常用指令:
- conda清理缓存:
conda clean --all - pip缓存清理:
pip cache purge - apt缓存清理:
sudo apt clean && sudo apt autoclean - macOS homebrew缓存清理:
brew cleanup
不过这些方法对我没什么用——上一次运行指令清理缓存就是在几天前,而这次C盘爆满时我能清理的缓存几乎为0 。
(六)清理 %HOMEPATH%/AppData 目录
也就是 C:\Users\<用户名>\AppData 。
这个目录大概长下面这个样子,它是大部分软件存储用户配置的地方。也就是说,一个软件,不管我们在安装的时候选择的“安装路径”是哪里(那个只决定软件本体的存放位置),在软件运行过程中产生的大部分数据、以及我们作为用户的所有配置,基本上都在C盘的这个目录下面。这个目录一般还贼大(你看这下面存储了多少软件的数据啊!)

清理这个目录,是一件极其复杂繁琐且费力不讨好的事情!!!因为,我们不知道每个具体的软件其目录结构长什么样子;就算通过手动排查弄清楚了,也不知道每个具体的文件是有用的文件,还是需要清理的垃圾。逐个排查起来,需要很长时间,且不一定能够清理出多大的磁盘空间,实在是费力不讨好。
还有一种方法是迁移这里的用户数据去其他磁盘,然后在原地建立软链接 (软链接是个Linux中的概念,但是Windows系统同样支持软链接)。Windows上建立软链接的方法是 mklink 指令(需要以管理员身份启动命令行才能运行),具体来说方法如下:(假设我想要迁移的文件夹是 C:\Users\ab124\AppData\Roaming\Code ,这个是vscode的用户数据目录,迁移的目标位置是 H:\ab124\AppData\Roaming\Code )
- step1: 关闭正在运行的vscode主程序(否则强行迁移会造成文件损坏)。
- step2: 复制 文件夹
C:\Users\ab124\AppData\Roaming\Code到H:\ab124\AppData\Roaming\下面。此时vscode的用户数据应该在H:\ab124\AppData\Roaming\Code已经有了一份副本。 - step3: 将原先位置的文件夹重新命名为
Code-backup之类的名字(方便改回来就行)。之所以此处仅仅是重命名而不是删除,是以防万一,如果迁移失败还不至于丢数据。 - step4: 以管理员身份启动命令行(按win+x,之后选择“命令提示符(管理员)”),然后输入指令
mklink /D C:\Users\ab124\AppData\Roaming\Code H:\ab124\AppData\Roaming\Code,其中/D参数的意思是建立指向一个目录的软链接(默认创建的软链接是指向文件的) - step5: 启动vscode,检查用户数据是否还在、插件是否运行正常、项目文件是否完好。
- step6: 如果上一步检查没有问题,那么就可以清理C盘下原先的文件夹了——直接删除即可。如果上一步检查出了问题,那么退回step3,删除软链接文件,并将原来的文件夹名字再改回来。
迁移一个软件的用户数据目录,总共需要6步。迁移10个软件就是60步,100个软件就是600步——这谁受得了啊!所以到现在为止,我也就只试着迁移过vscode、Firefox、thunderbird(一个邮件客户端)和微信这几个软件,而其他的软件我实在没有心力搞迁移了。
到此为止,我的C盘依然只清理出来2GB不到的空间。还有其他办法吗?
三、救星:WizTree,一个存储空间可视化软件
这个工具是Gemini推给我的,它说:
既然你不想做复杂迁移,那你必须看见是谁在吃空间。 Windows 自带的查看功能太弱了。请下载一个 WizTree(绿色版,只有几MB,无需安装)。 打开它,扫描 C 盘。它会给你一张可视化矩形图。你大概率会发现一些大块头的文件和文件夹,从而更有针对性的清理。
WizTree可以从 官网 处下载,其提供了开箱即用的portable版本,软件本体大小不到10MB。启动时它会索要管理员权限(这和它的扫描原理有关),使用管理员身份重启后选择C盘并点击“扫描”,它就能很快分析出磁盘的各个文件夹的空间占用情况(真的很快!十秒不到就把我将近80G的C盘扫完了!),并使用矩形图进行可视化,如下图所示。

这个矩形图还可以鼠标悬停查看文件名和文件路径,如下图所示:

说起WizTree扫描速度如此快的原理,好像还和Windows的NTFS文件系统有关——NTFS文件系统是一种日志式的文件系统,Microsoft为了保证文件系统的稳健型和安全性,增加了许多特性,其中就包括MFT(主文件表)——这是一个记录了所有文件位置和空间占用的特殊文件。而WizTree在管理员权限下直接读取了这个文件,从而很快建立了文件树。更详细的解释如下图:

故事的结局是,我用WizTree发现了几个藏得比较深的临时文件,占用空间可大了,平时还用不上。把这些临时文件删除,终于空出来了5GB的空闲空间。
可以暂时喘口气了。