应优先使用 yum clean packages 或 yum clean metadata:前者仅删除.rpm包释放空间但保留元数据,后者仅刷新仓库索引避免“loading mirror speeds”卡顿;二者均需紧跟 yum makecache 重建缓存,而 yum clean all 会清空全部缓存导致后续操作严重延迟。

别急着敲 yum clean all —— 它会连元数据一起删掉,下次 yum search 或 yum install 得重新下载几百MB索引,卡在“Loading mirror speeds”十几秒甚至更久。
什么时候该用 yum clean packages
磁盘空间告急,但你只是想腾出 RPM 包占的那部分(比如 /var/cache/yum/x86_64/7/base/packages/ 下堆了几十个旧内核、旧版本 httpd):
-
yum clean packages只删.rpm文件,保留repodata/目录下的primary.xml.gz等元数据 - 后续
yum install nginx仍能秒级解析依赖,不用等元数据重拉 - 典型场景:CI/CD 构建机、临时测试环境,频繁装卸包但不换源
- 注意:
keepcache=1(默认)才会有包缓存;若已设为0,这命令基本没效果
为什么 yum clean metadata 比 clean all 更常用
遇到这些情况,clean metadata 是首选,不是“清理全部”:
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离线兼容性测试。
-
yum update报错 “Cannot retrieve repository metadata (repomd.xml) for repository”,但网络和源地址都正常 → 元数据文件损坏或过期 - 刚换了阿里云镜像源,
yum repolist还显示旧 baseurl → 本地元数据没刷新 -
yum search找不到新上架的包(比如 EPEL 刚推送的jq-1.7),但yum list available | grep jq能看到 → 元数据未同步 - 执行后必须跟
yum makecache,否则yum会拒绝操作(报 “No such file or directory: /var/cache/yum/x86_64/7/base/repodata/repomd.xml”)
yum clean all 的真实代价和补救动作
它不只是“清缓存”,而是把整个 /var/cache/yum/ 下的 packages/、repodata/、plugins/ 全删光:
- 首次重建元数据可能耗时 2–5 分钟(取决于仓库数量和网络延迟),期间所有
yum命令都会卡住 -
yum makecache默认只生成启用仓库的元数据;若你临时禁用了某个 repo(如epel),它不会被重建 → 后续yum --enablerepo=epel install仍失败 - 建议组合使用:
yum clean all && yum makecache --refresh,其中--refresh强制跳过本地时间戳校验,避免因系统时间不准导致元数据被跳过 - 生产环境慎用:如果
yum.conf里配置了自定义插件(如versionlock),clean all会清掉插件缓存,需手动重载或重启yum
清理后空间没变少?检查这三个地方
执行完 yum clean packages 或 clean all,df -h 显示 /var/cache/yum 占用不变,问题往往不在 yum 缓存本身:
-
/var/lib/rpm/下的数据库可能膨胀(尤其频繁安装/卸载后),运行rpm --rebuilddb可压缩 -
/var/log/yum.log或/var/log/alternatives.log单个文件超百MB,直接truncate -s 0 /var/log/yum.log - 旧内核残留:yum 不会自动删已安装但非当前运行的内核,
package-cleanup --oldkernels --count=1才真正释放空间
真正要命的不是缓存大小,而是元数据过期后 yum 一边重试一边静默失败——它不报错,只慢。所以别等磁盘爆满才清理,定期 yum clean metadata && yum makecache 才是稳态运维的关键动作。










