按照官方文档将22.03SP1 升级到 22.03SP4出现以下问题
1.systemd-249-81.oe2203sp4.x86_64安装失败
2.udevadm: symbol lookup error: udevadm: undefined symbol: strv_copy_n, version SD_SHARED
重启后无法进入系统。请问又解决的办法吗?
根据您描述的问题,这是典型的 systemd 库版本不匹配导致的系统升级失败。strv_copy_n 是 systemd 249+ 版本中引入的函数符号,当 udevadm 与 libsystemd-shared.so 版本不一致时就会出现此错误。以下是完整的解决方案:
紧急恢复步骤
第一步:进入救援模式
-
重启服务器,在 GRUB 启动菜单界面按
e编辑启动参数 -
找到以
linux开头的行,在行尾添加:systemd.unit=rescue.target -
按
Ctrl+X或F10启动进入救援环境 -
如果系统提示挂载根文件系统,选择 “1) Continue” 以读写方式挂载
如果救援模式无法进入,可使用 openEuler 22.03 SP4 安装 ISO 启动到"Rescue Mode",挂载原系统分区后继续执行修复操作。
第二步:修复 systemd 依赖关系
进入救援模式后执行以下操作:
# 1. 检查当前 systemd 相关包状态
rpm -qa | grep systemd | sort
# 2. 检查 libsystemd-shared 库文件版本
ls -la /usr/lib64/libsystemd-shared-*.so
# 3. 强制重新安装完整版 systemd(关键步骤)
dnf reinstall systemd systemd-libs systemd-udev --allowerasing -y
# 或使用 rpm 强制覆盖安装(如果 dnf 不可用)
rpm -Uvh --force --nodeps systemd-249-81.oe2203sp4.x86_64.rpm \
systemd-libs-249-81.oe2203sp4.x86_64.rpm \
systemd-udev-249-81.oe2203sp4.x86_64.rpm
第三步:验证修复
# 1. 检查符号是否存在
nm -D /usr/lib64/libsystemd-shared-*.so | grep strv_copy_n
# 2. 测试 udevadm 是否正常
udevadm --version
udevadm info --root
# 3. 重建 initramfs(重要!)
dracut -f --regenerate-all
# 4. 更新 grub 配置
grub2-mkconfig -o /boot/grub2/grub.cfg
第四步:重启系统
exit # 退出救援模式并重启
预防措施与建议
升级前必须完整同步仓库:
dnf clean all
dnf makecache
dnf upgrade --refresh