笔记本越用越慢、磁盘逼近红线,我没有直接动手删文件,而是先做了一次全身体检——把问题分级、列清单、逐项确认,最后清理出数 GB 空间。 本文记录完整过程,包括一个差点酿成事故的坑。
这台笔记本跟了我五年多,最近的状态是:开几个应用就开始换页,磁盘可用空间只剩个位数 GB,风扇动不动就狂转。
按照直觉,这时候该做的事是「清理垃圾」。但真正做下来,我发现比清理更重要的是先搞清楚现状——哪些空间能回收、哪些配置漂移了、哪些操作有风险。所以整个工作分成两步:先体检(只读),再动刀(分级执行)。
我用一个只读脚本做全机检查(只采集信息,不修改任何文件),覆盖八个维度:
# 思路示例:每个维度一个独立采集函数,互不影响
check_kernel_consistency # 运行内核 vs 已安装内核 / boot 镜像
check_memory # 内存 / zram swap / Committed_AS 超售
check_disk # 各分区使用率 + 大目录 TOP N
check_reclaimable # 各类缓存与回收站
check_config_drift # .pacnew / .pacsave 未合并项
check_mirror_freshness # 镜像源更新日期
check_security_baseline # 防火墙 / SecureBoot
check_hardware # 温度 / 风扇 / 电池循环 / 网络延迟级别 | 问题 | 实测数据 |
|---|---|---|
P1 | 内存紧张,zram swap 即将打满 | zram 已用 5.5G/8G,可用内存仅 6.6G |
P1 | I/O 压力持续偏高 | PSI io some 3.7% |
P2 | 配置漂移:9 个 .pacnew 未合并 | 含 mkinitcpio.conf |
P3 | 镜像源 6 个月未更新 | 列表停在 4 月 |
P3 | 未启用任何防火墙服务 | 工具齐全、配置在位,就是没启动 |
P3 | 可回收空间约 2.0G | 回收站 157M / npm 缓存 285M / 浏览器缓存 1.1G / 工作区缓存 293M |
健康项也一并记下来:运行内核与已安装内核一致(升级后重启过)、电池健康度 80%(244 次循环)、温度正常、网络延迟 1.4ms、SSD TRIM 定时任务已启用。
体会:体检报告本身就有价值。它把「感觉电脑变慢了」变成一张带数字的分级表,后面每一个动作都有了依据,也能对别人交代清楚。
体检脚本默认会自动用 sudo 补特权项。但在隔离环境(容器/沙箱)里 sudo 不可用,脚本会卡在密码提示上不动,看起来像死机。改成:特权项单独标记、手动分块采集,脚本本身不内嵌 sudo。
顺带记一笔隔离环境的「常态」:包管理器数据库、系统日志、系统总线在沙箱里读不到,不是故障,别误判;系统级改动(防火墙、initramfs、镜像列表)一律出脚本交给本人执行。
清理分四类,风险从低到高。
先找出大头:
du -sh ~/.cache/* 2>/dev/null | sort -rh | head -20这台机器上:
目录 | 清理前 | 清理后 |
|---|---|---|
npm 缓存 | 285M | 52K |
浏览器缓存 | 1.1G | 0 |
常驻工具缓存(截图发送 / 语音 / OCR 等) | 约 293M | 0 |
都是几条命令的事:
npm cache clean --force # 实测有效
rm -rf ~/.cache/mozilla/* # 清浏览器缓存,不碰 profile清回收站前,我按惯例先盘点,结果发现 60 个条目里有 17 项是之前几次操作误移入的个人文件——自己写的分析脚本、输入法用户词库、一个 93M 的备份压缩包、一份报表模板。
如果没有「清空前先盘点」这一步,这些文件就全没了。
复盘这次有惊无险,沉淀出几条规矩:
规矩一:回收站是缓冲区,不是垃圾场。清空前必须逐条列表看过:
ls -la ~/.local/share/Trash/files/规矩二:按时间精确剔除。只清自己这次产生的条目,不碰历史遗留:
find ~/.local/share/Trash -newermt "2026-10-13 15:30"规矩三:恢复文件要检查属主。隔离环境里以 root 身份恢复的文件,属主会变成 root,需要还成本人,否则以后自己都改不动。
规矩四:跨文件系统移动报 EXDEV。改名(rename)跨分区不支持,改用「复制 + 校验 + 删源」三步走。
规矩五:断链要用 lexists 判断。os.path.exists() 对断掉的符号链接返回 False,清理时会漏;os.path.lexists() 才准。
9 个未合并的配置文件,处理策略是先存档 diff,再逐个决定,而不是无脑 mv xxx.pacnew xxx:
文件 | 决定 | 理由 |
|---|---|---|
两个 JSON 配置 | 采用 pacnew | 纯上游更新,无本地定制 |
某内核 preset 的 .pacsave | 删除 | 对应内核本机没装 |
四个 pacnew | 删除,保留当前版 | 当前 pacman.conf 含自定义源和忽略列表,覆盖会搞坏系统 |
mkinitcpio.conf.pacnew | 保留,待人工 | HOOKS 从 udev 改为 systemd 会改变启动行为,不能拍脑袋 |
「新的」不等于「该用的」——你的定制比版本号重要。
镜像列表停在 6 个月前。reflector 没装,就手动测速:对 11 个候选源下载同一个索引文件,取速度前 8 生成新列表。实测最快的是国内云厂商源(1.0 MB/s),其余多在 200–500KB/s 档。
for url in $MIRRORS; do
curl -o /dev/null --max-time 5 -s -w "%{speed_download} $url\n" \
"$url/core/os/x86_64/core.db"
done | sort -rh | head -8既然在清理,把输入法目录也看了一下——214M,其中一大半是编译产物。
做法分三层:
最终战果:磁盘 148G → 142G;内存大头全部定位到具体进程;配置漂移只剩 1 项待人工确认;输入法目录 −63M;包管理器缓存(数 GB)留在系统级清理项,交还给本人执行。
沉淀几条心法:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。