Linux---系统排错之如何修复和维护系统

系统引导过程概述

通电–>bios初始化–>grub2磁盘引导阶段–>grub2文件引导阶段
       –>指定boot所在分区–>启动内核,只读/挂载设备–>启动init程序进入初始化阶段

       –>启动systemd初始化进程–>取/etc/systemd/中的文件–>启动程序–>启动登陆环境  


1.进行grub磁盘引导阶段

模拟mbr引导分区数据(程序)丢失

实验步骤:
第一步:在虚拟机上:
[root@localhost ~]# dd if=/dev/zero of=/dev/vda bs=446 count=1  ##模拟mbr引导分区数据丢失
[root@localhost ~]# reboot   ##重启后发现无法启动


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

选择Add Hardware添加镜像

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



第三步:开机进入救援模式(先选最后一个Troubleshooting;然后选择第二Rescue;continue->ok->ok)


进入到一个shell


第四步:在shell里写入恢复命令

chroot /mnt/sysimage/    ##挂载系统镜像到根目录,出现NO error reported说明恢复446的分区表成功
grub2-install /dev/vda     ##启动分区所在硬盘
两次exit退出


第五步:选择虚拟硬盘启动,重新开机(将光驱启动从第一拉到最后)

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


2.文件引导阶段

grub引导文件/boot/grub2/grub.cfg丢失
实验步骤:在虚拟机上
[root@localhost ~]# rm -fr /boot/grub2/grub.cfg       ##删除文件
方法一:删除文件后本机未reboot

[root@localhost ~]# grub2-mkconfig > /boot/grub2/grub.cfg     ##将文件恢复到/boot/grub2/grub.cfg 


方法二:删除文件后本机已经重新启动

进入新的shell


grub> set root='hd0,msdos1'      ##指定boot分区
grub> linux16  /boot/vmlinuz-3.10.0-123.e17.x86_64(内核文件) ro root=/dev/vda1  ##分区设备名称
grub> initrd16 /boot/initramfs-3.10.0-123.e17.x86_64.img     ##初始化镜像文件

grub> boot         ##启动


注意:上述操作可以使系统正常启动,但是临时的,进入系统后要执行

grub2-mkconfig > /boot/grub2/grub.cfg 恢复文件后,系统才能恢复。


3.内核文件丢失  

实验步骤:在虚拟机上
方法一:删除文件后本机没有重新启动
[root@localhost Desktop]# cd /boot/
[root@localhost boot]# ls
[root@localhost boot]# rm -fr vmlinuz-3.10.0-123.el7.x86_64     ##删除内核文件

[root@localhost boot]# yum whatprovides /boot/vmlinuz-3.10.0-123.el7.x86_64   ##查找这个文件在哪个安装包里

在Computer里搜索kernel内核文件,将它拖拽到桌面上

[root@localhost ~]# cd /root/Desktop
[root@localhost Desktop]# ls
kernel-3.10.0-123.el7.x86_64.rpm
[root@localhost Desktop]# file kernel-3.10.0-123.el7.x86_64.rpm
kernel-3.10.0-123.el7.x86_64.rpm: RPM v3.0 bin i386/x86_64 kernel-3.10.0-123.el7
[root@localhost Desktop]# rpm2cpio kernel-3.10.0-123.el7.x86_64.rpm | cpio -id ##解压rpm软件包为cpio,解压到当前目录
219282 blocks

[root@localhost Desktop]# cp boot/vmlinuz-3.10.0-123.el7.x86_64 /boot/  ##复制boot下的镜像到/boot中

第一步:删除内核文件

第二步:查找删除的文件属于哪个软件包

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



方法二:删除文件后本机已经重新启动

第一步:删除内核文件,重启

第二步:开机报错,内核文件找不到

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

选择光驱启动

开机进入挽救模式;

进入一个新的shell


第三步:关机选择虚拟硬盘启动


再次进入就恢复到虚拟机的界面

4.初始化程序丢失

[root@localhost Desktop]# rm -fr /boot/initramfs-3.10-123.e17.86_64.img
实验步骤:
方法一:删除文件后本机没有重新启动

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


方法二:删除文件后本机已经重新启动

第一步:删除文件,重新启动

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

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

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

第二步:关机选择虚拟硬盘启动


注意:进入virt-manager后先将server状态更改为 force off 再将光盘驱动调到最后,启动
开机加载,说明恢复初始化程序成功


5.系统启动级别被修改

$( )和‘ ’的区别

在bash中,$( )与‘ ‘(反引号)都是用来作命令替换的。

命令替换与变量替换差不多,都是用来重组命令行的,先完成引号里的命令行,然后将其结果替换出来,再重组成新的命令行。

$( )的弊端是,并不是所有的类unix系统都支持这种方式,但反引号是肯定支持的

[root@localhost Desktop]# systemctl set-default shutdown.target  ##更改启动级别

[root@localhost Desktop]# reboot     ##重启


实验步骤:
 1.开机按上下键
 2.按“e”进入编辑模式
 3.选择内核启动行

   linux16 /vmlinuz-xxxx ro xxxxxx  5    ##添加5是表示开启图形


 4.ctrl +x     ##执行

 5.进入虚拟机

[root@localhost Desktop]# systemctl set-default graphical.target     ##开启初始的启动级别

 


阅读更多

没有更多推荐了,返回首页