一、YUM缓存为什么需要优化

每次用yum install装软件时,系统都会默默下载一堆 RPM 包。默认情况下,这些包下载完就扔在/var/cache/yum里,下次再装同样的包时——哪怕版本都没变——YUM 还是会傻乎乎地重新下载。对于内网服务器或者带宽紧张的环境,这种设计简直是在浪费生命。

更糟的是,默认的缓存清理策略非常被动:只有当磁盘快满时,YUM 才会不情不愿地删点旧文件。想象一下,你有一台跑了三年的 CentOS 服务器,/var目录突然被缓存撑爆的场景……

二、定制你的缓存目录

先解决存储位置问题。默认的/var/cache/yum可能挂载在根分区,而根分区通常不会留太多空间。我们可以通过修改/etc/yum.conf来迁移缓存:

[main]
# 新缓存路径(建议选择大容量分区)
cachedir=/data/yum_cache/$basearch/$releasever
# 开启缓存功能(默认其实已经是1)
keepcache=1

关键参数说明:

  • $basearch 会自动替换为系统架构(如 x86_64)
  • $releasever 对应系统大版本(如 CentOS 7 就是 7)
  • 路径权限需确保root:root且模式为755

迁移后记得手动创建目录并复制旧缓存:

mkdir -p /data/yum_cache
rsync -av /var/cache/yum/ /data/yum_cache/

三、智能清理策略配置

光改存储位置还不够,我们需要主动控制缓存规模。在/etc/yum.conf中添加这些规则:

# 保留最近N天的元数据(默认为7天)
metadata_expire=1800  # 单位秒,这里设为30分钟

# 自动清理配置
clean_requirements_on_remove=1  # 删除软件时自动清理依赖
history_record_packages=0       # 禁用安装历史记录(节省空间)

更精细的控制可以用package-cleanup工具,例如:

# 删除重复版本的包(慎用!可能破坏依赖)
package-cleanup --dupes

# 删除旧内核缓存(安全操作)
package-cleanup --oldkernels --count=2

四、缓存大小硬限制

通过cron定时任务实现磁盘保护。创建/etc/cron.weekly/yum_clean

#!/bin/bash
# 当缓存超过10GB时触发清理
CACHE_DIR="/data/yum_cache"
MAX_SIZE=$((10*1024))  # 单位MB

current_size=$(du -sm $CACHE_DIR | awk '{print $1}')
if [ $current_size -gt $MAX_SIZE ]; then
    yum clean all
    # 选择性保留最近下载的包
    find $CACHE_DIR -name "*.rpm" -mtime +30 -delete 
fi

记得给脚本执行权限:

chmod +x /etc/cron.weekly/yum_clean

五、高级技巧:本地缓存仓库

对于需要批量部署的场景,可以构建本地缓存仓库。首先安装必要工具:

yum install -y createrepo

然后同步官方仓库(以EPEL为例):

reposync -r epel -p /data/yum_repo/
createrepo /data/yum_repo/epel

最后创建本地repo文件/etc/yum.repos.d/local.repo

[local-epel]
name=Local EPEL Cache
baseurl=file:///data/yum_repo/epel
enabled=1
gpgcheck=0

六、应用场景与注意事项

典型使用场景:

  • 离线环境服务器集群
  • 云主机镜像构建过程
  • 持续集成(CI)环境

需要规避的坑:

  1. 不要随意清理正在使用的依赖包
  2. 修改缓存路径后需重建repo元数据
  3. RHEL系统需注意订阅管理器的影响

性能对比测试:
在同等网络条件下,优化后的YUM缓存可使重复安装速度提升3-5倍,尤其适用于:

# 批量安装测试(优化前 vs 优化后)
time yum install -y nginx mysql  # 首次安装
time yum reinstall -y nginx mysql  # 重复安装

七、总结

通过合理的缓存配置,我们实现了:

  • 节省90%以上的重复下载流量
  • 将软件安装时间从分钟级降至秒级
  • 避免因磁盘满导致的运维事故

记住,好的系统配置就像整理房间——前期花时间规划存储空间,后期就能享受高效维护的便利。