基于linux下的系统排错

一、系统引导开启过程

从上至下:

  • 通电
  • biso初始化(BIOS是基本输入输出系统,bios初始化实际上是执行开机电自检和系统启动自举程序)
  • grub2磁盘引导(硬盘主引导记录MBR和分区表DPT以及磁盘的有效标志。其中,主引导检查分区表是否正确以及确定哪个分区为引导分区,并在程序结束时把该分区的启动程序调入内存加以执行)
  • grub2文件引导阶段
  • 指定boot所在分区
  • 加载内核,只读挂载在 / 设备
  • 启动该init程序进入初始化阶段
  • 启动systemd初始化进程
  • 读取 /etc/systemd/ 中的文件
  • 启动程序
  • 启动登陆环境

二、系统排错及相应解决措施

1、grub2磁盘引导阶段

假设,我们在虚拟机中执行下面操作让磁盘引导损坏:
   dd if=/dev/zero of=/dev/vda bs=446 count=1 
   reboot  //重启虚拟机

这里写图片描述
重启后会出现如下报错:
这里写图片描述
解决措施:
(1)首先,准备好虚拟机对应的版本镜像(以7.0的server虚拟机为例);
(2)在真机中以root用户打开虚拟机管理:
virt-manager
这里写图片描述
(3)添加光驱设备;
这里写图片描述
这里写图片描述
(4)打开虚拟机,进入挽救模式;
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
(5)通过挽救模式,进入系统真实环境;

    chroot /mnt/sysimage 
    grub2-install /dev/vda
    vim /etc/sysconfig/selinux  //修改selinux为enforcing,为了可以节省加载时间,这步不是必须的
    exit
    exit

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
(6)关闭虚拟机,并将光驱驱动改为硬盘驱动;
这里写图片描述
(7)打开虚拟机,正常启动;


2、grub文件引导阶段

假设,我们在虚拟机中执行下面操作让grub文件丢失:
  rm -fr /boot/grub2/grub.cfg

A . 若此时虚拟机未重启,直接执行命令生成文件即可:
grub2-mkconfig > /boot/grub2/grub.cfg
这里写图片描述
B . 若已经执行了reboot操作后,则开机重启后需要手动引导;
这里写图片描述
输入内容:

set root='hd0,msdos1'  //hd0,msdos1表示第一个磁盘的第一个分区
linux16 /boot/vmlinuz-3.10.0-123.e17.x86_64 ro root=/dev/vda1
initrd16 /boot/initramfs-3.10.0-123.e17.x86_64.img
boot    //引导完成,启动系统

这里写图片描述
当虚拟机正常启动后,执行命令重新生成grub2.cfg文件即可,下次开机后可正常启动:
grub2-mkconfig > /boot/grub2/grub.cfg
这里写图片描述


3、内核引导阶段

假设,我们在虚拟机中执行下面操作让内核文件丢失:
  rm -fr /boot/grub2/grub.cfg

思想:将内核文件的安装包拆解,找到内核文件,然后将内核文件复制到/boot/;

A . 当虚拟机并未重启时:

yum whatprovides /boot/vmlinuz-3.10.0-123.e17.x88_64 //查找内核文件所在的安装包
将光驱的packages的kenel-3.10.0-123.e17.x88_64.rpm安装包复制到桌面上;
rpm2cpio kernel-3.10.0-123.e17.x88_64.rpm | cpio -id  //将安装包拆解,拆解后的文件在桌面上
cp boot/vmlinuz-3.10.0-123.e17.x88_64 /boot/  //将boot目录下的内核文件复制到根目录/boot/下

这里写图片描述
这里写图片描述
这里写图片描述
B . 当虚拟机reboot之后,会出现如下图的报错;
这里写图片描述
进入挽救模式:

df  //当前光驱挂载点 /dev/sr0  -> /run/install/rcpo
         硬盘挂载在  /dev/vda  -> /mnt/sysimage
cd /run/install/repo/Packages
cp  kenel-3.10.0-123.e17.x88_64.rpm /mnt/sysimage/mnt
chroot /mnt/sysimage   //从挽救环境进入系统真实环境
cd /mnt  //进入/mnt下
rpm2cpio kernel-3.10.0-123.e17.x88_64.rpm | cpio -id  //将安装包拆解
cp boot/vmlinuz-3.10.0-123.e17.x88_64 /boot/
exit  //退出系统真实环境
exit  //退出挽救环境

这里写图片描述
这里写图片描述


4、init程序初始化阶段

假设,我们在虚拟机中执行下面操作让init程序初始化文件丢失:
  rm -fr /boot/initramfs-3.10.0-123.e17.x88_64.img

A . 若虚拟机未重启,执行命令重新生成文件即可:
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r) //uname -r 查看内核版本号

$() == `` //当前环境是等价,两个有区别,$()兼容性较好

这里写图片描述
B . 若虚拟机reboot之后,会出现如下提示:
这里写图片描述
这里写图片描述
进入挽救环境:

sh-4.2#chroot /mnt/sysimage  //切换至真实的系统环境
bash-4.2#mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)  //
cat:write error: Broken pipe
bash-4.2#exit

这里写图片描述


5、启动级别发生错误

启动级别:0-6
0 表示关机
1 表示单用户更改密码
2-4 无图形
5 表示图形开启
6 表示重启

假设,我们在虚拟机中执行下面操作让开机过程中发生错误:
  systemctl set-default shutdown.target
  reboot

这里写图片描述
会出现如下报错:
这里写图片描述

解决办法:

1.在选择进入系统的界面按上下键,'e'进入编辑模式,
2.在第一个linux /vmlinuz*****末尾加启定级别 53.ctrl + x 
4.开机后执行命令:
  systemctl set-default graphical.target

这里写图片描述
这里写图片描述

猜你喜欢

转载自blog.csdn.net/wangkana/article/details/80349955