Linux系统启动流程

一、CentOS 5启动流程图  

wKioL1XoC7LwbdKbAAIc9DmMSak865.jpg

二、CentOS系统启动流程详解

 概述:  POST --> BIOS (Boot Sequence) --> MBR(bootloader)--> Kernel (CentOS5: initrd, CentOS6: initramfs)--> /sbin/init(CentOS5:/etc/inittab, CentOS6:/etc/inittab, /etc/init/*.conf)-->/etc/rc.d/sysinit/--> 关闭和启用对应级别下的服务-->启动终端


POST(加电自检):检测硬件

在CPU的控制下,将RAM芯片中的某个程序映射到ROM地址空间,并执行其中的指令完成系统硬件健康状况检查,例如硬盘、网卡、CPU、声卡等硬件设备是否完好。当检查完成后,所有硬件或基本硬件、核心硬件没有问题,则下一个启动流程BIOS


BIOS(Boot Sequence):决定启动介质 

按照BIOS所设定的系统启动流程,根据引导次序(Boot Sequence)自上而下的寻找对应存储设备上操作系统的MBR(全称为Master Boot Record即硬盘的主引导记录),如果MBR存在,则会读取MBR中的bootloader


MBR(bootloader):寻找 grub,读取配置文件/etc/grub.conf,决定默认启动项

根据MBR所指引的活动分区上寻找系统分区中的 bootloader,bootloader称为是一段程序,占据446字节。在bootloader当中配置了所要引导操作系统的内核所在的位置,因此BIOS被载入内存以后,当它实现将控制权限转交给bootloader以后,bootloader接收整个系统的控制权限,而后根据用户的选择去读取相应操作系统中的内核,并将内核装载入内存的某个空间位置,解压缩,这时kernel就可以在内存中活动,并根据kernel本身功能在内存当中探索硬件并加载硬件驱动程序并完成内核初始化,bootloader会将控制权限转交给内核kernel。


Kernel(初始化):内核会主动调用用户空间的init进程,读取配置文件 /etc/inittab,决定启动级别,运行初始化脚本/etc/rc.d/rc.sysinit

探测硬件->加载驱动(initrd)->挂载根文件系统->rootfs(/sbin/init)

initrd就是一个虚拟的文件系统,里面有lib、lib64、bin、sbin、usr、proc、sys、var、dev、boot、etc等一些目录,称之为虚拟的根文件系统,作用就是将kernel和真的根文件系统建立关联关系,让kernel去initrd中加载根文件系统所需要的驱动程序,并以读写的方式挂载根文件系统,并让执行用户当中第一个进程init。


/etc/inittab

/sbin/init启动会用到/etc/inittab所定义的条目,如:默认登陆级别id:3:initdefault:

可以使用runlevel或who -r命令来查看当前系统运行的级别 


/etc/rc.d/rc.sysinit 系统初始化脚本    

设置主机名     /etc/sysconfig/network 

设置欢迎信息

激活udev和selinux

挂载/etc/fstab文件中定义的文件系统  (mount命令)

检测根文件系统,并以读写重新挂载

设置系统时钟

激活swap设备

/etc/sysctl.conf文件设置内核参数

激活lvm及软raid设备

加载额外设备的驱动程序

清理操作


根据/etc/rc.d/rc脚本运行对应级别下启用或停止的服务;

服务所在目录/etc/rc.d/rc.#.d/*  #对应运行级别0-6

0 关机
1 单用户模式(root,无需登录,使用passwd可直接修改root密码),single,维护模式;
2 多用户模式,会启动网络功能,但不会启动网络文件系统NFS;维护模式
3 多用户模式,正常模式;文本界面
4 预留级别
5 多用户模式,正常模式;图形界面
6 重启

注意:正常级别下,最后启动供应服务S99local没有链接至/etc/rc.d/init.d一个服务脚本,而是指向了/etc/rc.d/rc.local脚本,因此,不便或不需写入服务脚本放置于/etc/rc.d/init.d/目录,且又想开机时自动运行的命令,可直接放置于/etc/rc.d/rc.local文件中


设置 终端   /sbin/mingetty    (/etc/inittab中定义的) 

wKioL1XoFyDDKWktAADeT6KmUc4615.jpg

[配置项目]:[run level]:[init 的动作行为]:[命令项目]

1、配置项目:最多四个字节,代表 init 的主要工作项目,只是一个简单的代表说明。

2、run level:该项目在哪些 run level 底下进行的意思。

        如果是 35 则代表 runlevel 3 与 5 都会运行。

3、init 的动作项目:主要可以进行的动作项目意义有:

inittab 配置值 意义说明
initdefault 代表默认的 run level 配置值
sysinit 代表系统初始化的动作项目
ctrlaltdel 代表 [ctrl]+[alt]+[del] 三个按键是否可以重新启动的配置
wait 代表后面栏位配置的命令项目必须要运行完毕才能继续底下其他的动作
respawn 代表后面栏位的命令可以无限制的再生 (重新启动)。举例来说, tty1 的 mingetty 产生的可登陆画面, 在你注销而结束后,系统会再开一个新的可登陆画面等待下一个登陆。

4、命令项目:亦即应该可以进行的命令


三、CentOS 6与CentOS 5不同的地方

init程序类型:

Centos5     init程序为:sysv,其配置文件:/etc/inittab

Centos6     init程序为:upstart ,其配置文件:/etc/inittab, /etc/init/*.conf

                注意:/etc/init/*.confi文件语法 遵循 upstart 配置文件语法格式     


ramdisk :  内核中的特性之一:使用缓存和缓存对磁盘上的文件访问

 Centos5     initrd ,工具程序 : mkinitrd             

 Centos6     initramfs ,工具程序: mkinitrd,dracut



你可能感兴趣的:(linux,grub,init,系统启动)