工作中碰到过好多次系统进入了紧急模式的问题,抽时间把相关的总结出来!
故障分析解决:
操作系统启动异常可能会进入紧急模式,碰到过如下情况(系统:centos系统):
1 iscsi 等远端访问磁盘出错导致:
打印如下:
此时需要 root 密码进入系统,进入系统后根据提示通过 journalctl -xb 查看日志,分析具体是启动过程中哪个服务失败导致的。
一般来说,多个系统服务的启动失败都有可能导致系统进入紧急模式,包括 initrd-root-fs.target、initrd-switch-root.service、initrd-parse-etc.service
initrd-cleanup.service、initrd-fs.target、local-fs.target 以及 initrd.target。但比较常见的是一般是 local-fs.target 挂载本地文件系统失败导致。
可以首先通过命令 systemctl status local-fs.target 查看是否是本地文件系统挂载失败,如果是,再进一步对比查看日志与 /etc/fstab 确认是一
个磁盘挂载失败,较为常见的原因是 /etc/fstab 中有通过 iscsi 等远端访问的磁盘,而未添加 _netdev 挂载属性。
进一步,则需要查看日志,依次确认是哪一个服务导致的系统进入紧急模式。
2 系统switch-root失败导致:
打印如下:
进入系统后根据提示通过 journalctl -xb 查看日志,找到如下的打印信息:
根据提示信息可以发现是initrd-switch-root.service服务失败导致进入了紧急模式,查看对应的服务内容:
[Unit]
Description=Switch Root
DefaultDependencies=no
ConditionPathExists=/etc/initrd-release
OnFailure=emergency.target // 服务失败进入紧急模式
OnFailureJobMode=replace-irreversibly
AllowIsolate=yes
[Service]
Type=oneshot
# we have to use "--force" here, otherwise systemd would umount /run
ExecStart=/usr/bin/systemctl --no-block --force switch-root /sysroot
KillMode=none
对比系统是否有/etc/initrd-release文件,如果有,执行/usr/bin/systemctl --no-block --force switch-root /sysroot,出现如下信息:
小系统里面/sysroot可以正常挂载,说明/sysroot是一个完整的系统,os-tree完整,很可能就是缺失os-release文件,查看大系统的确缺少,找一个正常的系统
把/etc/os-release文件拷贝进去或者重新安装包(centos-release)就行,系统正常启动。