包缓存为什么会占满磁盘
/var/cache 下的包缓存是长期占用空间的隐形大户:APT 把下载过的 deb 放在 /var/cache/apt/archives,RHEL 系把 rpm 与元数据放在 /var/cache/dnf(旧版 /var/cache/yum)。清理命令本身很短,难点在安全边界 —— apt-get autoremove 会删掉系统判定为不再被依赖的包,旧内核清理删过头会失去回退能力。这条把两系的清理动作与风险边界放在一起对照。
基本信息
| 适用平台 | Debian/Ubuntu 与 RHEL/CentOS/Rocky/Alma |
|---|---|
| 权限要求 | root |
| 缓存路径 | /var/cache/apt/archives、/var/cache/dnf、/var/cache/yum |
| 安全档位 | clean 类安全;autoremove 与旧内核清理需先预览 |
| 预览手段 | apt-get autoremove --dry-run、dnf autoremove --assumeno |
典型使用场景
- 容量告警时先量化缓存占用,回收其中最无风险的部分
- 编译、装机留下大量开发依赖(-dev/-devel 包),交付前清理
- 多次内核升级后 /boot 或根分区被旧内核占满,需要按保留策略删除
- 制作镜像、迁移前做基线清理,缩小镜像体积
- 排查“空间显示够但写入失败”:确认缓存目录属主与权限是否被改动
两系清理动作
两系清理动作
du -sh /var/cache/apt/archives /var/cache/dnf 2>/dev/null # 先量化占用,再决定清不清
apt-get clean # Debian/Ubuntu:删掉全部已下载的 deb,最安全
apt-get autoclean # 只删已从仓库下线、重下不到的 deb
apt-get autoremove --dry-run | head -n 30 # 先预览要删哪些包,务必先看
dnf autoremove --assumeno # RHEL 系预览:打印事务后自动答否
dnf clean all # 清元数据与包缓存(换源、元数据损坏时用)
ls /boot | grep -c vmlinuz # 删内核前先数一下现存内核版本数量清理动作的安全边界
| 动作 | 删掉什么 | 边界与注意 |
|---|---|---|
| apt-get clean | 全部已下载的 deb | 最安全,代价只是下次重下 |
| apt-get autoclean | 仓库已下线、无法再下载的 deb | 安全,收益取决于仓库变动 |
| apt-get autoremove | 判定为无依赖的包(可能包含内核) | 必须先 --dry-run;服务器上不要顺手加 --purge |
| 旧内核清理 | 多余内核与 /boot 下的镜像文件 | 至少保留当前使用的一版加一版可回退 |
| dnf clean all | 元数据与包缓存 | 换源排障正确;弱网机房重下成本高 |
autoremove 的依赖判断基于当前元数据:第三方源被移除或包名变更后,可能把仍在用的组件判成孤儿。生产机执行前放在维护窗口,并确保有快照或回滚手段。
缓存清理的收益常被高估:真正吃掉磁盘的通常是日志、容器数据与业务文件,包缓存一般只能回收几百 MB 到几 GB,它是治理动作之一而不是终点。