CentOS 5 CentOS 6 启动流程及关键步骤

 

                            wKiom1YLxFGQwfI-AACjpunNGng763.jpg

1、加电自检:当打开主机电源时,主机会唤醒cpu,使其运行CMOS中的BIOS

         BIOS检查必要的硬件是否存在(内存、硬盘等)

         BIOS其实是一个小型系统,可以完成一些像检测这样的任务。

自检若不通过,关机

2BIOS查找可启动设备

自检通过,根据BIOS设定的启动顺序(一般有硬盘启动、光盘启动、移动设备启动、以及网络启动等,这个设定值可通过人工干预修改以使加载不同的系统)找到第一个具有引导程序(bootloader)即为要加载的设备,否则继续查找

3MBR引导

引导程序在windows中叫ntloader,在linux早期叫LILOLInux Loader,在CentOS56等版本便为GRUB 0.xGRUB legacybootloader是在MBR512字节)的前446个字节,紧接着64字节是分区表、剩余两个字节表示分区表是否可用

4GRUB查找要加载的kernel

此处以C5 C6为例,GRUB的主要作用是提供一个菜单,允许用户选择要启动系统或不同的内核版本,把用户选定的内核装载到内存的特定空间中,解压展开,并把系统控制权移交给内核,一台主机上可能装有不止一个操作系统,用户可以根据GRUB提供的启动菜单选定操作系统,随即加载指定内核

         GRUB分为三个阶段,

stage 1  这段代码的其中一段代码是MBR中的 bootloader(446字节)这一步在GRUB 中是不可或缺的,主要负责当BIOS 交接给GRUB 时,载入存在于各分区中的开机文件,也就是所谓的开机管理程序。其大小大约512字节

stage1_5 这段代码是在紧接着MBR的,辅助GRUB识别stage2所在的文件系统所在的磁盘stage1.5 被加载时,就已经赋予GRUB 访问文件系统目录的能力(这段程序中有访问stage2文件系统的驱动),所以,自然可以在开始找不到stage2 的情况下,从文件系统目录中找出stage2 的所在位置,并激活Linux

其大小约32K

stage 2  boot目录中,不一定在根分区上,即,可以独立分区;

         stage提供一个GRUB启动菜单,供用户选择不同的操作系统选择不同的操作系统

         提供选项,访问配置文件、连接下一个bootsector(主机上可能装的不止一个系统,,可能,可以手动选择启动哪个系统,也可以修改其配置文件以达到不同效果)stage2主要就是根据配置文件,或手动选择、设置启动需要的内核或系统!

在系统读秒的过程中按任意键可进入GRUB选择菜单,如下图,假如你的主机中不止一个操作系统,你可以根据需要选择不同的操作系统;wKioL1YLxHbirgqiAAFNxPfq4dc020.jpg

仔细看菜单下面的选项,键入e键,可在开机前进入编辑模式,如下图,

方框内第一行代表boot目录所在的位置,此处为第一个磁盘第一个分区,

方框内第二行就是你的内核位置及内核,

方框内第三行ramdiskramfs),这是一个虚拟文件系统,可通过这个文件系统可找到根分区位置 以方便内核找到根分区、init程序、以及必要的驱动程序、库文件

在这个界面,如果再次键入e键,可对你选择的选项进行修改!

在这两个界面中你也可以按c进入GRUB的命令

wKioL1YLxIeSzWBhAAG_XY-tJ88444.jpg

在以上两个界面中你也可以按c进入GRUB的命令行模式

wKiom1YLxImi6gUgAAFI0aCupd8629.jpg

这样手动指定内核及initrd也能启动系统

 

5、加载内核S

         GRUB通过GRUB2找到内核及ramdiskGRUBCPU的控制权交给内核;CPU将内核加载到内存中;此刻内核将是系统的主角,控制着整个操作系统,CPU探测可识别的所有硬件设备,将ramdisk中加载到内存中;kernel借助ramdisk找到真正的根分区,以只读方式挂载根文件系统;完成根切换。

         linux内核是单内核体系设计,但又引入了模块化机制;一般有内核核心(/boot/vmlinuz)、内核对象(lib/modules/VERSION-RELEASE)、辅助文件(/boot/[initrd|initramfs])组成

         kernel的功能:进程管理、内存管理、文件系统管理、网络管理、驱动程序管理、安全功能

         ramdisk具有根文件系统驱动、根文件系统,是在安装系统时根据根分区文件系统及硬件的驱动动态生成的

         ramdiskCentOS5initrd)上是以一个磁盘的格式存在的,CPU与之传输时还要经过层层缓存,因此比较慢;而在CentOS 6initramfs)上,则以一个文件系统的身份运行,文件系统自身具有缓存功能,无需缓存,因此较快,其磁盘位置一般为(/boot/initrd-VERSION-RELEASE.img /boot/initramfs-VERSION-RELEASE.img

         ramdisk文件可通过mkinitrddracut命令制作,制作原理同安装系统时的动态生成

 

 

6、运行/sbin/init

int是所有进程的起点,init程序负责创建进程和销毁进程

         init程序在CentOS5 SysV(服务串行运行,较慢)配置文件在/etc/initab中,在CentOS6中为Upstart(接近于并行运行,较快),配置文件为/etc/inittab/etc/init/*.conf

         linux具有七个运行级别:

         init0         相当于关机

         init1         单用户模式(root无需登录)single,维护模式

         init2         多用户模式,默认会启动网络功能,但不会启动NFS,维护模式

         init3         多用户模式,正常模式;文本界面

         init4        预留级别,正常模式;图形界面

         init5         多用户模式,图形界面

         init6         相当于重启

配置文件 /etc/inittab下内容的定义

id:runlevel:action:process

id3initdefault                                       表示默认开机级别为3,自动进入字符界面

si::sysinit/etc/rc.d/rc.sysinit             系统初始化

l#:#:wait:/etc/rc.d/rc 0                   当键入init #时,进入该运行级别

tty1:2345respawn:/usr/sbin/mingettytty1        2345级别下运行中端tty1

注:CentOS6是靠/etc/init/rcS.conf启动服务的

当进入指定级别时,运行指定级别下的服务,指定级别下有服务脚本链接,当进入指定级别式,会运行其目录下的(k/s开头的killstart脚本)

         也可以手动修改、删除或添加某级别下的服务(chkconfig

7、系统初始化

根据/etc/rc.d/rc/rc.sysinit/系统初始化脚本实现的

(1)      设置主机名

(2)      设置欢迎界面

(3)      激活udevselinux 

(4)      挂载/etc/fstab文件中定义的文件系统

(5)      检测根文件系统,并以读写方式重新挂载根文件系统

(6)      设置系统时钟

(7)      激活swap设备

(8)      根据/etc/sysctl.conf文件设置内核参数

(9)      激活lvmsoftware raid设备(硬raid是在开机时启动的)

(10)  加载额外设备驱动程序

(11)  清理操作

 

自此开机完成,系统会在指定级别中运行指定服务

3kernel2.4以后(3)中udev主要在系统第一次访问硬件时,根据/sys目录中的文件生成/dev下的内容,以方便管理员管理硬件

5)在ramdisk的帮助下,kernel第一次将根文件系统以只读方式加载如内存、

它只能读,不能写入数据,这次将以读写方式加载根文件系统