openeuler 22.03 sp1 升级到22.03 sp4失败

按照官方文档将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 版本不一致时就会出现此错误。以下是完整的解决方案:

紧急恢复步骤

第一步:进入救援模式

  1. 重启服务器,在 GRUB 启动菜单界面按 e 编辑启动参数

  2. 找到以 linux 开头的行,在行尾添加:systemd.unit=rescue.target

  3. 按 Ctrl+X 或 F10 启动进入救援环境

  4. 如果系统提示挂载根文件系统,选择 “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