系统在启动时会因为各种各样的问题无法启动,以下是常见的几种导致无法启动的问题及解决方式,以虚拟机为例。
1.忘记root用户密码
如果忘记普通用户密码可以使用root用户登陆,修改普通用户密码,root用户修改普通用户的密码不需要原密码。可是忘记root用户密码就不能用普通用户修改root用户密码,因为普通用户在修改root用户密码是需要原密码的。这时就可以使用以下方式修改root用户密码,重新启动电脑,当其出现以下界面,按上下键使其停留在该界面:
按“e“键进入编辑界面:
找到上图中划线的这行,从后向前删除到ro,并如上图编辑。编辑完成之后按Ctrl+x
,然后等待以下界面的出现:
输入chroot /sysroot/
进入真实的/系统,用passwd
命令修改超级用户密码。创建/.autorlabel
这个文件,如果selinux处于Disabled状态时可以不创建该文件。两次退出后就可以登陆系统了。退出可以输入两次exit或者按两次Ctrl+D
键。
2./etc/fstab文件所引起的问题
给/etc/fstab
文件中写入一个不存在设备将其挂载:
系统在启动时找不到/dev/mapper/westosdata
这个设备,所以会出现以下问题:
此时只要静静等待,直到出现以下界面让用户输入root用户的密码,输入密码后就会编辑/etc/fstab
这个文件:
将引起错误的内容注释或者删除:
然后两次退出,可以输入两次exit
退出或者按两次Ctrl+D
退出。系统就可以开启了。
3.grub磁盘引导阶段
mbr 的作用是为了记录 /boot
目录所在分区位置磁盘的 0 磁道 1 扇区的前 446 字节,如果mbr出现问题,系统在启动时无法找到boot分区,系统也无法启动。
可以使用fdisk -l命令查看boot分区挂载在哪个分区下,如下图“*
“所在分区即boot分区:
mbr在boot所挂载的分区的设备vda前446个字节,可以使用以下命令将vda前446个字节覆盖掉:
[root@localhost ~]# dd if=/dev/zero of=/dev/vda bs=446 count=1
重启系统之后就会出现以下问题:
如果是上述的这种问题,从磁盘已经无法启动,所以必须从其它位置启动。我给虚拟机添加一块光驱,使系统从光盘启动。
关闭虚拟机,在真实的物理机中输入virt-manager
进入虚拟机管理界面,如下图:
点击上图中左上角的小灯泡,然后点击Add Hardware
,出现以下界面:
加入虚拟机的镜像,并选择存储为光盘,如上图,点击Finish
完成光盘的添加。出现以下界面:
将右边的光盘调整到第一位,使其从光盘启动,点击Apply
应用。再次启动虚拟机出现以下界面,通过上下键选择第三个:
选择第二个,进入挽救模式:
点击Continue继续:
下来的两个界面告诉使用者真实的系统挂载在/mnt/sysimage/
下,使用chroot /mnt/sysimage
命令进入真实的系统:
执行chroot /mnt/sysimage
命令进入真实的/系统进行操作,执行grub2-install
命令将mbr恢复:
两次退出之后,关闭虚拟机,将光盘调到下面,使其从磁盘启动:
点击Apply之后开启虚拟机就可以启动系统了。
4.grub 文件引导阶段
/boot/grub2/grub.cfg
指定 /boot
分区位置,加载内核和启动系统初始化进程。如果该文件丢失系统启动时就无法找到boot分区的位置,无法加载内核和初始化进程。所以必须手动引导。
在创建虚拟机时,如果将boot分区独立出来,使用df命令查看就会有boot分区的挂载信息,如下图,/下挂载在sda10下,boot分区下挂载的是sdb8分区,boot和/不在同一分区下,相互独立:
如果boot分区没有独立,df
就没有boot的挂载信息,此时boot包含在/下,/所在的分区就是boot所在分区,如下图:
使用以下命令删除引导文件:
[root@localhost ~]# rm -fr /boot/grub2/grub.cfg
再次开机时就会停止:
这时就要手动引导系统开启,如上图。
set root="hd0,msdos1"
指定boot所在分区,其中的msdos*
不是固定的,boot在第几块分区,此处写几。如果boot分区没有独立,则此处写/所在分区。我的boot分区没有独立,所以此处为/所在分区。
第二行指定所加载的内核,如果指定的是/分区,此处就要写/boot/…,如果指定的是boot分区就可以直接写加载的内核,不需要再加/boot/。
第三行指定初始化镜像文件。
第四行boot启动之后系统就可以启动了。
在启动之后哦执行以下命令恢复grub.cfg文件,否则每次开机都要手动引导:
[root@localhost ~]# grub2-mkconfig > /boot/grub2/grub.cfg
5.内核加载文件丢失
在/boot/目录下存在一个vmlinuz-3.10.0-123.el7.x86_64内核加载文件,系统启动时会加载该文件,如果该文件丢失,系统就无法启动。
使用下面的命令删掉该文件:
[root@localhost ~]# rm -fr /boot/vmlinuz-3.10.0-123.el7.x86_64
启动系统时就会出现下面的问题:
这是因为在加载内核时找不到该文件。
要启动系统就要找回这个文件,但磁盘中已经没有了该文件,所以需要从别的地方拷贝该文件到磁盘的/boot/。让虚拟机从光盘启动,进入挽救模式:
chroot /mnt/sysimage
进入真实的/系统,mount /dev/sr0 /test
将光盘挂载到/test
下,在/test/Packages/目录下有一个kernel文件,如上图,将该文件拷贝到/mnt/下,使用rpm2cpio
命令将kernel文件解包之后出现一个boot目录,该目录下就有了vmlinuz内核加载文件,将该文件拷贝到/boot/目录下。现在就可以从磁盘启动系统了。
6.初始化镜像文件丢失
在/boot/目录下有一个initramfs-3.10.0-123.el7.x86_64.img初始化镜像文件,在系统启动时加载该文件初始化进程,如果该文件丢失系统也无法启动。
如果一不小心将该文件删除:
[root@localhost ~]# rm -fr /boot/initramfs-3.10.0-123.el7.x86_64.img
在没有关机的情况下可以使用以下命令恢复该文件:
[root@localhost ~]#mkintrd /boot/initramfs-$(uname -r).img $(uname -r)
uname -r
命令查看内核版本。$()中的内容先执行。
如果在删掉该文件之后重启了系统,就会出现以下问题:
此时就可以进入挽救模式,执行mkinitrd命令恢复该文件,如下图: