一、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)环境
需要规避的坑:
- 不要随意清理正在使用的依赖包
- 修改缓存路径后需重建repo元数据
- RHEL系统需注意订阅管理器的影响
性能对比测试:
在同等网络条件下,优化后的YUM缓存可使重复安装速度提升3-5倍,尤其适用于:
# 批量安装测试(优化前 vs 优化后)
time yum install -y nginx mysql # 首次安装
time yum reinstall -y nginx mysql # 重复安装
七、总结
通过合理的缓存配置,我们实现了:
- 节省90%以上的重复下载流量
- 将软件安装时间从分钟级降至秒级
- 避免因磁盘满导致的运维事故
记住,好的系统配置就像整理房间——前期花时间规划存储空间,后期就能享受高效维护的便利。
评论