Linux基础(8)——Linux系统引导过程及引导修复
1. Linux系统启动流程
通电
BIOS初始化
按照BIOS所设定的系统启动流程,根据引导次序(Boot Sequence)自上而下的寻找对应存储设备上操作系统的MBR,如果MBR存在,则会读取MBR中的bootloader,并初始化硬件时钟。
磁盘引导
MBR(bootloader)会根据MBR所指引的活动分区上寻找系统分区中的 bootloader,bootloader称为是一段程序,占据446字节。RHEL系统中bootloader为grub2引导文件。
grub2引导
根据MBR找到grub2之后,指向/boot位置,进一步准备加载系统启动所必需的文件。
内核加载(kernel)
探索硬件及加载硬件驱动程序,并以读写的方式挂载根文件系统。
系统初始化镜像(init进程)
加载系统时钟、selinux、系统主机信息、/etc/fstab文件中磁盘策略、磁盘配额、初始化系统程序开启开机启动服务、开启虚拟控制台、开启图形等根据系统运行级别启动应用。位置:/boot/initramfs-4.18.0-80.el8.x86_64.img
系统运行级别
0 关机
1 单用户
2 无图形网络模式
3 无图形网络模式
4 无图形网络模式
5 有图形网络模式
6 重启
2. 系统启动修复
磁盘MBR分区丢失
dd if=/dev/zero of=/dev/vda bs=446 count=1 # 清空MBR分区
使用光盘启动系统,进入挽救模式
chroot /mnt/sysimage #切换环境至硬盘系统
grub2-install /dev/vda #重新安装grub2到系统硬盘上
引导文件丢失
/boot/loader/entries/xxx.conf 丢失
cp /usr/lib/modules/4.18.0-193.el8.x86_64/bls.conf /boot/
kernel-install add $(uname -r) /boot/vmlinuz-4.18.0-193.el8.x86_64
/boot/grub2/grub.cfg 丢失
grub2-mkconfig > /boot/grub2/grub.cfg
若无法进入系统需要启动手动引导:
grub> set root='hd0,msdos1'
grub> linux16 /vmlinuz-4.18.0-193.el8.x86_64 ro root=/dev/vda1
grub> initrd16 /initramfs-4.18.0-80.el8.x86_64.img
grub> boot
vmlinuz文件丢失
cp /usr/lib/modules/$(uname -r)/vmlinuz /boot/vmlinuz-$(uname -r)
或在救援模式下
chroot /mnt/sysimage
cp /usr/lib/modules/$(uname -r)/vmlinuz /boot/vmlinuz-$(uname -r)
init镜像文件丢失
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
或
chroot /mnt/sysimage
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
/boot 分区完全丢失
进入救援模式,分别安装引导以及生成引导配置文件。挂载光驱至/mnt/,在光驱系统软件仓库中为硬盘系统重新安装内核程序。
chroot /mnt/sysimage
grub2-install /dev/sda
grub2-mkconfig > /boot/grub2/grub.cfg
mount /dev/cdrom /mnt/
cd /mnt/BaseOS/Packages/
rpm -ivh kernel-core-xxxx.rpm --force
系统运行级别错误
在开机界面按e进入编辑菜单,在内核加载选项最后加入启动级别5,进入系统重新设定运行级别。
systemctl set-default graphical.target
超级用户密码丢失
在开机界面按e进入编辑菜单,将内核加载选项中删除ro及之后的内容,增加rw rd.break。启动系统,运行:
chroot /sysroot
echo PASSWORD | passwd --stdin root
touch /.autorelabel
参考