系统启动流程

一、系统启动流程

启动流程:
    1、BIOS加电自检、检测硬件、决定启动介质、找到引导扇区
    2、读取并且执行第一个开机设备中的MBR的bootloader(grub程序)
    3、依据bootloader设置去加载内核,内核开始侦测硬件并加载驱动程序
    
如果是sysvinit启动程序
    4、内核启动init进程
    5、系统初始化
    6、init找到/etc/inittab文件,决定系统的运行级别(X)
    7、触发相应的运行级别的事件,运行/etc/rcX.d下的脚本
    8、执行/etc/rc.local文件,来到登录界面
    9、输入用户名密码,进入到系统中
    
如果是systemd启动程序
    4、在硬件驱动加载成功后,内核会主动呼叫systemd程序,并default.target流程开机
        systemd执行sysinit.target初始化系统及basic.target准备操作系统
        systemd启动multi-user.target下的本机与服务器服务
        systemd执行multi-user.target下的/etc/rc.d/rc.local文件
        systemd执行multi-user.target下的getty.target及登录服务
        systemd执行graphical需要的服务

boot loader主要功能如下:
    提供选单:用户可以选择不同的开机项目
    载入核心文件:直接指向可开机的程序区域来开始操作系统
    转交其他loader:将开机管理功能转交给其他Loader负责

内核在Linux中的存放位置为/boot分区下,主要有2个文件要被加载:
vmlinuz-4.18.0-193.el8.x86_64 内核文件
initramfs-4.18.0-193.el8.x86_64.img 虚拟文件系统

查看initramfs文件里的内容:lsinitrd /boot/initramfs-4.18.0-193.el8.x86_64.img
如果systemd默认的是multi-user.target,下面命令可以列出它加载的服务:systemctl list-dependencies multi-user.target
系统启动流程_第1张图片

二、grub配置文件及排错

从RHEL7用了grub2,而不再是grub了。

MBR分区的前446个字节存放的是系统引导程序grub,中间64字节是分区表,最后2个字节表示结束。

是grub是怎么工作的:
1、BIOS自检,检查硬件;
2、激活MBR,MBR上不存在文件系统,可以视作硬件一部分,因此可以被直接读取
3、grub加载到内存,生成一个微系统,微系统内置了精简版的文件系统
4、通过这个微系统,他会去引导分区,比如默认一般是sda1上去找内核文件如vmlinuz,然后再调用grub的配置文件。
grub的主要把他的配置文件放在了3个地方。
/boot/grub2/grub.cfg (/etc/grub2.cfg是/boot/grub2/grub.cfg文件的符号链接)
/etc/grub.d/
/etc/default/grub

他们的关系是 grub.cfg里面通过 ####BEGIN ##### 这种格式按照顺序调用/etc/grub.d里面的脚本实现不同的功能。grub.d目录里面有很多数字开头的脚本,按照从小到大的顺序执行。以00__header为例,他又会调用/etc/default/grub 配置文件来实现最基本的开机界面配置,如下所示:
在这里插入图片描述

例如:在/etc/grub2.cfg文件里面调用/etc/grub.d/10_linux 来配置不同的内核,这里面有2个menuentry(菜单入口),所以我们开机的时候会看见两个默认选项,一个是普通模式,一个是救援模式
系统启动流程_第2张图片

下面是/etc/default/grub 文件。和其他的脚本比起来,非常简单直观了。
系统启动流程_第3张图片
需要注意的是,最好不要直接去修改/etc/grub2.cfg文件。这是因为如果后期升级内核,所有的配置都会失效。如果需要自定义这个文件,我们可以修改对应的脚本或者/etc/default/grub文件,然后通过grub2-mkconfig重新生成grub.cfg文件。

例1:修改启动等待时间
rhel7默认启动等待时间为5秒,下面将启动时间改为10秒(注:如果改成-1,那么每次启动时需要手动确认才可以)
系统启动流程_第4张图片
重新编译生成grub.cfg文件:grub2-mkconfig -o /boot/grub2/grub.cfg
在这里插入图片描述
重启测试
系统启动流程_第5张图片

例2:开机界面的时候输入“e”,会打开编辑窗口,可以根据需要进入rescue,emergency或者shell模式。如何限制访问:
/etc/grub.d/00_header文件末尾,添加以下内容:

    cat <<EOF
set superusers='用户名'
password 用户名 密码
EOF

在这里插入图片描述
重启编译生成grub.cfg文件
在这里插入图片描述
重启测试
在这里插入图片描述
以上设置的是明文密码,也可以设置成密文口令:
加密密码有命令grub2-mkpasswd-pbkdf2生成
在这里插入图片描述
/etc/grub.d/00_header文件末尾,添加以下内容:

    cat <<EOF
