基于linux下的系统排错

###################1.系统引导过程#####################################################3

通电—->bios初始化—–>grub2磁盘引导阶段—>grub2文件引导阶段—->指定boot所在分区—->启动内核,只读挂载/设备—->启动init程序进入初始化阶段—->启动systemd初始化进程—->读取/etc/systemd/中的文件—–>启动程序—->启动登录环境

基于linux下的系统排错

#############################2.BIOS初始化######################################################

基于linux下的系统排错

############################3.各引导阶段出现问题及修复#############################################3

##########1.grup磁盘引导阶段出错

在虚拟机上:

[[email protected] ~]# dd if=/dev/zero of=/dev/vda bs=446 count=1  ##模拟mbr引导分区数据丢失

基于linux下的系统排错

如果还没有重启的轻况下还可以直接命令修复,若reboot了之后会发现在引导过程中会出错,根本不能进入系统。

这是因为当后64字节的引导寻找磁盘的mbr丢失后,指针读完446字节后,不知道该干什么,只能原地待命。

基于linux下的系统排错

那么这种情况下该如何操作呢?

步骤:

(1)在真机上virt-manager进入虚拟机管理界面(先将虚拟机force off);

基于linux下的系统排错

(2)选择类似于灯泡的图标,点击Add Hardware选择光盘类型(选择光驱)并添加镜像;

      基于linux下的系统排错

      基于linux下的系统排错

(3)选择使用光驱启动(将光驱调至最前)

      基于linux下的系统排错

(4)开机进入救援模式

     先选择第三个Troubleshooting; 然后选择第二个Rescue;continue->ok->ok

     基于linux下的系统排错

     基于linux下的系统排错

     基于linux下的系统排错

     提示告诉我们真实的系统挂载在/mntsysimage上;

    基于linux下的系统排错

    再次提示系统挂载的路径。点OK;

    基于linux下的系统排错

    第3次提示系统挂载路径说明其重要性;

(5)然后我们获得了挽救系统的一个新shell。

基于linux下的系统排错

(6)我们只要切换到真实系统,执行修复mbr的命令即可;

        df #查看根挂载的位置

chroot /mnt/sysimage #切换到系统真实存在环境

grub2-install /dev/vda #安装磁盘引导程序

vim /etc/sysconfig/selinux 修改为:disabled #关闭selinux,否则启动时间太长

exit # 两次退出是因为在转到自己的根下时重新打开了一个shell

exit

基于linux下的系统排错

出现NO error reported说明恢复446的分区表成功

(7)关闭虚拟机退出挽救模式进行磁盘引导 ;(去掉光驱或者将光驱启动放到最后)

基于linux下的系统排错

(8)重新开启虚拟机,并且启动成功;

一定要保证虚拟机在Force off的状态下更改硬盘或光驱的启动方式,否则会一直循环之前的操作。


###############2.grub文件引导阶段出错(引导文件误删)

/boot/grub2/grub.cfg这个文件记录了grub引导的记录,这个文件丢失后系统也会出错无法启动。

在虚拟机执行:

[[email protected] ~]# rm -fr /boot/grub2/grub.cfg       ##删除引导文件

解救方法:(1)虚拟机这台主机没有reboot时恢复

grub2-mkconfig > /boot/grub2/grub.cfg     ##将文件恢复到/boot/grub2/grub.cfg 

基于linux下的系统排错

(2)删除文件后虚拟机这台主机已经重新启动后恢复

在这种情况下我们会发现虚拟机系统又挂了,这时我们就需要手动引导grub。

1:打开虚拟机,进入shell;

基于linux下的系统排错

2:在shell中执行下列命令;

set root='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  #引导系统初始化

grub> boot          #若为reboot还会进入此页面

基于linux下的系统排错

3:上述操作可以使系统正常启动,但是临时的,如果不想每次都手动引导,需要恢复自动引导文件;

grub2-mkconfig > /boot/grub2/grub.cfg #恢复自动引导文件

ls /boot/grub2 #查看有无开机引导程序

基于linux下的系统排错


###########3.系统内核文件丢失

(1)在虚拟机上删除文件后本机没有重新启动

    1:删除内核文件

    基于linux下的系统排错

   2:查找删除的文件属于哪个软件包

    基于linux下的系统排错

   3:在Computer里搜索kernel内核文件,将它拖拽到桌面上,解压内核软件包,将删除的文件复制到/boot下。恢复文件后虚拟       机可以正常使用

     基于linux下的系统排错


(2)删除文件后本机已经重新启动

    1:删除内核文件,重启

    基于linux下的系统排错

   2:开机报错,内核文件找不到

      基于linux下的系统排错

   3:将虚拟机servser状态更改为Force off;

          基于linux下的系统排错

   4:选择光驱启动

         基于linux下的系统排错

  5:开机进入挽救模式;分别选第三个和第二个选项,和之前磁盘引导相同;不在赘述了

   基于linux下的系统排错

   基于linux下的系统排错

    6.进入一个新的shell

           df

cd /run/install/repo/

cd /Packages

cp kernel-3.10.0-123.e17.x86_64.rpm /mnt/sysimage/mnt

chroot /mnt/sysimage

cd /mnt

rpm2cpio kernel-3.10.0-123.e17.x86_64.rpm | cpio -id

cp boot/vmlinuz-3.10.0-123.x86_64 /boot/

两次exit

基于linux下的系统排错

  7:关机选择虚拟硬盘启动

      基于linux下的系统排错

#########4.系统初始化文件丢失

 rm -fr /boot/initramfs-3.10-123.e17.86_64.img
(1)删除文件后本机没有重新启动

[[email protected] Desktop]# mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)   ##uname -r  显示内核版本名

基于linux下的系统排错

(2)删除文件后本机已经重新启动

   真机上: virt-manager—->server—->关闭server—>Boot options—>添加>光驱—>选择镜像路径—>将添加的光驱放到第一位                           —>进入拯救界面 选择第三行—->选择第二行—>contine–>ok—>ok–>进入一个shell(不赘述了)

  1:删除文件,重新启动

      基于linux下的系统排错

  2:开机报错,初始化文件找不到;

          基于linux下的系统排错

   3:将虚拟机server状态更改为Force off;选择光驱启动

          基于linux下的系统排错

  4:进入挽救模式;进入新的shell;

      chroot /mnt/sysimage

mkinitrd /boot/initramfs-$(uname -r).img $(uname -r) (uname -r查看内核版本号)

    基于linux下的系统排错

    基于linux下的系统排错


   (5)开机加载,说明恢复初始化程序成功

########5.启动级别发生错误

系统启动的几种级别: 
0———–> poweroff.target 
1———–> resucue.target 
2———–> multi-user.target 
3———–> multi-user.target 
4———–> multi-user.target 
5———–> grapical.target 
6———–> reboot.target

在虚拟机中: 
systemctl set-default shutdown.target ##更改启动级别 
然后重启会发生错误。

基于linux下的系统排错

可以看到提示    移除了旧链接,创建新的链接。到/usr/lib/systemd/system/shutdown.target

基于linux下的系统排错

在真机中: 
光盘启动虚拟机: 

在系统启动时,开机界面按上下键,按“e”进入编辑模式,自定义启动级别。

基于linux下的系统排错

按e后进入到编辑模式,往下翻到linux16这一行,在最后添加 5

基于linux下的系统排错

按ctrl+x 执行,系统正常进入,编辑运行级别为graphical.target


基于linux下的系统排错

系统就修复好了。