继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

基于linux下的系统排错

德玛西亚99
关注TA
已关注
手记 410
粉丝 92
获赞 559

一、系统引导开启过程

从上至下:

  • 通电

  • 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  //重启虚拟机123

这里写图片描述
重启后会出现如下报错:
这里写图片描述
解决措施:
(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
    exit12345

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


2、grub文件引导阶段

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

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    //引导完成,启动系统1234

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


3、内核引导阶段

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

思想:将内核文件的安装包拆解,找到内核文件,然后将内核文件复制到/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/下1234

这里写图片描述
这里写图片描述
这里写图片描述
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  //退出挽救环境12345678910

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


4、init程序初始化阶段

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

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

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

这里写图片描述
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#exit1234

这里写图片描述


5、启动级别发生错误

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

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

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

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

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

原文出处

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP