Linux系统启动流程
Posted 徐中祥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux系统启动流程相关的知识,希望对你有一定的参考价值。
详细查看:https://www.cnblogs.com/linhaifeng/articles/13274099.html
一、Linux系统启动流程
理解Linux操作系统启动流程能有助于后期在企业中更好的维护Linux服务器能够快速定位系统问题。
Linux系统启动流程图:
Linux系统启动流程详细说明:
1、加载Bios
当你打开计算机电源,计算机会首先加载基本输入输出系统(Basic Input Output System )BIOS系统。
BIOS程序一般被存放在主板ROM(只读存储芯片)之中、即使在关机或掉电以后该程序也不会丢失。
BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。在此之后,计算机就知道应该去读取哪个硬件设备了。
2、读取MBR
读取硬盘上磁道的第一个扇区被称为MBR,也就是Master Boot Record即主引导记录、它的大小是512字节 前446存放的就是grub程序的一部分、里面却存放了预启动信息、分区表信息。
系统找到BIOS所指定的硬盘的MBR后,就会将其复制到0×7c00地址所在的物理内存中。其实被复制到物理内存的内容就是Boot Loader,而具体到你的电脑,那就是lilo或者grub了
3、GRUB引导
Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好一切准备。
Boot Loader有若干种,其中Grub、Lilo和spfdisk是常见的Loader。系统读取内存中的grub配置信息,并依照此配置信息来启动不同的操作系统。
4、加载Kernel
根据grub设定的内核映像所在路径,系统读取内存映像,并进行解压缩操作。此时,屏幕一般会输出“Uncompressing Linux”的提示。当解压缩内核完成后,屏幕输出“OK, booting the kernel”。
系统将解压后的内核放置在内存之中,并调用start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完成Linux核心环境的建立。至此,Linux内核已经建立起来了,基于Linux的程序应该可以正常运行了。
5、设定Inittab运行等级
内核加载完毕,会启动Linux操作系统第一个守护进程init,然后通过该进程读取/etc/inittab文件,/etc/inittab文件的作用是设定Linux的运行等级,Linux常见运行级别如下:
•0:关机模式
•1:单用户模式
•2:无网络支持的多用户模式
•3:字符界面多用户模式
•4:保留,未使用模式
•5:图像界面多用户模式
•6:重新引导系统,重启模式
6、加载rc.sysinit
# 读取完运行级别,Linux系统执行的第一个用户层文件/etc/rc.d/rc.sysinit,该文件功能包括:设定PATH运行变量、设定网络配置、启动swap分区、设定/proc、系统函数、配置Selinux等。
7、加载内核模块
# 读取/etc/modules.conf文件及/etc/modules.d目录下的文件来加载系统内核模块。该模块文件,可以后期添加或者修改及删除。
8、启动运行级别程序
根据之前读取的运行级别,操作系统会运行rc0.d到rc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务。其中以S开头表示系统即将启动的程序,如果以K开头,则代表停止该服务。S和K后紧跟的数字为启动顺序编号。
9、读取rc.local文件
操作系统启动完相应服务之后,会读取执行/etc/rc.d/rc.local文件,可以将需要开机启动的任务加入到该文件末尾,系统会逐行去执行并启动相应命令。
# rc.local就是在一切初始化工作后,Linux留给用户进行个性化的地方。你可以把你想设置和启动的东西放到这里
10、执行/bin/login程序
执行/bin/login程序,启动到系统登录界面,操作系统等待用户输入用户名和密码,即可登录到Shell终端,如图3-7所示,输入用户名、密码即可登录Linux操作系统,至此Linux操作系统完整流程启动完毕。
# 此时系统已经进入到了等待用户输入username和password的时候了,你已经可以用自己的帐号登入系统了。
二、启动级别设置
# Linux启动级别有
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
运行级别2:多用户状态(没有NFS)
运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5:X11控制台,登陆后进入图形GUI模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
# 设置启动级别为 3
Linux系统默认启动等级为5、可已使用init命令切换启动级别。
[root@steven ~]# init 3
# 对于传统的设置方法
通过查看CentOS7的/etc/inittab文件。
# 将系统修改为多用户命令行界面
systemctl set-default multi-user.target
# 将系统修改为图形界面
systemctl set-default graphical.target
三、单用户模式
1、开机时进入如下界面按下方向键盘阻止系统自动继续
2,按e键出现下面界面
3,按方向键定位到最后,找到“ro”这一行,ro的意思是read only将“ro”替换成 rw init=/sysroot/bin/sh
4、按Ctrl-x 进入单用户模式
5、执行chroot /sysroot。其中chroot命令用来切换系统,/sysroot/目录就是原始系统
4、修改root密码
5、修改默认启动级别(开机进入命令行模式)
#设置成命令模式
systemctl set-default multi-user.target
init 3 # 切换到字符模式,有时只使用上面的语句没有效果
按下Ctrl+D后,执行reboot
6,测试使用修改后密码登入成功。
四、grub加密
centos7.2 + 中引入了新的实用程序“ grub2-setpassword ”
1、 执行 grub2-setpassword 命令
# 进入系统命令行执行grub加密命令。
[root@steven ~]# grub2-setpassword
Enter password: [密码]
Confirm password: [密码]
2、删除–unrestricted 参数
# 为什么要删除这个参数?
因为如果现在直接重新启动系统。尝试修改引导条目、系统会要求提供凭据。
但是可以在没有凭据的情况下修改引导条目。
为了阻止未经授权的修改和未经授权的启动,需要对 /boot/grub2/grub.cfg文件进行更改。
打开文件并使用密码搜索需要保护的启动条目,它以menuentry开头。找到条目后,从中删除 --unrestricted 参数
[root@web02 ~]# vim /boot/grub2/grub.cfg
3、重启验证 reboot
此时只有当输入正确的用户名和密码时,才能进入 grub 菜单或者修改引导条目
五、光盘修复模式
1、进入bios、从光盘启动 (重启进入bios界面按F2,手速要快不要哆嗦)
2、选择 Troubleshooting (选择故障排查)
3、此时就进入到了 Troubleshooting 故障排查界面
4,然后选择:Rescue a CentOS system (进入系统修复模式)
5,进入到Rescue模式 (成功进入系统修复模式页面)
6,选项意思:(进入系统修复模式的一些选项)
- continue
# 救援模式程序会自动查找系统中已有的文件系统,并可读写挂载到/mnt/sysimage目录下。
- Read-Only mount
# 会以只读的方式挂载已有的文件系统。
- Skip to shell
# 手动挂载
4)Quit (Reboot)
# 退出重启
7, 选 1)Emter 回车
8,sh切换bash模式
chroot /mnt/sysimage/
9,修改root密码
passwd root
六、BIOS加密
1,设置BIOS加密
找到设置选项
2、直接回车会弹出让你设置密码的条框。
3、设置密码
4、按F10保存 [Enter]回车
2,再次进入bios验证
以上是关于Linux系统启动流程的主要内容,如果未能解决你的问题,请参考以下文章
LINUX PID 1和SYSTEMD PID 0 是内核的一部分,主要用于内进换页,内核初始化的最后一步就是启动 init 进程。这个进程是系统的第一个进程,PID 为 1,又叫超级进程(代码片段