Linux启动阶段Grub损坏修复

文章目录

  • 一、GRUB试验(试验环境:VMware-Centos6-基于分区)
    • (试验一)破坏GRUB第1阶段,系统无法正常启动,修复之!
            • 总结步骤:
            • 试验步骤如下:
    • (实验二)破坏GRUB第2阶段,系统无法正常启动,修复之!
          • 试验步骤如下:
    • (试验三)破坏GRUB第3阶段,系统无法正常启动,修复之!
            • 1.grub.conf文件内容及格式
            • 2.实验步骤如下
  • 二、GRUB试验(试验环境:VMware-Centos6-基于逻辑卷)
          • 试验:挂载关系文件(/etc/fstab)破坏导致修复时无法切根chroot
            • (一)修复总结:
            • (二) 试验步骤如下:
  • 三、自制Linux微系统(试验环境:Centos6,VMware)

一、GRUB试验(试验环境:VMware-Centos6-基于分区)

(试验一)破坏GRUB第1阶段,系统无法正常启动,修复之!

GRUB第1阶段在硬盘512字节MBR的前446字节的BootLoader

总结步骤:

1.进入救援模式
2.grub命令进行修复
3.重启

试验步骤如下:

1.破坏grub stage1

[root@CentOS6 ~]#dd if=/dev/zero of=/dev/sda bs=1 count=446  #80开头分区表前446全部清零
[root@CentOS6 ~]#hexdump -C /dev/sda -n 512

Linux启动阶段Grub损坏修复_第1张图片
2.模拟主机启动:重启
重启:重启后直接进入通过光盘启动
Linux启动阶段Grub损坏修复_第2张图片
3.修复:进入救援模式

bash-4.1#grub		#进入grub修复模式
grub>root (hd0,0)   #执行命令
grub>setup hd(0)	#执行命令
bash-4.1#sync 	#同步执行
bash-4.1#exit	#退出重启

Linux启动阶段Grub损坏修复_第3张图片
4.重启:正常启动

(实验二)破坏GRUB第2阶段,系统无法正常启动,修复之!

GRUB第2阶段在硬盘512字节MAR的后面

试验步骤如下:

1.破坏
[root@CentOS6 boot]#dd if=/dev/zero of=/dev/sda bs=1 count=10240 seek=512
Linux启动阶段Grub损坏修复_第4张图片
2.模拟开机:重启
3.进入救援模式:执行grub工具进行修复

bash4.1#grub
grub>root (hd0,0)
grub>setup (hd0)
grub>kernel  /vmlinuz-3.10.0-957.el7.x86_64
grub>initrd /initramfs-3.10.0-957.el7.x86_64.img
grub>boot          #直接启动,不能重启,重启后又回到原来界面,无法正常启动

4.创建/boot/grub/grub.conf 文件
登录后创建grub.conf文件可使用vim技巧编写,相比在救援模式下更方便

[root@CentOS6 grub]#vim grub.conf
default=0
timeout=5
splashimage=(hd0,0)/grub/win.xpm.gz                     #自定义开机图片
password --encrypted  $6$mf63Un9Wz7abC8QS$plEbdHMfMQ08OyZgwALCSoSUUYyV0LgeqSW1iFfTHkv.BAZ7EXeGVO1TSvpeDYBncaPfr
vDJOIOEDma6FfbMK.             #设置grub口令password magedu/password --md5 MD5密码/password  --encrypted  sha密码
title test linux     #描述,不写此条,开机起不来
root (hd0,0)
kernel /vmlinuz-2.6.32-754.el6.x86_64 root=/dev/sda2   rhgb #vim读取技巧 :r! ls /vmlinux-     /initramfs-
initrd /initramfs-2.6.32-754.el6.x86_64.img         #vim行互换技巧:ddp

4.1可对启动时进入grub添加口令
(1)生成MD5密码方式

[root@CentOS7 grub]#openssl passwd -1
Password: 
Verifying - Password: 
$1$siisB1r/$X.irtYAm3Mm21FcEV7t4e/

(2)生成sha512密码方式

[root@CentOS6 ~]#grub-crypt 
Password: 
Retype password: 
$6$mf63Un9Wz7abC8QS$plEbdHMfMQ08OyZgwALCSoSUUYyV0LgeqSW1iFfTHkv.BAZ7EXeGVO1TSvpeDYBncaPfrvDJOIOEDma6FfbMK.

4.2 自定义开机背景
图片要求分辨率大小:640x480

[root@CentOS6 data]#convert -resize 640x480 -colors 14 win.jpg win.xpm   #图片格式转换工具
[root@CentOS6 data]#rpm -qf `which convert`
ImageMagick-6.7.2.7-6.el6.x86_64
[root@CentOS6 data]#gzip win.xpm    #压缩图片

5.重启:修复完毕,正常启动

(试验三)破坏GRUB第3阶段,系统无法正常启动,修复之!

