C盘爆红别乱删!用Codex排查AppData占用87GB的完整记录

📅 发布时间:2026/10/11 3:30:10
C盘爆红别乱删!用Codex排查AppData占用87GB的完整记录
1. 从一次C盘告急说起为什么“删文件”是最危险的直觉那天下午我正在赶一个项目的收尾工作IDE突然卡死紧接着系统弹出一条通知C盘剩余空间不足1GB。我切到资源管理器一看C盘那条进度条已经红得发紫剩余空间连一个像样的临时文件都写不进去了。第一反应和大多数人一样——找大文件删。我打开“按大小排序”看到几个几GB的缓存文件夹差点就按下ShiftDelete。但我忍住了。因为过去几年里我见过太多人因为“C盘红了就删”这个直觉把系统搞崩、把开发环境搞废、把多年积累的配置一键清空。C盘爆红这件事真正危险的不是空间不够而是你不知道空间被谁吃掉了。盲目删除的结果往往是删了不该删的真正占空间的元凶还稳稳地躺在那里。这次我换了个思路不猜不删先查。我用了一个叫Codex的工具这里指的是具备代码执行与文件系统分析能力的智能助手类工具不是某个特定商业软件让它帮我做一次彻底的磁盘占用扫描和归因分析。结果出来的时候我愣了一下——AppData目录占了87.81GB。这个数字意味着什么意味着我C盘里超过一半的已用空间都藏在这个平时几乎不会主动打开的系统隐藏目录里。这篇文章就是这次排查的完整记录。我会把“为什么不能乱删”“AppData里到底装了什么”“怎么用工具查出真凶”“哪些能动哪些不能动”“怎么安全清理”这几件事讲透。不管你是开发、设计还是普通办公用户只要你的C盘曾经红过这篇内容都能直接拿去用。2. AppData凭什么能吃掉87GB拆解这个“隐形仓库”的真实构成2.1 AppData不是垃圾堆它是应用程序的“私人储物间”很多人对AppData有误解觉得它是系统缓存、临时文件、可以随便清。这个认知偏差是导致误删和空间失控的根源。AppData的全称是Application Data它是Windows为每个用户账户分配的应用程序数据存储区。你可以把它理解成每个软件在你电脑上的“私人储物间”——软件运行时产生的配置、缓存、日志、插件、模型文件、会话数据全都放在这里。它之所以“隐形”是因为默认情况下资源管理器不显示隐藏文件夹而且它藏在C:\Users\你的用户名\下面路径又长又不起眼。但它的体量可以非常惊人。我这次扫出来的87.81GB分布大致是这样的子目录典型占用主要来源Local50-70GB浏览器缓存、开发工具缓存、AI模型、Electron应用数据Roaming10-20GB编辑器配置、聊天记录、插件数据LocalLow1-5GB低权限应用、部分游戏和多媒体软件注意这只是我这次的情况不同人差异极大。一个重度前端开发者Local里的npm、pnpm、yarn缓存加上各种构建产物轻松几十GB一个经常用AI工具的人模型权重文件动辄几个GB一个一个装了多个Electron应用的人每个应用在AppData里都有一份完整的运行时和缓存。2.2 为什么AppData会失控到87GB这个量级AppData失控不是一夜之间发生的它是多个因素叠加的结果。我复盘了一下主要有四个原因。第一缓存只增不减。绝大多数应用的设计逻辑是“缓存命中就复用没有就新建”但很少有应用会主动做缓存淘汰。浏览器缓存、包管理器缓存、构建工具缓存都是只进不出的貔貅。时间一长几GB变几十GB。第二多版本共存。开发工具尤其明显。Node的多个版本、Python的多个虚拟环境、各种SDK的不同版本每个版本在AppData里都有自己的缓存目录。你以为你只装了一个工具实际上它在AppData里留了好几份历史数据。第三AI与模型文件的膨胀。这两年本地AI工具普及模型文件动辄2-8GB一个。下载几个模型、跑几次微调AppData里就多出几十GB。而且这些文件往往藏在很深的路径里不主动扫根本发现不了。第四日志与崩溃转储。应用崩溃时生成的dump文件、长期运行的日志文件单个可能不大但积累起来很可观。尤其是那些你天天用但从不关注的工具它们的日志目录可能已经悄悄长到几个GB。这里有个关键认知AppData里的东西大部分不是“垃圾”而是“应用正常运行所依赖的数据”。删错了轻则配置丢失重则应用无法启动、项目无法构建。所以清理的前提是“识别”而不是“删除”。3. 用Codex做磁盘归因一次不靠猜的排查过程3.1 为什么选择“让工具去查”而不是手动翻文件夹手动翻AppData是一件极其低效的事。路径深、文件多、隐藏目录层层嵌套资源管理器的排序和统计功能又弱。你翻半小时可能只看了冰山一角。而且人眼对“哪个文件夹大”的判断很不准确容易把注意力放在显眼但实际不大的目录上。我选择用Codex这类具备代码执行能力的工具来做核心原因是它能做三件手动做不到的事递归统计每个子目录的真实大小、按大小排序输出Top N、并且可以针对特定目录做二次下钻。整个过程是“数据驱动”的不依赖直觉。具体操作上我让它执行了一段目录扫描逻辑核心思路是从AppData根目录开始递归计算每个一级子目录的总大小然后对每个一级子目录再递归计算其二级子目录的大小逐层下钻直到定位到具体的“大户”。3.2 扫描脚本的核心逻辑与参数说明如果你也想复现这个排查过程可以用下面这段Python逻辑在具备文件系统访问权限的环境中运行import os def get_dir_size(path): total 0 try: with os.scandir(path) as it: for entry in it: try: if entry.is_file(follow_symlinksFalse): total entry.stat(follow_symlinksFalse).st_size elif entry.is_dir(follow_symlinksFalse): total get_dir_size(entry.path) except (PermissionError, OSError): continue except (PermissionError, OSError): pass return total def scan_top_dirs(root, top_n15): results [] with os.scandir(root) as it: for entry in it: if entry.is_dir(follow_symlinksFalse): size get_dir_size(entry.path) results.append((entry.path, size)) results.sort(keylambda x: x[1], reverseTrue) for path, size in results[:top_n]: print(f{size / (1024**3):.2f} GB {path}) scan_top_dirs(rC:\Users\你的用户名\AppData)这段逻辑有几个关键点值得说明。follow_symlinksFalse是为了避免符号链接导致的重复计算和无限递归这在AppData里很常见很多应用会用链接来共享数据。PermissionError和OSError的捕获是必须的因为AppData里有些目录受系统保护强行读取会报错跳过即可不影响整体统计。按GB输出是为了直观字节数看着太累。跑完一级扫描后你会发现某个子目录特别大比如Local。然后对Local再跑一次同样的逻辑继续下钻。我这次的下钻路径是AppData→Local→ 几个具体的应用目录最终锁定了几个“超级大户”。3.3 87.81GB的构成下钻到具体目录后的发现下钻之后真相就比较清晰了。我的87.81GB里排在前面的几类是这样的某个包管理器的全局缓存目录占了约22GB。这是长期安装依赖积累下来的很多是旧版本包的缓存实际已经不会再被引用。某个AI工具的模型缓存目录占了约18GB。里面有几个大模型文件其中两个是我早期下载后就没再用过的。某个浏览器系的缓存和用户数据占了约12GB。主要是缓存和几个不再使用的配置文件。几个Electron应用的运行时数据合计约15GB。每个应用都带了一份完整的运行时和日志。剩下的零散分布在各种开发工具、编辑器插件、日志目录里。这个构成很有代表性。它说明AppData的膨胀不是单一原因而是“包管理器缓存 AI模型 浏览器数据 Electron应用”这几类大户共同作用的结果。不同人的比例会不同但大户类型基本就这几类。4. 哪些能删、哪些碰不得AppData清理的安全边界4.1 可以安全清理的目录特征清理AppData的核心原则是只删“可再生的缓存”不删“不可再生的数据”。可再生的意思是删掉之后应用会重新生成最多是下次启动慢一点不会丢配置、不会坏功能。符合这个特征的目录通常有这些表现目录名里带Cache、cache、tmp、temp、logs、Crashpad、Code Cache、GPUCache等字样。这些目录里的内容要么是临时文件要么是可以通过重新下载或重新计算得到的缓存。删掉它们应用下次运行时会自动重建。以我这次的排查为例我安全清理了这几类包管理器的缓存目录清理后重新装依赖会重新下载但旧缓存本来也不会再用、浏览器的Cache和Code Cache、几个应用的Crashpad和logs目录。这几项加起来释放了约30GB而且清理后所有应用都正常运行。4.2 绝对不能碰的目录与文件有几类东西看到再大也不能动。第一类是带Roaming的配置目录尤其是那些你正在使用的编辑器和工具的配置。这里面存的是你的个性化设置、插件配置、账号会话。删了之后你的编辑器可能变回默认状态插件要重装登录要重来。第二类是数据库文件通常是.db、.sqlite、.sqlite3结尾的文件。很多应用把本地数据存在这里比如聊天记录、笔记、项目索引。删了就是真丢了没有“重新生成”这一说。第三类是AI模型的权重文件通常是.bin、.safetensors、.gguf、.pt、.onnx等结尾的大文件。这些文件删了要重新下载而且有些模型可能已经下架或很难再找到。如果你不确定某个模型还用不用先别删移到其他盘或者外部存储。第四类是LocalLow下的部分数据尤其是一些多媒体软件和游戏的存档。这个目录权限低但数据未必可再生。一个实用的判断方法在删任何东西之前问自己一句“删了之后这个应用还能不能恢复到现在的状态”如果答案是“不能”或者“不确定”那就别删。4.3 用“移动链接”代替删除的折中方案有些目录你既不想删又不想让它占C盘怎么办可以用“移动目录链接”的方式。把大目录整体移到D盘或其他盘然后在原位置创建一个目录链接指向新位置。这样应用以为文件还在原地实际上数据已经搬到别的盘了。这个方案适合那些“必须保留但体积巨大”的目录比如AI模型缓存、大型项目的构建缓存。操作上先关闭相关应用把目录剪切到目标盘然后用命令行创建链接。这个方案的好处是既释放了C盘空间又保留了数据。坏处是如果目标盘是机械硬盘读取速度会下降如果目标盘被移除或盘符变化链接会失效。5. 一次完整的清理实操从87.81GB到释放出可用空间5.1 清理前的准备工作动手之前我做了三件事。第一确认所有重要项目已经提交或备份避免清理过程中误伤。第二关闭所有可能正在写入AppData的应用尤其是编辑器、浏览器、开发工具。第三记录下当前C盘的可用空间作为清理效果的对照基准。这一步看起来简单但很多人跳过。跳过准备的后果是清理到一半发现某个应用正在写文件导致删除失败或者数据损坏或者清理完发现某个项目打不开了才想起来没备份。5.2 分批次清理与验证我没有一次性全删而是分批做。第一批清理的是最安全的缓存类目录比如各种Cache、Code Cache、GPUCache、Crashpad。清理完立刻打开对应的应用确认能正常启动、功能正常。第二批清理的是包管理器缓存清理后跑一次依赖安装确认能正常拉取。第三批处理的是那些“不确定”的目录先移到其他盘观察一周确认没有应用报错再决定是否彻底删除。这个分批验证的思路很重要。AppData里的东西关联复杂一次性大清理很容易出问题。分批做每批之后验证出问题也能快速定位是哪一批导致的。5.3 清理后的效果与遗留问题这次清理我总共释放了约45GB的C盘空间C盘从红色回到了健康的绿色区间。但有几个目录我最终没有动一个是某个编辑器的Roaming配置虽然有几个GB但里面全是我的插件和设置动了风险太高另一个是某个AI工具的核心模型我还在用只是把不用的几个模型移走了。遗留问题是包管理器缓存会随着使用再次增长AI模型也可能继续增加。所以清理不是一劳永逸的需要定期做。我后来给自己定了个规则每个月跑一次目录扫描看看有没有新的“大户”出现及时处理。6. 让C盘不再爆红的长期习惯6.1 把“默认存储位置”改到其他盘很多应用默认把数据存在C盘的AppData里但大部分应用都允许你修改存储位置。比如包管理器可以配置全局缓存目录到D盘AI工具可以设置模型下载路径浏览器可以改缓存位置。花十分钟把这些默认路径改掉能从源头上减少C盘的压力。这个操作的关键是“趁早”。如果你已经积累了几十GB在C盘改路径只能防止未来增长已有的还得单独处理。所以新装应用时第一件事就是看设置里有没有存储路径选项。6.2 定期扫描与“大户预警”我现在养成了一个习惯每个月用同样的扫描逻辑跑一次只看Top 10目录。如果某个目录突然变大就下钻看看是什么原因。这个习惯让我在问题变大之前就能发现苗头。比如有一次我发现某个日志目录一周内涨了3GB查下来是某个应用进入了调试模式在疯狂写日志关掉调试模式就恢复正常了。定期扫描的另一个好处是你能建立起对自己电脑“正常状态”的认知。知道哪些目录平时多大一旦异常增长就能立刻察觉。6.3 清理工具的选择与自制脚本的取舍市面上有不少C盘清理工具但我个人更倾向于用自制脚本或者通用工具做扫描而不是用那些“一键清理”的软件。原因是一键清理工具往往不透明你不知道它删了什么、为什么删。有些工具还会把不该删的东西删掉或者清理效果虚标。自制脚本的好处是完全可控你知道每一行逻辑在做什么扫描结果也完全基于真实数据。如果你不想写代码用一些通用的磁盘分析工具做可视化扫描也可以核心是“看清楚再动手”而不是“一键了事”。7. 几个容易被忽略的细节与我的个人体会最后分享几个这次排查中踩到或差点踩到的细节。第一个是权限问题AppData里有些目录需要管理员权限才能读取和删除普通权限下扫描会漏掉这些目录导致统计不完整。解决办法是以管理员身份运行扫描逻辑或者在遇到权限错误时单独处理。第二个是“删除后空间没释放”的情况。有时候你删了文件但空间没有立刻回来这是因为文件还被某个进程占用着。解决办法是关闭相关应用或者重启后再看。如果重启后还没释放可能是文件被系统还原点或卷影副本引用了。第三个是关于“AppData大小和实际占用不符”的疑惑。有时候扫描出来的大小和资源管理器显示的不一致这通常是因为符号链接、硬链接或者权限导致的统计差异。以扫描逻辑的结果为准资源管理器的统计在复杂目录结构下经常不准。我个人的体会是C盘爆红这件事恐慌和乱删是最差的应对。真正有效的做法是把它当成一次“磁盘审计”——用工具查清楚空间去哪了识别出哪些是可再生的缓存、哪些是不可再生的数据然后分批、可验证地清理。这套方法我用了几年每次都能在不损坏系统的前提下把C盘救回来。87.81GB的AppData听起来吓人但拆开看真正不能动的可能只有其中一小部分剩下的都是可以安全处理的。关键是你要先看清楚再动手。