set superusers='用户名'
password_pbkdf2 用户名 密文密码
EOF

在这里插入图片描述
重新编译后重启测试。

开机界面按“e”进入编辑窗口,我们可以根据需要进入rescueemergencyshell引导的3种模式。这3种模式对于系统启动排错很有帮助,比如某个服务卡住了无法加载可以通过这3种模式排错。

rescue模式:在commandline的配置末尾添加s ,类似rhel6之前的单用户模式
在这里插入图片描述
ctrl+x启动
普通模式需要加载的服务很多,但是rescue模式加载的就少很多,输入管理员密码就可以进入了
系统启动流程_第6张图片

emergency模式和rescue模式类似,不过加载的服务更少,把s改成emergency就行了
在这里插入图片描述
系统启动流程_第7张图片

如果root密码忘记怎么办(重置root密码
方法一:
1、重启系统,按e进行编辑
2、在linux16那行尾部加上以下信息:rd.break console=tty0
在这里插入图片描述
3、按ctrl+x启动
4、重新挂载文件系统:mount -o remount,rw /sysroot/
系统启动流程_第8张图片
5、改变根目录:chroot /sysroot/
在这里插入图片描述
6、修改root密码
在这里插入图片描述
注:出现方块原因是没有中文环境,可以用LANG=en_us切换成英文环境
7、在根目录创建相关文件(用于重新标记selinux环境值,如果启动了selinux,不运行此命令将无法正常启动系统):touch /.autorelabel
在这里插入图片描述
8、退出重启系统
在这里插入图片描述

方法二:
1、在linux16的最后一行删除rhgb quiet,然后添加init=/bin/sh,它会用shell替代默认daemon进程
在这里插入图片描述
2、按crtl+x启动
系统启动流程_第9张图片
3、挂载文件系统为可写模式,因为根目录的加载权限是ro,只读,需要重新加载成rw权限:mount -o remount,rw /
在这里插入图片描述
4、修改密码:
系统启动流程_第10张图片
5、在根目录创建相关文件,如果之前系统启用了selinux,必须运行以下命令,否则将无法正常启动系统:touch /.autorelabel
在这里插入图片描述
创建这个文件会自动在开机的时候重新做标签用于重新标记SELINUX的环境值。
6、启动系统,运行命令exec /sbin/init来正常启动,或者用命令exec /sbin/reboot重启

三、开机排错

例1:grub故障:
1、模拟故障
在这里插入图片描述
2、重启后出现以下故障:开机的时候系统会自动尝试从本地、光盘和网络加载引导程序(如果光盘、网络等引导失败则会显示“operating system not fount”)
系统启动流程_第11张图片
3、在bios调整引导顺序,使用光盘引导,选择Troubleshooting(排错)
系统启动流程_第12张图片
4、选择Rescue a CentOS system
系统启动流程_第13张图片
5、选择continue
系统启动流程_第14张图片
6、根据提示,进入shell环境
系统启动流程_第15张图片
7、fdisk -l看看启动分区是哪个,有星号的就是
系统启动流程_第16张图片
8、进入bash环境(系统根目录),重装一下grub2到启动分区:grub2-install /dev/sda
在这里插入图片描述
9、退出重启
系统启动流程_第17张图片

例2:grub引导程序没有问题,但是内核文件或grub.cfg配置文件损坏的情况下怎么处理:
1、模拟故障
系统启动流程_第18张图片
2、重启之后会进入grub救援模式,这表示引导程序没有问题,但是引导文件找不到了。
在这里插入图片描述
3、和例1操做一样,通过光盘引导,进入急救模式

系统启动流程_第19张图片
4、检查boot目录,挂载光盘镜像
在这里插入图片描述
5、解决方法是重新安装内核,可以用rpm或者yum,用yum需要先卸载当前的再安装,rpm可以强制--force覆盖安装

使用yum:
yum remove -y kernel 
yum install -y /media/Packages/kernel-3.10.0-1160.el7.x86_64.rpm

使用rpm:
rpm -ivh /media/Packages/kernel-3.10.0-1160.el7.x86_64.rpm --force

系统启动流程_第20张图片
6、装完内核后,重新安装一次grub2:grub2-install /dev/sda,然后重新编译grub2配置文件:grub2-mkconfig -o /boot/grub2/grub.cfg
系统启动流程_第21张图片
7、退出重启
系统启动流程_第22张图片
注:如果开机后直接进入命令行模式,即使runlevel显示的是5,手动输入startx一样报错,请尝试重新安装图像化界面yum groupinstall 'Sever with GUI'

你可能感兴趣的:(LINUX基础,linux)