作为一个常年跟C盘爆红搏斗的开发者,我太清楚那种看着容量条变成红色、编译到一半磁盘写满、IDE直接卡死的感受了。打开“此电脑”一看,C盘用了200GB,D盘还剩400GB——这种情况在程序员电脑上简直不要太常见。问题从来不是电脑硬盘不够大,而是我们毫无防备地把开发环境的家底全堆在了系统盘里。
这篇内容就是一份可以直接照做的C盘清理与存储空间管理方案。我会从开发者的实际场景出发,覆盖大文件定位、开发缓存清理、系统级安全回收、不可触碰的目录红线,以及分区规划和自动化维护这条长远路线。不管是普通办公用户,还是被node_modules、Docker镜像、虚拟机磁盘折磨的开发者,都能在这里找到适合自己的落地操作。
1. 先搞清楚C盘到底被谁塞满了:定位大文件的三个视角
很多人的第一反应是装个“清理大师”一顿狂点,我心里其实很抵触这种盲人摸象的做法。你连什么东西占了你多少空间都不知道,靠软件瞎猜,要么漏删了真正的大头,要么误删了不该动的东西。定位大文件这件事,只需要从三个视角去看,五分钟之内就能把C盘的“消费明细”摸清楚。
1.1 用Windows自带“存储设置”看官方分类
Win10和Win11的“设置 → 系统 → 存储”已经能给出一个非常清晰的全景图。它会按“系统和保留空间”“应用和功能”“临时文件”“文档”“桌面”这些维度列出空间消耗。这个视角的优势在于快,劣势在于颗粒度太粗——它只会告诉你“应用和功能”占了80GB,但具体是哪几个应用,还得一个个点进去看。
更实用的是“临时文件”这个入口。Windows会把升级补丁残留、旧版Windows安装文件、传递优化缓存、缩略图、回收站、临时文件全部列在这里,上面标了详情,勾选就能删除。我见过不少人的C盘里光是Windows更新缓存就有十几个GB,这块如果一直不清,再怎么删软件都白搭。
但存储设置有个缺陷:它对开发者的多级目录结构几乎不提供信息。C:\Users\你的用户名\AppData\Local\Docker下面的虚拟磁盘文件占了50GB,存储设置只会把它算进某个模糊的分类。所以还需要下一个视角。
1.2 用磁盘分析工具给C盘做“体检扫描”
这一步我会推荐专门的磁盘空间分析工具,而不是拿资源管理器一个一个文件夹右键看属性。这类工具的原理是遍历NTFS文件系统的目录树,再按目录或文件类型做可视化汇总,几秒钟就能告诉你哪个目录最大,哪个文件最占地方。
- WizTree:速度是目前最快的,利用MFT主文件表直接读取,扫一个1TB的盘只要十几秒,界面按文件大小做树状图,一眼就能看到最大的那几个文件。
- TreeSize Free:老牌工具,扫描速度不如WizTree但胜在稳定,公司电脑上我也常用它,右键还能直接跳到对应目录。
- SpaceSniffer:用方块级联的方式展示目录大小,交互感强,适合喜欢“玩”界面的人。
打开工具扫一遍C盘之后,作为程序员你会看到很熟悉的场景:C:\Users\xx\AppData\Local\Temp几十GB、C:\Users\xx\AppData\Local\npm-cache十几个GB、C:\Users\xx\AppData\Local\Docker几十GB、C:\Users\xx\.gradle\caches几十GB。普通人可能桌面装满电影都未必能塞出这么多,但对开发者来说,这些全是日常操作攒下来的。
1.3 用PowerShell按目录统计:不装第三方工具的办法
如果你在别人的电脑上不方便装软件,或者公司电脑禁止安装第三方工具,PowerShell一行命令也能统计目录大小。这里有个逻辑要说清楚:Get-ChildItem拿到子目录,Measure-Object把每个子目录的文件长度求和。注意要加-Force参数把隐藏目录也带进来,不然统计结果会少一大截。
powershell复制Get-ChildItem C:\ -Directory -Force -ErrorAction SilentlyContinue | ForEach-Object {
$size = (Get-ChildItem $_.FullName -Recurse -File -Force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum
[PSCustomObject]@{ 目录 = $_.FullName; 大小GB = [math]::Round($size / 1GB, 2) }
} | Sort-Object 大小GB -Descending
这条命令会扫描C盘根目录下所有子目录的大小,按从大到小排序。ErrorAction SilentlyContinue很重要,因为系统目录里有大量无权访问的文件,不加这个参数会刷出一屏红色报错。扫描过程可能比较慢,它的意义在于让你在“无工具”条件下也能完成同样的定位工作。
把这三个视角结合来看,C盘的真实占用情况就已经很清晰了。接下来要做的,是区分哪些东西能删、哪些东西值得删、哪些东西碰都不能碰。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 开发者专属的重灾区:依赖缓存、容器镜像与构建产物
普通用户的C盘清理攻略,删删临时文件、清空回收站就完事了。但程序员根本不一样,最占空间的地方往往藏在开发工具的工作目录里。这一节的价值就在于此——把缓存和构建产物连根拔起,但又不至于删完后悔。
2.1 包管理器的缓存目录:删之前先算一笔时间账
每一种包管理器都会本地缓存下载过的依赖,这是设计上为了加速重复构建。但缓存的设计思路是“常用依赖常驻本地”,不是“永远不清理”。我的原则很简单:缓存可以清理,但有条件地清理。
不同生态的清理命令:
| 包管理器 | 缓存位置 | 清理命令 | 备注 |
|---|---|---|---|
| npm | AppData\Local\npm-cache |
npm cache clean --force |
全局命令,清空全部缓存 |
| pnpm | AppData\Local\pnpm-cache |
pnpm store prune |
只删除未被项目引用的缓存,比较温和 |
| yarn | AppData\Local\Yarn\Cache |
yarn cache clean |
清空全部缓存 |
| pip | AppData\Local\pip\cache |
pip cache purge |
清空wheel缓存 |
| Maven | C:\Users\xx\.m2\repository |
无内置清理命令 | 手动删一个个.lastUpdated结尾的下载失败临时文件 |
| Gradle | C:\Users\xx\.gradle\caches |
无完全自动命令 | 删掉caches下的旧版本目录 |
这里必须要给一句实际经验:别在项目上线前夜心血来潮把npm缓存清空。npm cache clean --force会把所有历史包的缓存全部抹掉,下次任何项目安装依赖都要重新下载。Maven和Gradle也一样,本地仓库删得太狠,下次构建全量拉依赖,在内网或源不稳定的环境里,等构建的时间够你泡两杯咖啡。
所以我的习惯是:日常只清理“确定没用了”的缓存。比如pnpm的store prune就是思考设计的产物,它按引用关系判断,只清理没有被任何项目引用的包。npm就麻烦一些,cache clean一把梭之后,唯一能安慰自己的就是“反正网速快”。
2.2 Docker是一头真正的空间怪兽
如果让我说一个开发者C盘里“最意想不到的空间杀手”,Docker Desktop当之无愧。很多人以为Docker只是C盘的“一个小软件”,但实际用久了才知道,它的虚拟磁盘文件会像气球一样越吹越大。你拉取的镜像、构建的镜像层、容器产生的数据卷、构建缓存,全都写在这块虚拟磁盘里。即使在Docker里做完docker rmi删除镜像,这块磁盘文件也不一定会自动收缩。逻辑上这跟普通文件不一样——虚拟磁盘文件内部有空间,但内部空间的释放不代表外部文件体积缩小,C盘看到的还是那个巨大的ext4.vhdx。
Docker里最有效的清理是系统级裁剪,把没用到的镜像、容器、数据卷、构建缓存全部清一遍:
bash复制docker system df
docker system prune -a --volumes
docker system df先看一眼当前Docker内部占了多少空间,再决定要不要执行prune。-a会把所有未被容器使用的镜像也清掉,--volumes连数据卷一起清理。这个命令的杀伤力很大,如果你的容器里有需要保留的数据卷,执行之前最好先确认一下。
真正棘手的是虚拟磁盘文件本身的膨胀问题。就算你在Docker内部释放了几十GB,外部ext4.vhdx文件可能依然保持原体积。这就要动用到WSL2虚拟磁盘压缩了,粗线条的做法是先执行清理,再关掉Docker Desktop,然后执行diskpart或者直接对C:\Users\xx\AppData\Local\Docker\wsl下的vhdx文件做一次压缩操作。这个步骤比较折腾,但对被Docker塞爆C盘的人是必须的。
顺带一提,docker build如果长期不清理,构建缓存会是清理之后还会重新长回来的最大一块。要控制的话,可以在Docker Desktop的Settings → Resources里限制虚拟磁盘的容量上限,让Docker内部空间不会无限扩张。
2.3 项目构建产物与本地环境冗余
最后一个开发者专属大头是项目源码目录里的构建产物。node_modules动不动几百MB、一个前端项目装上依赖动辄1GB起步,Maven项目的target目录、.NET项目的bin和obj、Python的venv虚拟环境,这些在旧项目里全堆着就是一笔很大的开销。
处理思路不是让你把所有项目的node_modules全删了——而是先识别哪些项目你还会碰。好几年没打开过的老项目,直接整个目录搬到移动硬盘上,或者干脆删掉,反正代码在Git仓库里,需要的时候再拉下来重新装依赖即可。这个思路执行起来非常简单,但绝大多数人都没真的动手整理过,宁可让旧项目在C盘里躺一辈子。
清理本地环境冗余时,还有一个容易被忽略的点:重复安装的工具链。系统里有JDK 8、JDK 11、JDK 17、JDK 21好几个版本,每个都有几个GB;Python装了Anaconda又装了Python官方版;Node还有nvm-windows管理多套版本。这些其实都是合理的,但如果你自己都记不清哪个版本还在用,那就值得花点时间把不用的卸掉。特别是Anaconda这种“安装就占几个GB”的大家伙,如果平时只用pandas、numpy这种轻量包,换成miniconda或者直接用venv就能省下半个C盘。
3. 系统层级的空间回收:从内置工具到命令行“武器库”
开发者在清理完自己的工具链之后,还需要对付Windows系统本身产生的垃圾。系统运行、更新、休眠、虚拟内存这些机制,会自然而然地占用大量C盘空间。这部分的清理路径和开发者缓存不同,它更依赖Windows提供的系统和命令行工具,跑一遍能回收的空间往往是最大的。
3.1 cleanmgr的隐藏参数:这才是磁盘清理的正确打开方式
Windows自带的磁盘清理(Disk Cleanup)是很多人点开过但没深究的工具。常规路径是“右键C盘 → 属性 → 磁盘清理”,但这只加载了最基本的一批清理项。真正厉害的是左下角那个“清理系统文件”按钮——点一下,它才会把Windows更新清理、旧版Windows安装文件、休眠文件清理、传递优化缓存、DirectX着色器缓存这些“重量级选手”加进列表里。很多人从一开始就没点过这个按钮,自然觉得磁盘清理没什么用。
还有一套更灵活的调用方式:cleanmgr命令行参数。
bash复制cleanmgr /d C:
cleanmgr /sageset:100
cleanmgr /sagerun:100
sageset:100会弹出一个图形配置界面,里面的清理项比默认打开的多得多。你可以把“Windows升级日志文件”“临时文件”“缩略图”“旧版Windows安装文件”全勾上,然后点确定。之后执行sagerun:100就可以按设定好的配置直接清理。这里的神奇之处在于,/sageset搭配不同的数字标识(如100),可以保存多套清理预设。如果你日常有“快速清”“深度清”两种使用习惯,可以分别设置成100和200,想用哪套就运行哪个。
3.2 DISM组件清理与存储感知的配合
WinSxS(Windows组件存储)是系统里出了名的“大家伙”,看空间占用会让你很惊讶,但这里有个常见误解:WinSxS目录里的硬链接机制导致实际占用不等于看上去占用,很多文件只是被其他目录“链接”过去,物理上并没有占那么多。所以不要手动去删WinSxS里的文件,容易把系统弄崩。正确的清理方式是用DISM组件清理命令:
powershell复制Dism.exe /Online /Cleanup-Image /StartComponentCleanup
这个命令会把Windows更新后留下的旧组件版本彻底清掉,属于无损操作。如果还想更激进一点,可以加/ResetBase参数,它会把所有现有组件的版本标记为不可卸载,进一步压缩WinSxS体积。但加了这个参数后,之前的安全补丁就无法单独卸载,这个后果要想清楚再执行。在存储空间非常紧张的情况下我会用,平时保持/StartComponentCleanup就够了。
存储感知(Storage Sense)是Win10/11内置的自动清理机制。在“设置 → 系统 → 存储 → 存储感知”里开启后,可以设定“临时文件超过N天删除”“回收站文件保留N天删除”。我建议把临时文件期限设为14天,回收站设为7天,这样系统会自动执行基础清理,不用每次手动跑。Windows更新清理不属于存储感知的自动范畴,需要定期手动磁盘清理或DISM配合。存储感知的意义在于把“垃圾堆积的日常”自动化,让C盘不会突然就满了。
3.3 休眠文件与虚拟内存:取舍的学问
hiberfil.sys是休眠功能生成的系统文件,它的大小约等于物理内存的40%~100%,在Windows默认的“快速启动”机制下,关机时系统会把内核会话写进这个文件里,以便下次开机能快速恢复。如果你用的是16GB内存的机器,hiberfil.sys就有好几GB甚至十几GB;32GB内存的机器,这个文件就更加可观。要是你平时根本不用“休眠”功能,可以直接关掉休眠来释放这块空间:
powershell复制powercfg /h off
这条命令执行后,hiberfil.sys会直接消失。注意它同时也会关闭“快速启动”,导致系统开机启动速度变慢几秒。我实测下来的体感是:传统机械硬盘上差异明显,NVMe固态硬盘上几乎感知不到。如果你的电脑本来就是全固态,关掉休眠释放十几GB,这个性价比非常高。如果你还会用到“休眠”模式(和睡眠不同,休眠会完全断电保存内存),那就不要关,至少把占比调低:
powershell复制powercfg /h /type reduced
reduced模式会让休眠文件压缩到更小体积,代价是休眠唤醒后的恢复数据量变小、恢复速度变慢。
另一个大头是pagefile.sys,也就是虚拟内存页面文件。Windows默认把它放在C盘,大小为“系统管理的大小”,实际会随着内存压力动态伸缩,一般跟物理内存一样大甚至更大。如果物理内存在16GB以上、平时也不跑极端吃内存的软件,可以把它改成固定值,或者移到D盘。修改路径在“系统属性 → 高级 → 性能设置 → 高级 → 虚拟内存”里。选择C盘“自定义大小”,初始和最大值都设成4096MB(或者物理内存的50%),多少能省出十几个GB。但若你经常跑大型编译、虚拟机、内存数据库这类吃内存的应用,不建议把页面文件设太小,系统在内存压满时的稳定性就靠它兜底。
3.4 高频CMD清理命令汇总,直接抄作业
清理系统层面时,有几个命令和目录是高频目标,这里统一整理一下:
| 命令/操作 | 作用 | 风险等级 |
|---|---|---|
%TEMP%、C:\Windows\Temp手动清空 |
清理用户临时文件和系统临时文件 | 低,但正在被占用的文件会删除失败 |
cleanmgr /sageset:100配合sagerun:100 |
按预设配置清理系统缓存 | 低 |
Dism.exe /Online /Cleanup-Image /StartComponentCleanup |
压缩组件存储WinSxS | 低,耗时较长 |
powercfg /h off |
删除休眠文件 | 中,影响快速启动 |
vssadmin list shadowstorage、删除系统还原点 |
释放系统保护占用的磁盘空间 | 中,会失去还原回滚点 |
del /f /s /q %TEMP%\* |
强制删除临时目录文件 | 中,不推荐,可能误删运行中软件的临时数据 |
很多人会在网上抄到“一键清理垃圾”的bat脚本,里面用del /s /q把C:\Windows\Temp和用户Temp全删了。这里我要提醒一个坑:直接用del删临时目录可能因为文件被占用而报一堆错,还可能把正在更新中的软件搞出问题。系统自带磁盘清理之所以“慢”,是因为它走的是Windows服务层、能够跳过被占用文件并正确处理权限。第三方脚本的目的不是比官方工具更强,而是图省事和可自动化。我自己写脚本时会尽量只清理“确定能删”的部分,比如回收站、特定缓存目录里超过30天的文件,核心前提是别影响正在运行的软件。
4. 那些“一删就出大事”的目录:给心急的人划红线
C盘清理最大的风险,不是清不干净,而是删错东西。有些目录看着占空间,但系统启动、软件运行、用户数据全都靠它;有些目录即使你已经不用的软件残留在里面,直接硬删也可能把注册表和服务项弄乱。这一节是全网大多数C盘清理教程里讲得最少、但对系统健康最关键的。
4.1 Windows.old和WinSxS:看着想删,实际要“修行”
Windows.old是在你升级或重装Windows时,系统把旧系统文件备份下来的目录,体积动辄20GB~40GB。因为它只影响“回滚到旧版系统”这个操作,所以对绝大多数人来说确实可以删。但正确的删除方式不是“右键删除”,而是通过磁盘清理工具勾选“旧版Windows安装文件”来删除。原因是Windows对系统目录有完整的安全描述符和权限设置,用资源管理器直接删会碰到大量“拒绝访问”,最终删一半留一半,反而更乱。
WinSxS则是另一个被误读的典型。它的物理体积巨大,但里面存在大量硬链接——同一个系统文件在WinSxS里有一份实体,同时被多个系统目录引用。你在资源管理器里看到的大小是“逻辑大小”,实际占用的“物理大小”远低于此。手动去删WinSxS下的文件或目录,破坏的是Windows组件服务的基础,轻则系统更新失败,重则开机蓝屏。这块空间不能手动碰,只能靠第3节说的DISM组件清理安全回收。
4.2 AppData不是“可以随便清的缓存文件夹”
AppData下面有Local、LocalLow、Roaming三个子目录,很多清理软件喜欢把它们标成“可以清理的缓存”。但实际开发中,这里面混杂着两类数据:
- 程序安装时的用户配置:比如
AppData\Roaming\Code是VS Code的配置、扩展、快捷键等,删了之后你的IDE会被打回原形。 - 应用程序的本地缓存和数据:比如
AppData\Local\Google\Chrome\User Data是浏览器配置和网站数据,AppData\Local\Microsoft\Outlook是邮件数据。
如果把AppData整个当成垃圾清理,结果就是开发环境、浏览器登录态、邮箱配置全部丢失。更隐蔽的是很多软件在AppData\Local里存着唯一的本地数据库文件,删了之后连“恢复出厂设置”都不如——直接数据损坏。所以对AppData,正确姿势是“只清理特定子目录”,比如AppData\Local\Temp这种纯临时目录可以删,其他一律按“软件数据目录”对待,宁可少清一点也不敢打包全删。
4.3 系统保护机制相关的文件:还原点和硬链接
“系统保护”是Windows自动创建还原点、保存旧状态文件的机制,这部分空间由系统卷影复制服务管理。磁盘清理里有一个“系统还原和卷影复制”的清理项,会把所有历史还原点删掉,只保留最新一个。我的看法是:这台C盘如果已经快满了,你要做的是尽快释放空间,而不是纠结还原点。但如果你接下来准备给系统装大补丁或大规模更新,删还原点前要掂量一下——万一大补丁出问题,你没有后悔药。稳妥做法是“先看看还能不能创建新的还原点”,创建完再清理旧的。
这一节的核心逻辑就是一条:动系统文件前,先分清“无害遗留”和“系统运行依赖”。Windows.old、WinSxS、AppData、系统还原点这四类,只有最理解它们用途的人才建议手工清理,其他情况优先选择Windows官方工具。
5. 从根上杜绝C盘爆红:分区规划、路径迁移和自动化脚本
清理只是应急手段,真正要解决问题,得从空间规划、默认路径、自动化维护这三个层面一起动手。如果只清不防,三个月后C盘照样变红。这个章节讲的就是“如何让C盘永远不红”的系统性思路。
5.1 从分区第一天就避开“C盘100GB”的尴尬
很多人的电脑出厂时,C盘就只给了一个很小的分区,软件、缓存、系统更新都往里塞,没过多久就满了。其实不管是刚拿到新电脑还是准备重装系统,分区阶段就该有一个合理规划。我的个人建议是:
- 单块NVMe固态硬盘:C盘至少分150GB~200GB,如果你经常做开发或大型软件多,直接200GB起。剩余空间全部分给D盘(数据盘)。不要搞出E、F好几个分区,对普通用户来说分成“系统盘+数据盘”两块已经足够清晰。
- 双硬盘场景:系统盘放在最快的SSD上(C盘120~150GB足够),软件和数据装在第二块盘(D盘)。这是最舒服的组合方案,重装系统完全不影响数据。
- 不分区方案:容量不超过500GB的笔记本,我建议干脆不分区,整块硬盘都当C盘用。反正系统默认路径顶着上限用,不会有“C盘满了但D盘空着”这种荒唐局面。对普通用户来说,用文件夹去分类,比分区更灵活。
分区方案定了之后,还要做一件事:把用户目录里的“下载”“文档”“桌面”“图片”这几个库文件夹转移到D盘。方法很简单:C:\Users\你的用户名\Download上右键 → 属性 → 位置 → 移动,选到D盘对应目录。这一步能避免大量大文件(安装包、资料、图片)堆积在C盘用户目录里,同时桌面文件也不会再拖垮C盘。
5.2 程序默认路径才是C盘膨胀的温床
安装软件时,默认的C:\Program Files是很多人的习惯选择。如果把软件装在C盘之外,就需要在安装时手动改路径——这个操作本身很简单,难的是养成习惯。开发工具尤其是:JetBrains全家桶、VS Studio、Docker Desktop、Android Studio这些动辄几个GB的IDE,安装时一定改到D盘。Steam游戏库也要从设置里添加第二个文件夹。
还有一类容易被忽略的路径选择是项目代码目录。很多人习惯把所有仓库放在C:\Users\xx\source\repos或默认工作目录里,项目多起来,光代码目录就几十GB。我习惯在D盘建一个D:\Projects,所有代码仓库放这里,好处是清理或重装系统时不会影响到代码备份,也从根本上绕开了用户目录的路径长度问题。别小看这一条,多少前端项目在Windows上因为文件路径过长编译失败,源头就是路径里套了好几层用户目录和node_modules。
5.3 自动化维护:给自己写一个“温和版”清理脚本
手工清理永远斗不过“日积月累”,所以自动化是关键。我自己日常用的是一个PowerShell脚本,逻辑很简单:清除用户Temp目录里超过7天的文件、清理回收站、清理Windows临时目录、按时间删除下载目录里超过30天的安装包。脚本刻意保持温和,不碰系统目录、不删AppData里的配置、不强制del。
powershell复制# C盘温和清理脚本,建议以管理员身份运行
$cutoffDays = 7
$cutoffDate = (Get-Date).AddDays(-$cutoffDays)
# 1. 清理用户临时目录超过7天的文件
$tempPaths = @(
"$env:TEMP",
"C:\Windows\Temp"
)
foreach ($path in $tempPaths) {
if (Test-Path $path) {
Get-ChildItem $path -Recurse -Force -ErrorAction SilentlyContinue |
Where-Object { $_.LastWriteTime -lt $cutoffDate } |
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue
}
}
# 2. 清空回收站
Clear-RecycleBin -DriveLetter C -Force -ErrorAction SilentlyContinue
# 3. 删除下载目录超过30天的文件
$downloadCutoff = (Get-Date).AddDays(-30)
$downloadPath = (Get-Item "$env:USERPROFILE\Downloads").FullName
Get-ChildItem $downloadPath -File -Force -ErrorAction SilentlyContinue |
Where-Object { $_.LastWriteTime -lt $downloadCutoff -and $_.Extension -match '\.(zip|exe|msi|iso|7z|rar)$' } |
Remove-Item -Force -ErrorAction SilentlyContinue
Write-Host "清理完成。"
把脚本保存成clean-c.ps1,然后用“任务计划程序”创建基本任务,触发器设为“每周”或“每月”执行,操作选择“启动程序”,程序填powershell.exe,参数填-ExecutionPolicy Bypass -File C:\你的脚本路径\clean-c.ps1。这样每周自动清理一次,C盘就能维持在一个健康区间。用户Temp里被占用而删不掉的,是因为软件正在运行,跳过即可;下载目录只删安装包扩展名,避免把资料文档误删;回收站直接清空属于比较有把握的操作。
5.4 终极方案:给C盘扩容的正确姿势
如果C盘已经小到怎么清都救不回来,扩容是最直接的方式。市面上最常见的是DiskGenius这类分区工具,操作逻辑大体如下:
- 先备份数据,这一步不能省。扩容操作虽然工具会做保护,但断电、系统蓝屏这类意外没办法完全排掉。
- 如果D盘有大量数据,先腾出足够的可用空间,比如把D盘数据转移到移动硬盘。
- 打开DiskGenius,右键D盘选择“调整分区大小”,把D盘缩小一点、腾出未分配空间。
- 右键C盘选择“调整分区大小”,把未分配空间并入C盘。
- 执行操作并等待完成,过程会重启到WinPE环境操作。
这里有几个重要提醒:
- BitLocker要提前关闭。如果C盘或D盘启用了BitLocker加密,请先解密或挂起保护,否则分区调整可能导致无法解锁磁盘。
- 操作过程中不要强制断电。扩容原理实际是移动分区边界和文件簇,中途断电轻则分区表损坏,重则数据丢失。
- 厂商自带的一键恢复分区不要动。笔记本出厂恢复分区一旦删了,系统的“重置此电脑”功能就彻底废了。扩容时不要把OEM恢复分区并到C盘里。
如果你的系统盘是NVMe固态且M.2接口还有空余槽位,另一个方案是直接加一块新固态做数据盘,然后把所有“重数据”(游戏库、虚拟磁盘、Docker默认数据)迁移到新盘上。这个做法的投入产出比最高,C盘甚至都不用扩容,因为它终于没那么多东西可装了。
写在最后:清理能力远不如“不塞满”的能力重要
和C盘搏斗这么多年,我的体会是:真正的空间管理高手,不是在C盘满了之后疯狂清理,而是从一开始就知道什么东西该放C盘,什么东西不该放。系统、开发工具、日常软件放C盘;代码仓库、缓存数据、下载文件、虚拟镜像一律放D盘;再配合定期自动清理脚本,C盘基本能常年维持在一半以内。
最后分享一个小习惯:我每个月最后一周会打开系统存储设置看一眼“临时文件”那一项,顺手清一次,再跑一遍DISM组件清理。这套动作加起来不到十分钟,但比任何“一键清理软件”都靠谱得多。很多人的困境其实源于从来没有在系统健康的时候做过预防,一直在“爆满—清理—又爆满”的循环里打转。希望这篇内容能帮你跳出这个循环。
