/sbin/init无法启动

版本是2309。系统昨天还算正常,今天启动时直接就在开机界面锁死了。进入单用户模式试了一下,它提示

/sbin/init:Error while loading shared libraries: libsystemd-core-253.so: Cannot open shared object

有没有哪位大神给分析分析?

这是一个比较严重的系统启动故障,/sbin/init(即 systemd)在启动时找不到核心共享库 libsystemd-core-253.so,导致系统无法正常引导。下面帮你分析原因并提供修复方案。


故障原因分析

libsystemd-core-253.so 是 systemd 的核心动态库(版本 253),/sbin/init 本身就是 systemd 的软链接。出现该错误通常有以下几种原因:

  • 库文件被误删或损坏/usr/lib64/libsystemd-core-253.so 不存在或已损坏

  • systemd 包升级/降级不完整:部分文件已更新,但依赖库未同步,导致版本不匹配

  • /etc/ld.so.cache 缓存异常:动态链接器缓存未包含该库的路径

  • 文件系统损坏:根分区出现 I/O 错误,导致文件无法读取


修复方案

由于系统已无法正常启动,你需要通过 救援模式(Rescue Mode)Live CD/USB 进入系统进行修复。

步骤一:进入救援环境

  1. 使用 openEuler 安装 ISO 启动,选择 “Troubleshooting” → “Rescue a openEuler system”

  2. 或者使用 Live 镜像启动后,手动挂载原系统根分区:

    bash

    编辑

    1mkdir /mnt/sysroot
    2mount /dev/sdaX /mnt/sysroot          # 挂载根分区
    3mount --bind /dev /mnt/sysroot/dev
    4mount --bind /proc /mnt/sysroot/proc
    5mount --bind /sys /mnt/sysroot/sys
    6chroot /mnt/sysroot
    

步骤二:检查库文件是否存在

bash

编辑

1# 查找库文件
2find /usr/lib64 -name "libsystemd-core*.so*" 2>/dev/null
3ls -l /usr/lib64/libsystemd-core-253.so
  • 如果文件存在:可能是缓存问题,执行 ldconfig 重建缓存

  • 如果文件不存在:需要重新安装 systemd 包

步骤三:重新安装 systemd

bash

编辑

1# 检查 systemd 包状态
2rpm -qa | grep systemd
3
4# 重新安装 systemd(会自动修复缺失的库文件)
5dnf reinstall -y systemd
6
7# 如果 dnf 不可用,使用 rpm 强制重装
8rpm -ivh --force --replacepkgs systemd-*.rpm

:light_bulb: 如果网络不可用,可从同版本 openEuler ISO 的 Packages/ 目录中提取 systemd-*.rpm 进行离线安装。

步骤四:重建动态链接缓存

bash

编辑

1# 确保库路径已配置
2echo "/usr/lib64" > /etc/ld.so.conf.d/usr-lib64.conf
3
4# 重建缓存
5ldconfig
6
7# 验证库是否已注册
8ldconfig -p | grep libsystemd-core

步骤五:验证修复结果

bash

编辑

1# 检查 init 的依赖是否完整
2ldd /sbin/init | grep "not found"
3
4# 确认无缺失后,退出 chroot 并重启
5exit
6reboot

预防措施

  • 避免手动删除 /usr/lib64/ 下的库文件,应始终通过包管理器操作

  • 系统升级时确保完整性:使用 dnf upgrade --refresh 而非手动替换 RPM 包

  • 定期备份关键系统文件,尤其是 /usr/lib64//etc/ld.so.conf.d/

  • 启用 openEuler 官方仓库,确保依赖能自动解析


如果上述方法仍无法解决,可能是根文件系统已损坏,建议检查磁盘健康状态(smartctl -a /dev/sda)并考虑从备份恢复系统。

非常感谢,今天数据已经做好了备份,明天按照您给的步骤试一下。

谢谢:folded_hands:

进入救援模式之后, ldconfig重建了下缓存OK了。

谢谢大佬:folded_hands:真是学海无涯啊,您是知之为知之,我是不知为不知呀