【系统救援】CentOS7启动失败:进入紧急救援模式(emergency模式)

问题由来

如题,按照公司规定,节前需关机断电。节后启动虚拟机,未正常启动成功,进入了紧急救援模式(emergency模式)。极可能由节前强制断电关机导致,但并不能确定一定是该原因;后面,随着定位深入,发现是是因为/usr/lib/下所有的文件均丢失导致的。

报错信息:

blk_update_request: I/O error, dev fd0, sector 0 

you might want to save “/run/initramfs/rdsosreport.txt“ to a USB stick or /boot
after mounting them and attach it to a bug report

Starting Switch Root...
Failed to switch root: Specified switch root path '/sysroot' does not seem to be an OS tree. os-release file is missing.
initrd-switch-root.service: Main process exited, code=exited, status=1/FAILURE
initrd-switch-root.service: Failed with result 'exit-code'.
Failed to start Switch Root.

问题定位

系统启动后进入紧急救援模式,在console窗口打印信息大致如上(未截图)。看到这些信息后,被I/O error给误导了【误导一】,认为是磁盘文件或者分区出现了异常。沿着上面的思路,我做了如下操作:

  1. 虚拟机做快照,避免修复失败导致无法挽回;
  2. 挂载ISO文件,修改引导DVD启动,进入到修复模式;
  3. 强制修复了根分区:xfs_repair -L /dev/mapper/centos-root;
  4. 重启:问题未解决。

/dev/fd0属于软盘设备,通过查看虚机配置,并没有该设备【误导二】。接着做了如下操作:

  1. 删除了/dev/fd0设备;
  2. 备份并重新生成grub.cfg:grub-mkconfig -o /boot/grub/grub.cfg

在重新生成grub.cfg时,报错了:未找到/etc/os-release文件。这和进入紧急模式打印的日志相符:Failed to switch root: Specified switch root path '/sysroot' does not seem to be an OS tree. os-release file is missing.

我擦~~难道一个os-release文件还能导致系统启动失败?还真能!

此时,如果单单将/etc/os-release补齐,系统则可以正常引导启动,不再进入emergency模式,但是会卡死

进一步定位发现/mnt/sysimage/usr/lib/下是空的。因为/etc/os-release只是/usr/lib/os-release文件的软链接。(很难说该目录下的文件丢失是因为断电强制关机导致的,这也太齐整了。但,排除人为原因后,断电丢失的可能性很大)。

问题解决

  1. cp -a /usr/lib/* /mnt/sysimage/usr/lib/
  2. 退出救援模式,重启系统,正常启动了。

但是,此时ssh启动失败,说是没找到/etc/sysconfig/sshd环境变量文件;补齐该文件之后,服务仍然无法正常启动,所以果断重装了openssh-server。

  1. 通过yum reinstall openss-server重装;
  2. 上述无法重装,则需卸载后重新install(离线或在线)。

其实,到这里基本上已经将系统救回来了。但是,身子仍然比较虚。可以通过yum upgrade将系统以及软件包都升级一下。这样以来,系统则基本脱胎换骨,焕发新机了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值