启动流程如下:
一、BIOS/UEFI程序(完成开机自检的程序)
按下开机键后,首先启动BIOS或UEFI程序,BIOS/UEFI是个人电脑后动时加载的第一个程序,一组固化到计算机内主板上一个ROM芯片上的程序,保存着计算机最重要的基本输入输出的程序、开机后自检程序 和 系统自启动程序。
BIOS/UEFI是一个程序会读取CMOS芯片里的参数,了解CPU配置、时间的配置、启动顺序的配置 等。CMOS:是一个存储参数配置的芯片。
如何进入BIOS/UEFI:主机—>del键、delete;服务器:开机有提醒;笔记本:F1、F2、F12等
UEFI是一个更新的技术,提供更快的速度和更安全的启动过程,两者的区别在于,他们处理磁盘存储的方式。BIOS绑定到MBR主引导程序系统(限制大小),而UEFI则绑定到GPT分区表(消除了大小限制,并提供更灵活的方式) 。
二、开机自检
然后BIOS或UEFI进行开机自检(POST),并初始化硬件,检测系统外围关键设备(cpu、内存、显卡、I/O、键盘、鼠标等),如发现错误,会给操作者提示或警告。常见问题:内存条松动,BIOS自检报错,系统就会无法启动。
三、磁盘引导阶段(按boot启动第一启动顺序)
UEFI通过搜索可启动设备进行配置,在MBR中查找,主启动记录 (MBR - Master Boot Record)
: 这是位于传统磁盘(MBR分区表)最开始部分(第一个扇区)的一段特殊代码和数据。根据引导代码进行启动和配置。这个代码是有效的并且指向一个可引导的分区或操作系统加载器(Linux的GRUB2)
启动顺序:
第一引导顺序:可移动设备(U盘......)
第二引导顺序:硬盘
第三引导顺序:光驱(安装系统)
第四引导顺序:网络中安装服务器启动
可以通过 + - 来调整启动顺序
BIOS界面:
四、文件引导阶段【启动加载器grub2】
接着将系统控制权交给GRUB2,Grub2负责加载内核、initramfs和启动操作系统,它的主要目标是:将linux内核加载到主内存中
提供启动菜单:Grub2在计算机启动时显示一个菜单,列出可用的操作系统和内核选项。用户可以选择希望启动的操作系统或内核版本。
加载操作系统内核:一旦用户选择了要启动的操作系统或内核,GRUB2负责加载相应的内核文件(例如vmlinuz)到内存中。
加载初始RAM磁盘映像(initramfs):对于使用initramfs的Linux系统,Grub2还负责将initramfs文件加载到内存中。initramfs包含了用于引导系统的必要文件和驱动程序。
启动操作系统:当内核和initramfs被加载后,Grub2将控制权转交给内核,启动操作系统的初始化过程。
提供启动参数:Grub2允许用户在启动菜单中设置启动参数,如内核参数、运行级别等。这些参数可以影响系统的启动行为和配置。
支持多重引导:Grub2允许在同一计算机上安装多个操作系统,并提供方便的菜单选择界面,使用户可以轻松切换不同的操作系统。

五、/boot里面的文件系统的驱动
[root@localhost boot]# ls
config-4.18.0-240.el8.x86_64 initramfs-4.18.0-240.el8.x86_64kdump.img
efi loader
grub2 System.map-4.18.0-240.el8.x86_64
initramfs-0-rescue-c60d2d9754344502ada018e9d5f81a56.img vmlinuz-0-rescue-c60d2d9754344502ada018e9d5f81a56
initramfs-4.18.0-240.el8.x86_64.img vmlinuz-4.18.0-240.el8.x86_64
六、内核文件
然后,启动加载器将控制权交给内核,传递启动加载器的内核命令行以及initramfs在内存中的位置
首先,他将自己解压到内存中,在initramfs镜像中找到驱动程序的所有硬件,初始化这些硬件,加载其他内核模块。然后从initramfs镜像执行一个/sbin/init脚本,这个脚本是一个指向systend单元的链接。然后一个最初的systemd进程开始运行,他负责了大量的剩余工作。
vmlinuz 和 initramfs:协同工作以确保系统能够正确加载并运行。
vmlinuz:linux内核的可执行文件,包含操作系统核心功能,如进程管理、内存管理、设备驱动等;负责在启动时初始化硬件、挂载根文件系统,并启动用户空间的第一个进程(init、systemd)
initramfs:一个临时的根文件系统,在系统启动的早期阶段加载到内存中。
两者的协同工作流程:
启动加载程序(GRUB):
加载 vmlinuz 和 initramfs 到内存。
内核启动:
解压 vmlinuz,初始化硬件,挂载 initramfs 作为临时根。
initramfs 阶段:
执行初始化脚本,加载驱动、挂载真正的根文件系统。
切换到真实根文件系统:
内核卸载 initramfs,将控制权交给用户空间的初始化进程(如 systemd)。
七、启动初始化进程
内核启动完成后,会创建第一个用户空间进程(init/systemd),作为所有进程的父进程
CentOS6.x 启动的第一个进程是init
CentOS7.x 启动的第一个进程是systemd
进程负责:
读取系统配置文件
启动系统服务(网络、日志、安全服务等)
进入用户交互界面(图形桌面或命令行)
八、运行级别
接下来是启动对应级别的服务,加载所有守护进程并设置目标或运行级别值,然后就可以进入login界面。
运行级别:
0 ——> 关机
1 ——> 单用户模式(破密码)
2 ——> 多用户模式(不含NFS服务)
3 ——> 完全多用户模式 multi-user
4 ——> 系统保留(管理员自定义用途,几乎没有用)
5 ——> 图形模式(GUI界面)
6 ——> 重启动
在CentOS6里面:
查看运行级别: runlevel
临时修改运行级别:init 运行级别
永久修改:vim /etc/inittab (0、6不能设为默认级别)
chkconfig 用于管理系统服务启动状态,比如chkconfig --level 35 httpd on # 在运行级别3和5下启用httpd服务,off是禁用。chkconfig --list 是显示所有。
较新版本就使用suystemctl命令(enable)启动
在CentOS7里面:
查看运行级别:systemctl get-default
设置运行级别:systemctl set-default multui-user.target (设置为第三运行级别)
multui-user.target ==>3
graphical.target ==> 5
/etc/systemd/system/multi-user.target.wants/中存放着开机自启的服务,想要移除==>disable
九、输入用户名与密码
用户输入用户名与密码后
Linux系统自动进入/etc/passwd 查找用户名
再根据用户名进入/etc/shadow 查找用户密码
然后登录进去之后,会运行用户家目录下的环境变量初始化文件(就是加载环境变量),有以下四个:
全局配置,对所有用户有效:/etc/profile /etc/bashrc
局部配置,只对登录的用户有效:~/.bash_profile ~/.bashrc