linux 更改 引导分区,Linux系统引导过程及引导修复

0.Linux系统引导过程:

1.通电

2.bios初始化

3.磁盘引导阶段

4.grub2文件引导程序

5.内核加载

6.系统初始化镜像

7.系统启动级别

8.超级用户密码

以下内容是针对各过程会出现的问题及提出的解决方案

1.通电

如果没有通电,根本就无法开机,所以需要去检查电源,没电买电就行了,这和系统本身没有关系

2.bios初始化

对硬件进行检测,初始化硬件时钟(内存、硬盘等硬件设备没插好,会发出蜂鸣声报警)

bios是一个写入到硬件(主板)上的一个软件程序,在开机时,计算机系统主动执行的第一个程序,bios会依据使用者的设定去取得能开机的硬盘,并且到该硬盘里面去读取第一个扇区的mbr位置

3.磁盘引导阶段

主引导记录(mbr):所在位置0磁道1扇区,硬盘容量446byte放置最基本的开机管理程序,开机管理程序目的是加载核心文件

mbr作用:记录grub2引导文件的位置,读取这个文件以后,这个文件里面记录了/boot分区的位置并且指定在启动时要读取的文件

当mbr数据丢失,系统会因为找不到启动分区而停止启动

如何知道mbr在系统哪块磁盘里面?

执行 fdisk -l 命令 ,* 在哪一个分区上,这个分区所在的设备上面就有mbr

bc8fb498e580b60f4a1794ed050e73f5.png

问题模拟:

系统磁盘/dev/nvme0n1

dd if=/dev/zero of=/dev/nvme0n1 bs=446 count=1 清空系统dev/nvme0n1上的mbr数据

恢复方式:

用光盘进入系统挽救模式 :

在系统安装界面选择Troubleshooting系统排错选项,进入Troubleshooting排错界面,选择系统挽救模式

a703c3187d6e4a8276277a70d0902209.png

进入挽救模式环境,如果想要还原根目录,需要将你的系统挂载到/mnt/sysimage目录下

显示四个选项:继续、只读挂载、跳到一个shell、退出重启,这里我们选择继续

ab470b2b6b5cc0ca4f8188bb704a0f87.png

执行chroot /mnt/sysimage命令,还原根目录内容,再执行grub2-install /dev/nvme0n1命令,恢复磁盘的文件引导程序,之后,执行两次exit命令退出,开启系统选择硬盘驱动系统就可以开启了

219e8f90fea20552ca5f74e98894f076.png

bb551917e32aa1b7f2cbb9d6b79b0677.png

4.grub2文件引导

grub2引导文件分别在/boot/grub2/grub.cfg 、/boot/loader/entries/xxxxxxxxx.conf两个文件中

这两个文件里记录了系统启动过程中的一系列文件,开机时等待5秒,标题设定,

第一个做的事:设定你启动的根等于系统第一块硬盘的第一个分区(/boot分区),指定这个分区的目的是下一步要读取这个分区里的资源:内核镜像、系统初始化镜像,读取了这些文件以后,才能完成系统初始化过程

rhel8中:

grub2.cfg文件只指定了根等于系统第一块硬盘的第一个分区(/boot分区)

/boot/loader/entries/xxxxxxxxx.conf文件里有系统下一步启动要读取到的资源

d1bb28827c16c59f39488fb6e6cf249d.png

e80568227523ae7f37405eb67f2b76fd.png

3df35929ca2528fb4dad605df44bf38f.png

1c95a904124f2f180e7f967bd9b02488.png

模拟问题:

