文章目录
系统启动过程
- 通电
- bios(basic input or output system基本输入输出系统)初始化,主要作用是自检及初始化,开机后bios最先被启动,他会对电脑的硬件设备进行完全彻底的检验和测试。MBR:硬盘上0扇区0磁道前512bytes,它是一个独立于操作系统的部分,是一个全局重要区域,MBR对于系统启动至关重要!
- 阶段1:mbr主引导记录,在硬盘的0磁道,1扇区,共446字节。
- 阶段2:grub文件引导阶段
- 启动内核,只读挂载根设备,检测设备,对设备驱动进行初始化。
附一张详细的Linux启动过程的图:
Linux启动时常见错误及排错
系统启动级别问题
- 系统启动级别
在/lib/systemd/system/目录下可以查看:
runlever0.target -> poweroff.target
runlever1.target -> rescue.target
runlever2.target -> multi-user.target
runlever3.target -> multi-user.target
runlever4.target -> multi-user.target
runlever5.target -> grapical.target
runlever6.target -> reboot.target
- 设定启动级别
方法一:systemctl set-default + 启动级别
方法二:先删除默认启动级别,再使用软链接的方式
rm -rf /etc/systemd/system/default.target
ln -s /lib/systemd/system/某个启动级别 /etc/systemd/system/default.target
- 系统启动级别错误
如果系统被人恶习修改启动级别为reboot.target,则系统在启动时会陷入无限循环重启中。我们应该怎么解决这类问题? - (1)模拟错误
方法一:systemctl set-default reboot.target
方法二:
rm -rf /etc/systemd/system/default.target
ln -s /lib/systemd/system/reboot.target /etc/systemd/system/default.target
- (2)解决办法
第1步:开机按上下健停止读秒
第2步:按“E”进入编辑模式
第3步:选择内核启动那一行(就是以linux16开头这一行),在末尾加5,也就是runlever5.target -> grapical.target
第4步:“ctrl+x”启动系统,成功进入图形界面的系统。
第5步:进入系统后一定要修改系统启动级别!systemctl set-default graphical.target
磁盘引导阶段 -------- mbr主引导记录的恢复
- mbr的作用是为了记录/boot目录所在分区位置
- 注意:主引导记录在含有"*"的分区所在的硬盘上,磁盘的 0 磁道 1 扇区的前 446 字节,所以当这前446字节被破坏或者被替代,就会发生系统错误。
- (1)模拟错误
破坏主引导记录分区:dd if=/dev/zero of=/dev/vda bs=446 count=1
,重启系统,发现系统启动不起来。
- (2)解决方法:
第1步:关闭系统,添加光驱,加载镜像进行修复,使系统从光驱启动。
第2步:选择修复选项,进入拯救模式
第4步:执行相关操作
chroot /mnt/sysimage ##切换到当前镜像系统的真实根分区
df ##查看挂载情况,找到boot分区所在文件系统
grub2-install /dev/vda ##grub2安装
exit
exit
第5步:关闭虚拟机,取消光驱启动,修改为默认的硬盘启动,成功启动。
文件引导阶段文件的恢复
引导文件丢失:/boot/grub2/grub.cfg
- grub引导文件/boot/grub2/grub.cfg指定/boot分区的位置,用于加载内核,启动系统初始化进程。该配置文件描述了相关的信息:
- (1)模拟问题
rm -fr /boot/grub2/grub.cfg
系统无法启动:
- 解决方法
方法1:当系统没有重新启动,grub2-mkconfig >/boot/grub2/grub.cfg 生成引导文件grub2-mkconfig > /boot/grub2/grub.cfg
方法二:系统重启后,采用手动引导的方式
grub > set root='hd0,msdos1' ##也就是刚刚配置文件中的内容
##首先查/boot有没有独立挂载,如果没有独立挂载,就是在/分区下所在的设备,若独立挂载,则在挂载的设备上
grub > linux16 /vmlinuz-3.10.0-514.el7.x86_64 ro root=/dev/mapper/rhel-root ##启动内核,根分区的设备名称
grub > initrd16 /initramfs-3.10.0-514.el7.x86_64.img ##启动init程序,进入初始化阶段启动初始化进程
grub > boot
注意:以上操作可以使系统正常启动,但是是临时的,所以进入系统之后还需要执行:grub2-mkconfig > /boot/grub2/grub.cfg生成引导文件
系统内核文件丢失
- 模拟问题:
rm -fr /boot/vmlinuz-3.10.0-123.el7.x86_64
删除内核文件 - 解决方法:
类似的,从光驱启动,进入挽救模式,从挂盘挂载的镜像中找到内核的安装包,解包,得到和系统相匹配的内核文件,拷贝到/boot下即可。
chroot /mnt/sysimsge
mount /dev/sr0 /westos
cd /westos/Packages
cp kernel-3.10.0-123.el7.x86_64.rpm /mnt #复制到别的目录下
rpm2cpio kernel-3.10.0-123.el7.x86_64.rpm | cpio -id #解包,解出来
cp vmlinuz-3.10.0-514.el7.x86_64 /boot ##将内核文件复制到/boot下
exit
exit
系统初始化镜像文件丢失
- 模拟问题:
rm -fr /boot/initramfs-3.10.0-514.el7.x86_64.img
删除初始化镜像文件 - 解决方法:
方法1:系统未重启时
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
注意:uname -r 表示查看内核版本 $()会优先执行括号内的指令
方法2:系统重启后
改变启动引导,进入挽救模式,使用mkinitrd命令恢复初始化镜像文件
chroot /mnt/sysimage
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
ls /boot/
exit
exit
boot分区被删除
- 模拟问题:
rm -rf /boot/*
- 解决方法:改变启动引导,进入挽救模式
这个思想就是将boot分区做的一系列事情进行糅合。
chroot /mnt/sysimage
mkdir /boot ##新建/boot目录
grub2-install /dev/vda ##启动分区所在硬盘
mount /dev/sr0 /westos ##挂载镜像
rpm -ivh /westos/Packages/kernel-3.10.0-514.el7.x86.64.rpm --force ##强制安装内核文件
grub2-mkconfig > /boot/grub2/grub.cfg ##引导文件
exit
exit
完成后重新更换启动系统方式,成功。