能切,但必须用dnf swap替换仓库包,不能只改配置文件或镜像地址,否则dnf update会失败或降级关键组件;需先验证系统为CentOS Linux 8、修复失效源(如切换至vault.centos.org)、安装centos-release-stream、执行dnf swap centos-linux-repos centos-stream-repos和dnf distro-sync,并校验rpmdb与重启后服务状态。

能切,但必须用 dnf swap 替换仓库包,不能只改配置文件或镜像地址——否则 dnf update 会失败或降级关键组件。
确认当前系统版本和可用仓库
先验证你确实是 CentOS 8(非 Stream),且仓库未失效:
- 运行
cat /etc/centos-release,输出应含CentOS Linux 8,不是CentOS Stream - 执行
dnf search centos-release-stream,确保能搜到结果;若报错No match for argument,说明系统源已不可用,需先修复基础源(见下一条) - 如果
dnf repolist显示大量failed或0 packages,说明官方源已下线(2021年12月31日起),此时必须先切换到vault.centos.org源才能继续安装centos-release-stream
安装并启用 centos-release-stream 仓库
这一步是切换的前提,不能跳过:
- 若
dnf search成功,直接运行:sudo dnf install -y centos-release-stream - 若失败(常见于源失效后),先备份原 repo:
sudo cp -r /etc/yum.repos.d /etc/yum.repos.d.bak,再批量注释掉mirrorlist并替换baseurl:sudo sed -i 's/mirrorlist/#mirrorlist/g; s|^#baseurl=|baseurl=|g; s|http://mirror.centos.org|https://vault.centos.org|g' /etc/yum.repos.d/CentOS-*.repo - 验证新源可用:
sudo dnf makecache不报错才算成功,之后再装centos-release-stream
swap 仓库并同步系统
dnf swap 是核心操作,它会卸载 centos-linux-repos、安装 centos-stream-repos,并自动处理依赖冲突:
- 执行:
sudo dnf swap centos-linux-repos centos-stream-repos—— 注意不是centos-{linux,stream}-repos这种简写,部分旧文档写法在较新dnf版本中会失败 - 紧接着必须运行:
sudo dnf distro-sync(不是update)—— 它会把所有已安装包对齐到 Stream 的最新可用版本,耗时较长,期间不要中断 SSH 连接 - 若遇到
rpmdb错误(如error: rpmdb: BDB0100 Could not open/create database),需重建数据库:sudo rm -f /var/lib/rpm/__db*,然后sudo rpm --rebuilddb,再重试distro-sync
验证与重启后注意事项
完成同步后不等于切换成功,必须验证并处理残留问题:
- 检查版本:
cat /etc/os-release | grep -E "(NAME|VERSION_ID|ID)",ID应为centos-stream,VERSION_ID可能仍是"8",但内核和基础工具链已是 Stream 快照 - 运行
hostnamectl看Operating System字段是否显示CentOS Stream 8 - 重启前注意:Docker CE 等第三方软件可能被
distro-sync移除(因 Stream 默认含podman和buildah),若业务强依赖 Docker,需在重启后手动重装docker-ce并恢复配置 - 重启后首次登录,建议立刻运行
dnf list updates确认无待更新包,再检查关键服务(如sshd、firewalld)状态
整个过程最易被忽略的是 distro-sync 前的源修复和 swap 后的数据库一致性校验;很多“切换失败”实际卡在这两步,而不是命令本身写错。


