rm -fr /boot/loader/entries/*

修复:

kerne-install add 内核版本号 内核镜像

kernel-install add $(uname -r) /lib/modules/$(uname -r)/vmlinuz

手动引导

set root='hd0,msdos1'

linux /vmlinuz-3.10.0-957.el7.x86_64 ro root=/dev/nvme0n1p3

initrd /initramfs-4.18.0-80.el8.x86_64.img

boot

删除系统启动时需要的grub2引导文件

7f88e72a5dfa6b2ba56d86d772d57c58.png

重启系统,出现如下界面,需要手动引导

指定启动的根等于系统第一块硬盘的第一个分区(set root=‘hd0,msdos1’),

内核镜像:加载内核版本到根分区,根目录的设备名称和你系统中的一致,

系统初始化镜像,

开启(boot)

cf72cafe4caeb9f6c12c44f6ad4f3e1a.png

开启后,这次手动引导并没有从根本上解决问题,当你下次开启系统仍需要手动引导

执行kernel-install add $(uname -r) /lib/modules/$(uname -r)/vmlinuz命令将需要加载的文件永久记忆在系统中

$(uname -r) 表示内核版本号

4d56d626ff292ac43644a812663e650c.png如果损毁了这两个文件后,没有重启,在命令行输入这条命令就可以恢复kernel-install add $(uname -r) /lib/modules/$(uname -r)/vmlinuz

如果重启了,也可以用光盘驱动进入挽救模式环境下直接执行这条命令对grub2文件进行恢复

若是grub.cfg文件损毁,在开启后需要执行grub2-mkconifg > /boot/grub2/grub.cfg命令在系统中永久恢复

5.内核加载

内核加载所需要读取的文件:

/boot/vmlinuz-$(uname -r)

加载内核作用:

系统初始化硬件设备

只读挂载/设备,为下一步系统初始化做准备,因为/设备挂载后才可以读取里面的数据,才能去加载系统里面的服务,去对我们的服务进行初始化

问题出现:

rm -fr /boot/vmlinuz-$(uname -r) ## 系统会因找不到这个文件而引导不起来

0db703509e435cc123f934345c1f29a8.png

恢复: 重装内核

用光盘驱动进入到挽救模式

44bd67e0d4995cf5e5a59806686219a9.png

chroot /mnt/sysimage ## 得到一个真实的/挂载

mount /dev/cdrom /mnt ##内核镜像载光盘,将光盘挂载到/mnt下,

cd /mnt/BaseOS/Packages ##进入到/mnt/就会有数据

rpm -ivh kernel-core-xxxxx.rpm --force ##安装内核镜像软件包

rhel8: mv /boot/vmlinuz-kernel-xxxxx /boot/vmlinuz-xxxxx ##企业8里可直接移动内核镜像到/boot分区

5c69cfcf049ba4b0d4e86b603a5ec465.png

执行两次exit后,重启客户机就可以了

6.系统初始化镜像

文件路径/boot/initramfs-4.18.0-80.el8.x86_64.img

作用:

加载系统时钟

加载selinux

加载系统主机信息

加载/etc/fstab文件中磁盘挂载策略

加载磁盘配额

初始化系统程序开启开机启动服务

开启虚拟控制台

开启图形

问题出现: rm -fr /boot/initramfs-4.18.0-80.el8.x86_64.img

3f328112675fdf564b7c8048ff05f9f5.png

恢复:

进入挽救模式下,执行chroot /mnt/sysimage命令,得到一个真实的/挂载

再执行 mkinitrd /boot/initramfs-$(uname -r).img $(uname -r) 命令,恢复系统初始化镜像文件

044682d6cfe3a5fae8dc243ae8557f4a.png

退出后,使用硬盘驱动重新启动系统就可以了

7.系统启动级别

级别说明

0 关机

1 单用户

2 无图形网络模式

3 无图形网络模式

4 无图形网络模式

5 有图形网络模式

6 重启

问题出现:

systemctl set-default reboot.target ##系统在开机时无限重启

51d7f39e9af13fd48e5e18a0acaf5375.png

恢复:

在开机选择界面按进入到引导文件编辑模式

在内核加载选项最后加入启动级别5

ctrl+x启动

systemctl set-default graphical.target ## 系统在开机时开启图形

9cba1e04386d37ab60e272f179c6ff95.png

8.超级用户密码忘记

问题:超级用户密码忘记,无法登录

恢复:

1.在开机选择界面按进入到引导文件编辑模式

2.在内核加载选项最后删除到ro选项

3.更改ro---->rw (只读改为读写,如果你只读挂载 "/ ",你就更改不了)

4.加入rd.break参数(使系统初始化终止)终止系统启动,进入单用户模式

5.ctrl+x启动,之后就进入到单用户模式了

6.执行chroot /sysroot命令,切换到我们真实的shell,进入到超级用户模式(whoami)

7.更改超级用户密码:echo coffee| passwd --stdin root

如果selinux是开启状态,它不识别你的更改,这时需要建立一个文件/.autorelabel,重启selinux;如果selinux是关闭状态,就不用建立此文件

8.touch /.autorelabel ##当/.autorelabel文件存在selinux会重新初始化

d68b9e34879e335da34632637a261ce0.png

94f7cdacd5dcbe46318da1d96d725965.png

2058cdd10ffce218c3b7f6e9ec9389a3.png

d1358d4695d8660de2972cc1f6e682b2.png

Li_barroco

发布了20 篇原创文章 · 获赞 0 · 访问量 2110

私信

关注

标签:引导,修复,初始化,boot,系统,内核,文件,Linux,加载

来源: https://blog.csdn.net/weixin_45792518/article/details/104555193