首页/系统/信创系统运维速查/dnf 缓存维护(makecache/clean)
命令与包管理65 条

dnf 缓存维护(makecache/clean)

源元数据缓存过期会导致“找不到包”:makecache 刷新元数据、clean all 清掉损坏缓存重建,是 dnf 异常的常用处置组合。

信创系统运维速查系统更新于 2026-10-13

缓存是干什么的

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 配合定时器在低峰刷新,避免业务时段触发大流量拉取。

易错点

  • 直接删 /var/cache/dnf 目录而不走 dnf clean,可能留下状态记录与实际缓存不一致,下次操作仍报缓存错误
  • 清完缓存立刻中断后续操作,导致元数据只下了一半且没有校验,表现为时而能用时而报错
  • 只看 dnf 报错不看 repolist:仓库被禁用或地址写错时会误判为网络问题,白折腾半天
  • 代理变更后未同步 dnf 的 proxy 配置,缓存刷新走不通却仍怀疑源站问题
  • 在内网慢速源上反复 clean all,每次都要重下全量元数据,反而拖慢装机进度,应先定向清理再全量

数据来源与参考

  • dnf 缓存文档
  • openEuler FAQ
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