缓存是干什么的
dnf 每次装包前都要拿到仓库元数据(有哪些包、依赖关系、签名信息),这些数据会缓存在本地 /var/cache/dnf 下,默认有有效期。缓存过期、下载中断或源地址变更后,就会出现『明明有这个包却提示 No match for argument』『Failed to download metadata』这类现象,makecache 负责重建元数据缓存,clean 负责清掉旧缓存,两者是 dnf 异常的标准处置组合。
基本信息
| 刷新元数据 | dnf makecache(只拉元数据不装包) |
|---|---|
| 清理缓存 | dnf clean all(清元数据、包体与 dbcache) |
| 缓存位置 | /var/cache/dnf,可按仓库分目录 |
| 查看仓库状态 | dnf repolist -v、dnf repolist --all |
| 典型诱因 | 换了镜像地址、元数据过期、上次下载被中断 |
| 权限要求 | 写入缓存目录需 root;makecache 一般用 root 执行 |
典型使用场景
- 刚切换软件源地址,需要重新拉取新源元数据
- 报找不到包或元数据下载失败,先清缓存再重建
- 离线源目录更新了 rpm,客户端刷新后才能看到新包
- 巡检前刷新缓存,避免因过期元数据误判为源不可用
- 装机脚本里在安装组件前统一刷新一次,降低偶发失败率
标准处置顺序
标准处置顺序
dnf clean all # 先清掉可能损坏或过期的元数据与包体缓存
dnf makecache # 重新拉取各启用仓库的元数据
dnf repolist -v # 确认每个仓库已启用、地址与包数量符合预期
dnf install -y nginx # 再执行安装
dnf makecache --refresh # 元数据仍在有效期内也想强制刷新时用 --refresh缓存占用与定向清理
缓存占用与定向清理
du -sh /var/cache/dnf # 看缓存总占用,长期运行机器可能积累数 GB
dnf clean packages # 只清包体,保留元数据,省一次全量下载
dnf clean metadata # 只清元数据,怀疑元数据损坏时用
dnf repolist --all | grep -i disabl # 排查被禁用的仓库,地址写错常表现为仓库直接禁用报错与定位
| 现象 | 含义 | 处置 |
|---|---|---|
| Failed to download metadata | 仓库地址不可达或网络/DNS 异常 | curl 直连该 baseurl 验证,再查代理与防火墙 |
| Cannot download repomd.xml | 元数据文件取不到,压缩包缺失或不完整 | 清缓存重建;服务端确认 repodata 目录完整 |
| No match for argument | 缓存里没有该包 | makecache --refresh;确认包名与仓库是否启用 |
| Curl error 60 / 证书报错 | HTTPS 源证书不受信 | 导入对应 CA 证书,不要随手加 --nogpgcheck |
| 元数据大量下载很慢 | 内网源带宽或压缩比问题 | 错峰刷新;服务端启用元数据压缩 |
换了发行版大版本或镜像路径后,必须 clean all 再 makecache,否则新旧元数据混用会出现依赖解析结果自相矛盾。
只读环境或生产网内不便联网时,可先用 dnf makecache --timer 配合定时器在低峰刷新,避免业务时段触发大流量拉取。