Loaded plugins: fastestmirror Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast file:///mnt/repodata/repomd.xml: [Errno 14] curl#37 - "Couldn't open file /mnt/repodata/repomd.xml" Trying other mirror. Loading mirror speeds from cached hostfile Package psmisc-22.20-8.el7.x86_64 already installed and latest version Nothing to do
时间: 2025-07-25 11:27:42 浏览: 2
<think>我们正在处理一个关于yum更新错误的问题。用户遇到了两个相关错误:
1. "repodata over 2 weeks old" 警告
2. "file /mnt/repodata/repomd.xml not found" 错误
根据引用内容,错误信息包括:
- 无法打开/读取文件(如file:///mnt/cdrom/repodata/repomd.xml)
- 尝试其他镜像失败
用户提供的引用表明,他们可能配置了一个本地yum仓库(使用file://协议),但路径不正确。
步骤分析:
1. 首先,用户需要确认本地仓库的路径是否正确。引用中显示,通过`find /mnt/ -name repomd.xml`命令找到了实际的repomd.xml文件在`/mnt/iso/repodata/repomd.xml`,而yum配置中却指向了`/mnt/cdrom/repodata/repomd.xml`,因此路径不一致导致错误。
2. 解决方法是修改yum仓库配置文件,将baseurl指向正确的路径。
3. 对于“repodata over 2 weeks old”警告,这通常是因为本地仓库的元数据过期。由于是本地仓库,我们可能需要手动更新元数据(如果源是光盘,则可能无法更新,但如果是ISO挂载或本地文件,可以重新生成元数据)。
但是,用户的问题中提到了“yum更新”,所以可能用户配置了本地仓库用于更新系统?通常本地仓库用于安装软件包,而不是更新(除非本地仓库包含最新的软件包)。
考虑到用户错误信息中提到了“Trying other mirror”,说明可能配置了多个仓库,包括网络仓库。但错误集中在名为“local”的仓库上。
因此,解决方案如下:
步骤1:检查repomd.xml文件的实际位置。
- 运行命令:`find /mnt/ -name repomd.xml`
步骤2:检查yum仓库配置文件中定义的baseurl路径。
- 仓库配置文件位于`/etc/yum.repos.d/`目录下,通常以.repo结尾。
- 找到名为“local”的仓库(根据错误信息中的仓库名),或者查看所有仓库配置。
步骤3:修改仓库配置文件,将baseurl指向正确的路径。
- 例如,如果实际路径是`/mnt/iso/repodata/repomd.xml`,那么baseurl应该设置为`file:///mnt/iso`(注意:baseurl是仓库的根目录,而不是repodata目录)。
步骤4:清除yum缓存并重新生成缓存。
- 运行命令:
sudo yum clean all
sudo yum makecache
步骤5:如果本地仓库的元数据确实过期(比如光盘仓库,且光盘内容未更新),那么可以考虑禁用该仓库(如果不需要)或者更新仓库内容(如果可能)。
另外,关于“repodata over 2 weeks old”警告,可以通过在仓库配置中添加以下选项来忽略:
metadata_expire=never
但注意:这仅适用于本地仓库,因为本地仓库不会自动更新。
详细步骤:
1. 查找repomd.xml文件的位置:
执行:`find /mnt/ -name repomd.xml`
假设找到的路径为:`/mnt/iso/repodata/repomd.xml`
2. 编辑仓库配置文件:
进入目录:`cd /etc/yum.repos.d/`
找到对应的仓库配置文件,可能是`local.repo`或类似名称。如果找不到,可以查看所有.repo文件。
例如,使用grep查找:
grep -l "local" *.repo # 查找包含仓库名为local的文件
打开该文件,修改baseurl。注意:baseurl应该是包含repodata目录的父目录。
原配置可能为:
baseurl=file:///mnt/cdrom
修改为:
baseurl=file:///mnt/iso
同时,为了忽略元数据过期警告,可以添加:
metadata_expire=never
示例配置:
[local]
name=Local Repository
baseurl=file:///mnt/iso
enabled=1
gpgcheck=0
metadata_expire=never
3. 保存文件后,清除缓存并重建:
yum clean all
yum makecache
4. 测试:运行`yum list`或`yum update`,看是否还有错误。
如果用户没有使用本地仓库的必要,也可以考虑禁用该仓库(设置enabled=0)。
注意:如果用户实际上是想使用网络仓库,那么可能是本地仓库配置错误导致干扰,禁用即可。
根据引用[3]中的错误信息,还出现了curl无法打开文件的错误,这同样是因为路径不正确。修改baseurl后应该解决。
如果问题仍然存在,请检查/mnt/iso目录的访问权限,确保yum进程(以root身份运行)可以读取。
最后,关于“fastestmirror”插件,它用于选择最快的网络镜像,对本地仓库无效。如果本地仓库配置正确,则不会影响。
因此,总结解决方案为:修正本地仓库的baseurl路径,并设置metadata_expire=never来忽略过期警告。
生成相关问题:
1. 如何禁用yum中的某个仓库?
2. 如何配置一个本地yum仓库?
3. 如何忽略yum仓库的元数据过期警告?
4. 如何重新生成yum缓存?
5. 如何查看当前启用的yum仓库?</think>### 解决yum更新错误:repodata过期与文件路径问题
#### 问题分析
根据错误信息`file /mnt/repodata/repomd.xml not found`和`repodata over 2 weeks old`,核心问题有两个:
1. **路径配置错误**:yum配置文件中的仓库路径与实际挂载路径不一致(引用[1][2])。
2. **元数据过期**:本地仓库的repodata超过2周未更新(引用[3])。
#### 解决步骤
##### 1. **确认实际repomd.xml路径**
```bash
find /mnt/ -name repomd.xml # 示例输出:/mnt/iso/repodata/repomd.xml
```
记录实际路径(如`/mnt/iso/repodata/repomd.xml`)。
##### 2. **修正yum仓库配置**
编辑仓库配置文件(通常在`/etc/yum.repos.d/local.repo`):
```bash
sudo vi /etc/yum.repos.d/local.repo
```
修改`baseurl`匹配实际路径:
```ini
[local]
name=Local Repository
baseurl=file:///mnt/iso # 与find结果保持一致(不含repodata)
enabled=1
gpgcheck=0
metadata_expire=never # 忽略过期警告
```
##### 3. **清除并重建缓存**
```bash
sudo yum clean all # 清除旧缓存
sudo yum makecache # 重建元数据缓存
```
##### 4. **验证修复**
```bash
sudo yum update --disablerepo=\* --enablerepo=local # 仅测试本地仓库
```
#### 关键注意事项
- **挂载点一致性**:确保光盘/ISO始终挂载到`/mnt/iso`(示例路径),可在`/etc/fstab`中固化挂载配置。
- **网络仓库补充**:若需网络更新,添加官方仓库(如`baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/`)。
- **权限问题**:检查`/mnt/iso`目录权限:
```bash
sudo chmod -R 755 /mnt/iso # 确保可读
```
#### 故障排除
- 若仍报错`Could not open/read file`,检查:
- 文件是否存在:`ls -l /mnt/iso/repodata/repomd.xml`
- SELinux状态:`sudo setenforce 0`(临时禁用测试)
- 元数据手动更新(仅限本地仓库):
```bash
sudo createrepo --update /mnt/iso # 需安装createrepo
```
> **提示**:本地仓库的`repodata over 2 weeks old`是预期行为,设置`metadata_expire=never`可屏蔽该警告[^3]。
阅读全文
相关推荐

















