Linux 启动流程
来源:互联网 发布:网络集成与设计 编辑:程序博客网 时间:2024/06/05 05:49
以CentOS6.9为例,系统启动流程如下
POST --> Boot Sequence(BIOS)-->BootLoader --> grub --> Kernel(ramdisk) --> rootfs --> switchroot --> /sbin/init -->(/etc/inittab, /etc/init/*.conf) --> 设定默认运行级别 --> 系统初始化脚本rc.sysinit --> 关闭或启动对应级别的服务 --> 启动终端
1.加电自检POST(Power On Self Test)
主机加电开机后,首先进行硬件自检。主机通电后,主板会自动读取ROM中的程序,并从CMOS中加载BIOS信息,负责完成对CPU、主板、内存、硬盘子系统、显示子系统、串并行接口、键盘、CD-ROM光驱等硬件情况的检测。如遇到硬件故障的话将按两种情况进行处理:对于严重故障(致命性故障)则直接停机,此时由于各种初始化操作未完成,不能给出任何提示或信号;对于非严重故障,则会给出相应的提示或声音报警信号,等待用户处理。如果没有遇到故障,则加电自检通过,将后续工作交接给BIOS处理。
2.启动顺序Boot Sequence
POST完成后,系统控制权转交到BIOS,BIOS通过预设的参数识别基础硬件设备,启动硬件初始化;同时按照系统启动顺序依次查找各引导设备,第一个有引导程序的设备即为本次启动用到设备(一般为本地硬盘)。BIOS完成相关工作后,将后续工作交接给MBR中的Bootloader处理。
3.启动加载BootLoader
硬盘上第0头0道第1扇区被称为MBR(Master Boot Record),即主引导记录。虽然MBR仅有512个字节,但却存放了前446个字节的启动加载器(Bootloader,其中装有GRUB)、中间64个字节的磁盘分区表(Disk Partition Table)以及最后2个字节的结束标识(Magic Number)。启动设备读取MBR中前个446字节的Bootloader寻找GRUB,接着读取MBR后的扇区来识别磁盘分区表DPT以及内核Kernel所在的区域,最后启动GRUB。
4.引导加载器GRUB(GRand Uniform Bootloader)
第1阶段(stage 1)
读取磁盘设备上第0头0道第1扇区的MBR;用来加载第2阶段, 只存放了Bootloader的部分代码
第1.5阶段(stage 1.5)
读取MBR之后的扇区,让第1阶段中的Bootloader能够识别到第2阶段所在分区上的文件系统
第2阶段(stage 2)
找到grub的配置文件(/boot/grub/grub.conf <-- /etc/grub.conf或/boot/grub2/grub.cfg),并根据其中的预设内容给用户提供一个可选择的菜单,用于选择想要启动的系统或内核版本。同时stage2即/boot/目录下还提供了Linux系统内核文件(vmlinuz文件)和虚拟文件系统文件(initramfs)等其它核心文件。
最后,GRUB把用户选定的启动系统或内核装载到内存中的特定空间中解压、展开,并把系统控制权移交给内核Kernel。
5.加载Kernel
自身初始化
探测可识别到的所有硬件设备;
加载硬件驱动程序(有可能会借助于ramdisk加载驱动);
以只读方式挂载根文件系统rootfs;
切换至根文件系统switchroot;
运行用户空间的第一个应用程序:/sbin/init
至此,内核初始化完成,后续任务交给用户空间程序,只在模式切换或系统发生中断时,内核才会参与。
6.初始化init
/sbin/init最主要的功能就是准备系统运行环境,包括系统的主机名称、网络配置、语系处理、文件系统格式及其他服务的启动等
init程序的类型:
CentOS 5:SysV init
配置文件:/etc/inittab
CentOS 6:Upstart init
配置文件:/etc/inittab, /etc/init/*.conf
CentOS 7:Systemd systemd
配置文件:/usr/lib/systemd/system, /etc/systemd/system
7.配置文件/etc/inittab,设置默认运行级别
运行级别:为了系统的运行或维护等应用目的而设定;
0-6:7个级别
0:关机
1:单用户模式(root, 无须登录), single, 维护模式;
2: 多用户模式,会启动网络功能,但不会启动NFS;维护模式;
3:多用户模式,正常模式;文本界面;
4:预留级别;可同3级别;
5:多用户模式,正常模式;图形界面;
6:重启
8.配置文件/etc/rc.d/rc.sysinit,运行系统初始化脚本,完成系统初始化
(1) 设置主机名;
(2) 设置欢迎信息;
(3) 激活udev和selinux;
(4) 挂载/etc/fstab文件中定义的文件系统;
(5) 检测根文件系统,并以读写方式重新挂载根文件系统;
(6) 设置系统时钟;
(7) 激活swap设备;
(8) 根据/etc/sysctl.conf文件设置内核参数;
(9) 激活lvm及software raid设备;
(10) 加载额外设备的驱动程序;
(11) 清理操作;
9.对应脚本程序,关闭需要关闭的服务,启动需要启动服务
根据运行级别的不同,系统会运行/etc/rc.d/rc0.d到/etc/rc.d/rc6.d中的响应的脚本程序,来完成相应服务的关闭和启动,并执行用户自定义开机启动程序脚本/etc/rc.d/rc.local。
10.配置文件/sbin/mingetty,设置启动终端
mingetty会调用/etc/login程序,登入成功后,整个系统启动流程完成。
- 【linux】linux启动流程
- Android启动:Linux启动流程
- Android启动:Linux启动流程
- Android启动:Linux启动流程
- Linux启动流程
- linux启动流程
- Linux的启动流程
- linux 启动流程详解
- 嵌入式linux启动流程
- 嵌入式linux启动流程
- linux内核启动流程
- Linux 操作系统启动流程
- Linux 开机启动流程
- linux 详细启动流程
- Linux内核启动流程
- linux内核启动流程
- linux启动流程
- Linux 启动流程
- 网络管理 网络配置
- 进程和作业管理
- shell脚本流程控制
- httpd服务如何开机自启
- Linux 排错 误删 /etc/fstab 和 /boot怎样恢复
- Linux 启动流程
- java安装和环境变量
- 跨域问题
- 【CS 2460】树的统计(树链剖分)
- file结构体
- 浏览器的解析渲染过程
- 从地址栏输入网址时,敲下回车后,发生哪些了哪些事情?
- house of orange
- 把 Script 标签 放在页面的最底部的 body 封闭之前 和封闭之后有什么区别?浏览器会如何解析它们?