linux系统启动流程(CentOS5/6/7为例)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux系统启动流程(CentOS5/6/7为例)相关的知识,希望对你有一定的参考价值。
一个操作系统要完整启动起来需要哪些步骤呢?今天以CentOS为例探索一下linux的启动流程;
一、Linux系统的组成--kernel+rootfs(根文件系统)
kernel: 内核,进行进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能等等
rootfs: 根文件系统
1.内核设计流派:
单内核(monolithic kernel): Linux
把所有功能集成于同一个程序
微内核(micro kernel): Windows, Solaris
每种功能使用一个单独子系统实现
2. Linux内核特点:
支持模块化: .ko(内核对象)
如:文件系统,硬件驱动,网络协议等
支持内核模块的动态装载和卸载
组成部分:
核心文件:放置在/boot/分区下的vmlinuz-VERSION-release.el[567].X86_64
模块文件:/lib/modules/VERSION/kernel目录下
ramdisk:辅助的伪根系统,用于内核不能驱动文件系统时临时驱动;
5:/boot/initrd-2.6.18-398.el5.img
6/7:
/boot/initramfs-2.16.32-573.el6.x86_64.img
/boot/initramfs-3.10.0-327.el7.x86_64.img
二、启动流程详解:
第一部分针对的是内核空间的系统初始化:
Step1.POST:Power-On Self Test 加电自检
那么谁来执行此次检测操作--答案是只有cpu可以进行运算当然是由它来进行
由于刚接通电源时,内存是没有数据的。因此,x86架构的主板上的ROM就可以供应这样的数据;
主板上的芯片:南桥北桥芯片。就可以把ROM存储器里的内容直接映射到内存;从而能够让CPU读取和加载指令和数据;
因此我们可以说,X86架构的CPU可以线性寻址的物理存储空间:ROM + RAM;
Step2.BootSequence:可以理解为启动顺序;
第一步自检成功,可以正常运行之后。系统应该去寻找包含操作系统的硬件设备,完成系统启动;
而BootSequence的作用就是:决定到何种硬件设备上去加载操作系统;是Removable Device?还是 Hard Drive、CD-ROMS?亦或是网络启动?
而加载方式是:按照指定的次序查找各个引导设备,第一个被找出具有引导程序的设备即成为本次启动所用到的设备;
Bootloader:引导加载器,也是一个程序;存在于硬盘的0磁道0扇区共512字节,其中
446B bootloader
64B FAT 分区表
其余2字节 55AA 是结束标记
那么Bootloader有哪些呢:
在Windows里是NTLDR,全称是NT Loader,是系统加载程序;
Linux:
1.LILO(Linux Loader): 早期引导程序,到目前位置也是使用非常广泛的一种引导程序。但是在我们 计算机里不常用,因为不支持大硬盘启动(不超过1024柱面);安卓手机一般用的就是这个;
2.GRUB(GRand Uniform Bootloader): 一般架构在服务器和普通PC上;还可以引导unix甚至是Windows(8之前);
GRUB提供的功能:
1.为用户提供一个菜单,菜单中列举的是各个可以启动的操作系统的内核;
2.可以将用户选定的内核的核心文件装载到内存中去,解压缩并且展开,grub将系统控制权移交给内核;
3.提供一个交互式的命令行接口;
4.提供菜单和内核启动的安全保障;
Step3.内核自身初始化:
1) 探测能够识别到的所有的硬件设备
2) 加载硬件的驱动程序;有可能需要用到ramdisk
3) 以只读的方式挂载根文件系统
4) 运行用户空间的第一个应用程序 /sbin/init
Step4.init程序的类型
CentOS 5及之前,SysV Init - Classic Init;配置文件:/etc/inittab只有这一个
CentOS 6 :upstart init 配置文件:有/etc/inittab 但几乎被废弃!唯一的功能是设置启动级别,会在后面说到,其余的配置文件都在 /etc/init/*.conf
CentOS 7 : 完全废弃了inittab文件,但依然存在,只是简单说明了CentOS 7已经不使用这个文件而是使用全新的Systemd方式;其配置文件/usr/lib/systemd/system/*
/etc/systemd/system/*
第二部分是用户空间的开启:
kernel加载了第一个程序Init程序后,转入后台,init进程接管进程管理的任务
Step1:设置系统的运行级别--runlevel
表示process的action要在哪个级别下运行,该段中可以定义多个运行级别,
0:表示关机
1:表示单用户模式,在这个模式中,用户登录不需要密码,默认网卡驱动是不被加载,一些服务不能用2:表示多用户模式,NFS服务不开启
3,表示命令行模式
4,这个模式保留未用
5,表示图形用户模式
6,表示重启系统
其中常用的是3和5,0和6慎用,1的单用户模式是个对系统来说及其危险的模式,所以也只有在像root用户密码忘记后使用该模式;
centos 5 –/etc/inittab内容示例:
id:3:initdefault: # 定义默认运行级别
si::sysinit:/etc/rc.d/rc.sysinit # 系统初始化脚本
l0:0:wait:/etc/rc.d/rc 0 # 对应不同运行级别的启动脚本
l1:1:wait:/etc/rc.d/rc 1…
l6:6:wait:/etc/rc.d/rc 6
ca::ctrlaltdel:/sbin/shutdown -t3 -r now #定义快捷键操作
# 按下快捷键3秒后重启系统
CentOS6中,已经不再定义其他内容,进有默认开机启动流程,转用下列脚本来完成原有执行操作
Step2:执行/etc/rc.d/rc.sysinit脚本,实施系统初始化;
/etc/rc.d/rc.sysinit: 在所有运行级别下,init 依赖/rc.sysinit 进行系统初始化
作用:
(1) 设置主机名
(2) 设置欢迎信息
(3) 激活udev和selinux
(4) 挂载/etc/fstab文件中定义的文件系统
(5) 检测根文件系统,并以读写方式重新挂载根文件系统
(6) 设置系统时钟
(7) 激活swap设备
(8) 根据/etc/sysctl.conf文件设置内核参数
(9) 激活lvm及software raid设备
(10) 加载额外设备的驱动程序
(11) 清理操作
Step3.rc 脚本--对应/etc/rc.d/rc$runlevel.d/目录下的所有服务的链接--所有以K开头的服务停掉,S开头的服务开启
说明: rc$runlevel.d –> 意味着读取/etc/rc.d/rc#.d/下脚本
(目录下全部文件均为软链接,源为init.d下的对应脚本)
K*: K##*: ##运行次序;数字越小,越先运行;数字越小的服务,通常为依赖到别的服务
S*: S##*: ##运行次序;数字越小,越先运行;数字越小的服务,通常为被依赖到的服务
Step4.使用mingetty命令调用login程序,为用户打印登陆提示符;
以上是关于linux系统启动流程(CentOS5/6/7为例)的主要内容,如果未能解决你的问题,请参考以下文章