26.深度解析Linux系统故障模拟及修复方法(MBR异常、引导故障丢失、内核文件丢失、初始化镜像文件丢失、/boot分区丢失、启动级别init异常)

Linux系统的配置文件缺失,或核心文件被篡改(例如:启动级别被篡改),都会导致系统启动的不成功。

为了解决系统启动过程中出现的问题,我们先来了解系统引导启动的过程:

Linux的系统启动过程大致为:

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

系统主要故障的解决:

1.grub2磁盘引导异常(MBR异常):

MBR:

            作用:是为了记录/boot目标所在分区位置

            地址:磁盘的0磁道1扇区的前446字节。

注意:磁盘的0磁道1扇区的前512字节记录的信息如下

512   =       446       +      64       +      2
         MBR(主引导记录)  mpt(主分区表)   55aa(硬盘有效性标志)
                      ##一个分区占用16,所以最多有4个     

故障模拟:

dd if=/dev/zero of=/dev/sda bs=446 count=1      ##填充MBR,使MBR失效

 

注意:其中 /dev/sda1后面的*是自举功能标识,有代表具有自举功能

重启,可以看到系统停止在下面这样的界面:

故障解决方法:

如果是虚拟机,我们可以进入虚拟机管理器,给系统添加有系统镜像的虚拟光盘,并设定优先从光盘启动

如果是真实主机,我们可以通过bios从拥有系统镜像的光盘或者U盘启动

进入挽救模式后,配置安装MBR,然后虚拟机调整优先从磁盘启动或真机拔下U盘

##添加带有系统镜像的虚拟关

##设置优先从光盘启动

 ##选择第三个Troubleshooting,修理故障

 ##选择第2个Rescue a RedHat Enterprise linux system

 

1          ##键入1
           ##回车
chroot /mnt/sysimage/   ##进入shell
df                      
grub2-install /dev/sda   ##安装grub2
exit
exit

 

 ##配置完成后,恢复从磁盘启动

##可以看到问题被成功解决,系统恢复正常

2.grub2文件引导异常(引导文件丢失):

问题模拟:为了模拟故障环境,我们删除grub2引导文件:

即删除/boot/gurb2/grub.cfg

我们首先查看系统的挂载情况

可以看到系统的挂载在 / 下的硬盘为/dev/sda3,挂载在/boot下的硬盘为/dev/sda1(也可以进入挽救模式查看挂载情况)

重启系统,可以看到异常,重启不了

解决方法:

如果发现引导文件丢失时,还没有关机,我们可以直接用命令新建文件

grub2-mkconfig > /boot/grub2/grub.cfg

如果已经重启,进入报错界面,我们可以键入命令

set root='hd0,msdos1'			##此位置是不固定的,位置指定boot所在分区
linux16 /vmlinz-3.10.0-123.el7.x86_64 ro root=/dev/sda3		##写根分区挂载设备名称
initrd16 /initramfs-3.10.0-123.el7.x86_64.img
boot

##注意:文件名比较长,可以tab键补齐

配置完后,可以重启成功,但是这只是临时的,再次启动还是会异常无法启动,所以需要用命令生成引导文件

grub2-mkconfig > /boot/grub2/grub.cfg

配置完后,重启能够继续正常启动。

至此,就可以解决由于引导文件丢失所引起的系统故障。

3.内核文件丢失:

首先我们看一下/boot下有哪些文件:

系统启动异常模拟:我们删除/boot下的内核文件,模拟内核文件丢失的情况:

重启电脑,可以看到系统,可以看到系统异常,无法正常启动:

解决方法:

首先,给系统插入一个与系统版本一致的镜像,然后我们从镜像启动,进入挽救模式:

进入挽救模式后,我们做以下操作:分布键入以下命令:

chroot  /mnt/sysimage
mkdir /rhel7.0                 ##新建一个目录
mount /dev/sr0 /rhel7.0/       ##把完整的系统镜像挂载到该目录下
cd /rhel7.0/Packages           ##打开系统镜像中的安装包 
cp kernel-3.10.0-514.el7.x86_64.rpm   /mnt/   ##将我们需要的安装包拷贝到/mnt下
cd /mnt/
rpm2cpio kernel-3.10.0-514.el7.x86_64.rpm | cpio -id      ##解开内核对应的安装包
cd boot
cp vmlinuz-3.10.0-514.el7.x86_64  /boot     ##将解开的内核安装包中对应的boot文件复制到我们原系统的/boot下 ,以填补原来/boot文件的缺失
exit      
exit

 

恢复从硬盘启动,可以看到系统正常启动:

开机后我们可以看到我们之前删除的文件重新出现在/boot下:

4.系统初始化镜像文件丢失

系统启动异常模拟:

我们删除/boot下的系统初始化镜像文件

重启系统,我们可以看到系统的异常,系统初始化镜像文件找不到

解决方法:

依旧是给系统插入一个带有相同版本系统镜像的光驱,然后进入挽救模式:

进入挽救模式后,我们可以键入以下命令:

chroot /mnt/sysimage
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)   ##重建系统初始化镜像文件
cd /boot/          ##打开系统配置目录
ls                 ##查看配置文件
exit
exit

配置后关闭系统,重新选择通过硬盘启动:

至此,该问题就完全得到了解决。

注意:$(uname -r)  是一个变量,用来指代当前系统的内核版本

5./boot分区丢失

模拟问题:我们删除/boot分区中的信息,以模拟/boot分区丢失的情况:

删除分区后我们重启电脑,可以看到系统异常,无法正常启动:

解决方案:

给系统插入一个载有与系统版本一致的系统镜像的光驱,并使系统从光驱启动:

进入挽救模式后,一次键入以下命令:

1                ##输入1,选择continue
[Enter]          ##再回车
chroot /mnt/sysimage    ##切换到真实根目录下
mkdir   /boot   ##新建/boot
mkdir  /rhel7.3   ##新建镜像挂载目录
mount /dev/sr0 /rhel7.3/     ##挂载系统镜像到我们新建的目录下
cp /rhel7.3/Packages/kernel-3.10.0-514.el7.x87_64.rpm  /mnt/    ##将内核的安装包复制到/mnt下
cd /mnt/       ##切换到/mnt
rpm -ihv kernel-3.10.0-514.el7.x87_64.rpm  --force       ##强制安装
grub2-mkconfig > /boot/grub2/grub.cfg           ##新建系统引导文件
exit
exit

执行完上面的命令后,我们切换系统从硬盘启动,就可以正常启动系统

6.启动级别init异常

模拟问题:

我们将启动级别改为重启,这样开机时就不会正常进入系统,而是处于不断的开机自启:

ln  -s  /lib/systemd/system/reboot.target   /etc/systemd/system/default.target       ##更改重启为新开机级别

配置完模拟问题后,我们重启系统,可以看到系统一直在不断自启,无法正常进入系统。

解决方案:

在进入上面的界面后,我们按上下键,避免自动直接进入系统,而后按e进入可编辑模式,在linux16 /。。。后面加上启动级别为 5    即图像化系统启动界面   就可以正常进入系统。

在进入系统后我们重新设定系统的启动级别为级别5

systemctl set-default graphical.target         ##设置系统的默认启动级别为5  

至此,启动级别异常导致的系统异常就解决了。

可以看到,系统启动异常的原因就是将重启链接到了系统默认启动级别上。

注意:在我们排错时,要善使假设法,假设哪里不对,一步一步来,从最简单的原因排起,例如系统突然网络异常,那你首先就得看看你的网线是不是没插好,而不是上来就去动配置文件,贸动就有可能错上加错!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值