事情的起因是这样的:
我自己的笔记本是Windows系统,装了一台Linux虚拟机 Centos7 系统。
1. 今天跑程序的时候,不知某种原因,导致整个物理机和虚拟机都没有反应了,无奈只能断电重启;
2. 断电重启后,重启 Linux 虚拟机,发现已经打不开了,直接进入了 安全模式(emergency mode),通过 journal -xb 查看日志,提示是由于无法 mount /sysroot,并且 fstab 文件消失不见了(惊呆了)。只有一个空的 fstab.empty 文件。。。
3. 无法编辑 fstab 文件,于是然后网上查了将近 40 分钟,尝试一堆方法,最后通过 xfs_repair -L /dev/mapper/centos-root 解决了 mount /sysroot;但是问题还没有解决。。。
4. 解决 sysroot 后,出现了选择启动内核的界面,选择一个内核,出现了 centos7 gnome 界面,本以为问题解决了(很开心),但是等了半天,发现界面一直在转圈,始终无法进入登录界面(沮丧)
5. 通过 ARTL + C命令切换到后台,返现报无法配置 selinux policy,于是又网上查了半天,最后通过内核启动界面按 e 进入内核启动项编辑模式,在 fi 的下一行的最后加上 selinux=0 ;CRTL + x 重新进入内核,这次倒是不报 selinux 的问题了,但是依旧无法进入登录页面,还是直接跳转到了安全模式(回到原点)
6. 继续查看 journal -xb ,看见了 mount 我自己的一个盘出现了问题,于是又开始网上搜索,经过漫长搜索与试验后,无效。。。。。
7. 死马当活马医,想起来我还有一个内核,版本比较第一个小号,以前也出现过高内核无法进入的问题,于是我选择了低内核进入,果然直接进入了 gnome;问题还没完。。。
8. 上面问题的原因是因为我自己的盘被格式化 ext4 格式,但是高版本内核居然没有 ext4 格式支持(cat /proc/filesystems),简直是坑,而低版本内核里有 ext4 格式支持,因此可以 mount 上;好吧,知道了这个问题,我的完美主义开始发作了,想着干净一点,把那个高版本内核卸载掉。。。然后卸载了,重启,发现直接进入了 grub 界面,连 boot 都进不去了(哭死);后来想想应该是没有设置默认 boot 项,因此把高的卸掉后,直接找不到了
9. 好吧,又是一番网络检索,无数次实验,在一篇文章中找到了解决方法,直接贴在下面了:
CentOS7启动故障 进入grub>提示符_weixin_34174422的博客-CSDN博客
# 首先确定 boot 的位置 我的在这个位置: ls (hd0,msdox1) /grub2 也有的人在这个位置,怎么寻找,大家可以看我连接得那篇帖子, ls (hd0, msdox1)/boot/grub set root=(hd0,msdos1) set prefix=(hd0,msdos1)/grub2 # 这里得 /dev/mapper/centos-root 指根分区,如果不是 lvm管理得,要用 /dev/sdx之类的 linux16 /vmlinuz-xxxx .e17.x86_64 root= /dev/mapper/centos-root intrad16 /initramfs-xxxx.e17.x86_64.img boot
10. 按照文档最后指示,要重建 grub.cfg 执行
grub2-mkconfig -o /boot/grub2/grub.cfg
命令,但是我执行后报错了,简直了。。。也不说经过了,后来也是通过 xfs_repaire -L /dev/sda1 解决的
11. 修改完这个之后,我再一次进入了 grub 界面,我以为又失败了,于是又重新执行了上面第 9 步的操作,后来没有再进入安全模式,直接进入了 gnome
12 总结一下,就是手残。。。