十五、Linux系统引导过程及引导修复
15.1、从光盘启动主机
两种启动方法(适用于真机为Windows):
1、适合手速快,此方法为临时设定
点击启动虚拟机,在读取进度条时候
按Esc键进入系统启动设备选择列表。
在列表中选择CD-ROM。
2、永久设定启动方式
选择打开电源时进入固件
按< shift >+< + > 把CD-ROM Devices调整到最上。
按F10 保存退出,则默认从光盘启动。
注:若需要从硬盘启动,仍然要进入bios重新调整。
15.2、系统引导过程中磁盘引导修复
1、通电
2、bios初始化
对硬件检测
初始化硬件时钟
3、磁盘引导
执行fdisk -l
上图中
/dav/sda表示设别名称
/dev/sda1表示设备分区
Boot下的 * 表示设备上的mbr记录(即启动引导记录)
例:若采用截取指令破坏mbr记录,则系统无法重启
(1)截取指令:
dd if=/dev/zero of=/dev/sda bs=446 count=1 #清空系统/dev/sda上的mbr数据
#从系统的无线0字节中截取数据到vda硬盘中,截取一块大小为445byte,共截取1块
dd表示截取命令
if=/dev/zero表示截取模板
of=/dev/sda表示存放数据位置
bs=446表示数据块大小
count=1表示截取块个数
#注:截取指令中of后跟的设备取决于Disk后的显示。
(2)reboot重启,发现无法正常启动。
结论:当系统引导磁盘被破坏,则当系统重启时,系统无法识别从什么位置读取信息,就无法启动。
解决方案:
(1)选择从光盘启动,选择第三个
(2)然后选择第二个rescue
(3)选择第一个,继续进入挽救模式。
四个选项分别表示:
1)继续进入挽救模式
2)只读进入挽救模式
3)直接开启shell
4)退出
(5)给出一个指令chroot /mnt/images/ ,该指令表示转换系统从光驱到真实系统的磁盘中
回车后,输入指令chroot /mnt/sysimage/ 切换到真实系统
(6)执行下面指令,安装mbr
grub2-install /dev/sda #安装mbr
#/dev/sda为有引导分区的设备名称,此分区所在的硬盘设备就是需要mbr的设备
# fdisk -l 可查看有引导分区的设备
回车进行安装,提示no error reported
(7)输入两次exit重启
(8)引导已修复
15.3、grub2文件引导
系统启动时,此两行标题是系统引导文件中的内容
切换到引导文件所在目录:cd /boot/loader/entries/
执行ls查看
两条内容分别对应启动时候的两行标题
执行
vim 037a0ee7d3e349548dde05f707a1e879-4.18.0-80.el8.x86_64.conf
发现标题内容完全对应。
执行df
/dev/sda3 表示根分区所在系统设备
/dev/sda1 表示启动分区所在系统设备
问题模拟:
如果删除/boot/loader/entries/下的两个引导文件rm -fr *,则系统引导文件丢失,执行reboot,无法自动引导,需要手动引导。
手动引导步骤:
(1)指定系统启动分区
root表示指定引导设备
hd0表示指定引导分区的位置为第一块硬盘
msdos1表示指定引导分区在第一块硬盘的第一个分区中
(2)启动内核只读挂载/分区
linux16 /vmlinuz-4.18.0-80.e18.x86_64 ro root=dev/sda3
# /vmlinuz-4.18.0-80.e18.x86_64为内核文件
# ro 为只读挂载
# root=dev/sda3为根分区设备
(3)加载系统的初始化镜像
(4)输入boot,引导完成启动系统
注:手动引导为一次性,下次开启还需引导。
开机后执行
cd /boot/loader/entries/
ls
被删除的文件没有恢复,则下次启动仍需手动引导。
若要永久修复,则需执行以下操作
(1)kenel-install add 内核版本 内核镜像
uname -r #查看内核版本
(2)修复过程出现报错,解决方案为
查找报错文件
dnf whatprovides */bls.conf
然后执行
(3)执行ls发现引导文件恢复
(4)reboot重启成功
15.4、恢复系统内核文件
加载内核作用:
内核目录:/boot/vmlinuz-$(uname -r)
系统初始化硬件设备
只读挂载/设备
模拟问题:
rm -fr /boot/vmlinuz-$(uname -r) #删除内核文件
执行reboot,系统挂掉。
恢复:
(1)开机进入挽救模式
选择resure
选择1
回车
(2)输入指令chroot /mnt/sysimage/
(3)
mount /dev/cdrom /media/
cd /media/BaseOS/Packages
cp kernel-core-4.18.0-80.e18.x86_64.rpm /mnt/
(4)cd /mnt/
然后解压rpm2cpio kernel-core-4.18.0-80.e18.x86_64.rpm | cpio -id
(5)
cd lib/modules
可以看到内核版本号
(6)
cd 4.18 (TAB补齐)
ls
可以看到内核文件
(7)查看内核文件名称
cat /boot/loader/entries/TAB补齐
(8)cp /mnt/lib/modules/4.18< TAB > /boot/vmlinuz-4.18.0-80.e18.x86_64
(9)输入两次exit
15.5、恢复系统初始化镜像
cd /boot
ls
红线标出文件为内核完毕后加载的文件
模拟问题:
rm -fr initramfs-4.18.0-80.el8.x86_64.img
reboot
解决方案:
进入光盘启动模式
开机进入挽救模式
输入1
回车
输入指令chroot /mnt/sysimage/
执行
ls /boot可以看到文件生成
重启成功
15.6、系统启动级别修复
存放启动脚本目录:cd /etc/systemd/system/
ls查看
15.6.1、系统所有服务的启动脚本链接
multi-user.target.wants为系统所有服务的启动脚本链接
例:系统服务开机启动原理
当设定服务开机启动或者不开启时,系统会在/etc/systemd/system/multi-user.target.wants/中建立或者删除链接
15.6.2、系统启动级别的脚本链接
default.target为系统启动级别的脚本链接
0 关机
1 单用户
2 无图形网络模式
3 无图形网络模式
4 无图形网络模式
5 有图形网络模式
6 重启
ls /lib/systemd/system/*.target #查看系统启动级别脚本链接
模拟问题:
systemctl set-default reboot.target #系统在开机后进入无限重启模式
解决方案:
(1)在此界面按e进入编辑模式
(2)在第四行手动设定启动级别为5,然后按< crtl > + < x >启动
注:以上设定为手动设定,若要设置自动启动别为5,需在开机后做以下设定。
systemctl set-default graphical.target
15.7、破解超级用户密码
忘记超级用户密码解决方案:
(2)开机启动界面选择后按e进入编辑模式
(2)做以下更改
ro换成rw,即从只读挂载根设备变成读写挂载。
加上rd.break,在系统内核加载完成后终止系统启动
< crtl >+< x >启动
(3)进入系统单用户模式,当前模式默认使用root用户登陆。
(4)执行以下指令
chroot /sysroot/ #转换到真实系统
echo fake | spasswd --stdin root #修改root用户密码为fake
touch /.autorelabel #建立文件,该文件作用是让系统内核级加强型火墙(selinux)重新初始化,如果更改密码后selinux未被重新初始化,会组织新密码生效
# 注:此操作只有在selinux开启时需要
(5)exit执行两次