GRUB第3阶段在/boot/下文件,主要包括:
/boot/grub、/boot/grub/grub.conf #指定真正根/位置
/boot/vmlinuz-2.6.32-754.el6.x86_64
/boot/initramfs-2.6.32-754.el6.x86_64.img #标明内核文件位置

修复步骤总结:

1.chroot切根
2.生成grub文件:grub-install /dev/sda #grub交互式方式依赖grub文件存在
3.挂载光盘,拷贝vmlinuz文件
4.生成initramfs文件
5.创建grub.conf 文件

1.grub.conf文件内容及格式
# grub.conf generated by anaconda
#
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/sda2
#          initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=1      #默认启动第几个内核,0表示第一个
timeout=5 	 #设置开机选择内核timeout时间
splashimage=(hd0,0) 	#hd0:第一块硬盘;0第一个分区  /grub/splash.xpm.gz  #开机背景图片
hiddenmenu	  #默认隐藏执行过程
title  CentOS 6 (2.6.32-754.el6.x86_64)  	#启动菜单描述
        root (hd0,0) 	 #hd0:第一块硬盘;0第一个分区(df 查看/boot在/dev/sda1)
        kernel /(#实际路径/boot)vmlinuz-2.6.32-754.el6.x86_64 ro root=UUID=36b79b9b-c4e4-4111-a733-cd3b72a1f3b2 (#挂载的真正的根/;blkid查看的设备是/dev/sda2,对应挂载点就是根/)  (rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb  #图形界面 quiet #内核启动阶段,默认不显示   #内核参数)
        initrd /initramfs-2.6.32-754.el6.x86_64.img  	#只读挂载根的驱动文件

title  CentOS 8 (4.6.32-754.el6.x86_64)    #自己加的,测试重启开机显示内核选项
        root (hd0,0)
        kernel /vmlinuz-2.6.32-754.el6.x86_64 ro root=UUID=36b79b9b-c4e4-4111-a733-cd3b72a1f3b2 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM 
        initrd /initramfs-2.6.32-754.el6.x86_64.img 

Linux启动阶段Grub损坏修复_第5张图片
硬盘的第一个分区是/boot 而不是 /
Linux启动阶段Grub损坏修复_第6张图片
系统启动时执行的第一个脚本:/etc/rc.d/rc.sysinit
sysinit读取/etc/fstab 重新挂载根/

[root@CentOS6 ~]#cat /etc/rc.d/rc.sysinit|grep fstab  #sysinit 中执行/etc/fstab文件内容

Linux启动阶段Grub损坏修复_第7张图片

[root@CentOS6 boot]#cat /etc/fstab    #关于根开机挂载内容

Linux启动阶段Grub损坏修复_第8张图片

2.实验步骤如下

(1)破坏:删除/boot

[root@CentOS6 boot]#rm -rf /boot

Linux启动阶段Grub损坏修复_第9张图片
(2)模拟启动:重启
Linux启动阶段Grub损坏修复_第10张图片
(3)重启进入救援模式:
3.1切根,生成grub文件:

bash-4.1# chroot /mnt/sysimage    #切根
sh-4.1# grub-install /dev/sda

Linux启动阶段Grub损坏修复_第11张图片
3.2 挂载光盘,拷贝vmlinx文件

sh-4.1# mount /dev/sr0 /mnt
sh-4.1# cp /mnt/isolinux/vmlinz /boot

Linux启动阶段Grub损坏修复_第12张图片
3.3 创建initramfs文件

sh4.1# mkinitrd initramfs.img`uname -r`

在这里插入图片描述
3.4 创建grub.conf 文件

default=0
timeout=5
title test linux
kernel /vmlinuz root=/dev/sda2
initrd /initramfs.img

Linux启动阶段Grub损坏修复_第13张图片
4.退出重启:正常启动

注意: grub-install 执行过程出错(如按Ctrl C或设备名错误),需要删除/boot下所有文件重新执行才可以生效;错误提示如下:No suitable drive was found in the generated device map.

Linux启动阶段Grub损坏修复_第14张图片

二、GRUB试验(试验环境:VMware-Centos6-基于逻辑卷)

试验:挂载关系文件(/etc/fstab)破坏导致修复时无法切根chroot
(一)修复总结:

1.激活逻辑卷组:vgchange -ay 卷组名
2.挂载逻辑卷根:mount /dev/mapper/VolGroup-lv_root /mnt/tmp
3.重写fstab文件
6.重启,修复/boot
7.chroot且跟
8.rpm重装内核,生成内核文件:rpm -ivh 内核包 --force
9.grub-install /dev/sda生成grub文件
10.创建grub.conf

逻辑卷的grub.conf配置文件如下:

Linux启动阶段Grub损坏修复_第15张图片
fstab文件内容如下:
Linux启动阶段Grub损坏修复_第16张图片

(二) 试验步骤如下:

1.破坏:删除 /etc/fstab、 /boot
Linux启动阶段Grub损坏修复_第17张图片
2.模拟机器启动:重启
Linux启动阶段Grub损坏修复_第18张图片
3.重启修复:进入救援模式
查看挂载关系,此时显示没有挂载/ 、/boot,可以查看到有两个逻辑卷
Linux启动阶段Grub损坏修复_第19张图片
查看逻辑卷状态:Not available
Linux启动阶段Grub损坏修复_第20张图片
4.激活并挂载逻辑卷

bash-4.1# vgchange -ay VolGroup
bash-4.1# mkdir /mnt/tmp
bash-4.1# mount /dev/mapper/VolGroup-lv_root /mnt/tmp
bash-4.1# vim /mnt/tmp/etc/fstab        #我这里没有lv_home逻辑卷
/dev/VolGroup/lv_root / ext4 defaults 0 0
/dev/VolGroup/lv_swap swap swap defaults 0 0
/dev/sda1 /boot ext4 defaults 0 0

在这里插入图片描述

逻辑卷文件系统可以识别:
Linux启动阶段Grub损坏修复_第21张图片

挂载逻辑卷根:
在这里插入图片描述
重写/etc/fstab文件,重启后再次进入救援模式可挂载根;后续步骤按删/boot 进行修复
Linux启动阶段Grub损坏修复_第22张图片
5.重启,进入救援,修复/boot
通过安装内核包方式快速修复/boot(生成包括vmlinuz、initramfs文件)
注意:进入救援,若先挂载再切根,执行rpm后会提示:命令未找到;
必须先切根再挂载,才可以正常执行!

bash-4.1#chroot /mnt/sysimages
sh-4.1#rpm -ivh /mnt/Packages/kernel-2.6.32-754.el6.x86_64.rpm --force

Linux启动阶段Grub损坏修复_第23张图片
6.生成grub

grub-install /dev/sda

Linux启动阶段Grub损坏修复_第24张图片
7.创建/boot/grub/grub.conf

default=0
timeout=5
title linux
kernel /vmlinuz-2.6.32-754.el6.x86_64
initrd /initramfs-2.6.32-754.el6.x86_64.img   #由rpm生成的内核文件读入

Linux启动阶段Grub损坏修复_第25张图片
8.重启

三、自制Linux微系统(试验环境:Centos6,VMware)

1.centos6中添加磁盘
[root@CentOS6 ~]#echo ‘- - -’ > /sys/class/scsi_host/host2/scan
2.分区
[root@CentOS6 ~]#fdisk /dev/sdb
Linux启动阶段Grub损坏修复_第26张图片
3创建文件系统
[root@CentOS6 ~]#mkfs.ext4 /dev/sdb1
[root@CentOS6 ~]#mkfs.ext4 /dev/sdb2
Linux启动阶段Grub损坏修复_第27张图片
4.创建grub各个阶段:指定grub1,1.5阶段以及2阶段安装路径,2阶段安装在/dev/sdb1分区上,因此需要先挂载分区
[root@CentOS6 ~]#mkdir /mnt/boot
[root@CentOS6 ~]#mount /dev/sdb1 /mnt/boot
[root@CentOS6 ~]#grub-install --root-directory=/mnt /dev/sdb
Linux启动阶段Grub损坏修复_第28张图片
5.拷贝内核文件:vmlinuz、 initramfs、grub.conf
在这里插入图片描述
注意: kernel后面必须指定 init启动寻找路径:
Linux启动阶段Grub损坏修复_第29张图片
6.挂载根分区,创建根目录结构
Linux启动阶段Grub损坏修复_第30张图片
7.拷贝命令,驱动:

[root@CentOS6 data]#bash copycmd.sh  #拷贝命令脚本
[root@CentOS6 data]#ethtool -i eth0  #查看网卡驱动名
[root@CentOS6 data]#modinfo e1000 #查看网卡驱动位置
[root@CentOS6 data]#cp /lib/modules/2.6.32-754.el6.x86_64/kernel/drivers/net/e1000/e1000.ko /mnt/root/lib  #拷贝网卡驱动

8.新建虚拟机,删除原有硬盘,添加自制Linux硬盘.vmdk文件

删除E:\Virtual Machines\CentOS 6 64 位 (2) \CentOS 6 64 位 (2).vmdk;
拷贝E:\Virtual Machines\CentOS6.10\ CentOS6.10-5.vmdk  到E:\Virtual Machines\CentOS 6 64 位 (2) \目录下;
打开虚拟机,选择磁盘路径E:\Virtual Machines\CentOS 6 64 位 (2) \ CentOS6.10-5.vmdk ,启动虚拟机:成功启动

Linux启动阶段Grub损坏修复_第31张图片

测试:加载网卡,ping另一同网段主机:OK

insmod /lib/e1000.ko
ifconfig eth0 192.168.37.107/24
ping  -c 3 192.168.37.100

Linux启动阶段Grub损坏修复_第32张图片

你可能感兴趣的:(linux)