【Linux】Linux的启动过程

启动流程如下:

一、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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值