CentOS 5 CentOS 6 启动流程及关键步骤
1、加电自检:当打开主机电源时,主机会唤醒cpu,使其运行CMOS中的BIOS,
BIOS检查必要的硬件是否存在(内存、硬盘等)
BIOS其实是一个小型系统,可以完成一些像检测这样的任务。
自检若不通过,关机
2、BIOS查找可启动设备
自检通过,根据BIOS设定的启动顺序(一般有硬盘启动、光盘启动、移动设备启动、以及网络启动等,这个设定值可通过人工干预修改以使加载不同的系统)找到第一个具有引导程序(bootloader)即为要加载的设备,否则继续查找
3、MBR引导
引导程序在windows中叫ntloader,在linux早期叫LILO,LInux Loader,在CentOS5,6等版本便为GRUB 0.x,GRUB legacy,bootloader是在MBR(512字节)的前446个字节,紧接着64字节是分区表、剩余两个字节表示分区表是否可用
4、GRUB查找要加载的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选择菜单,如下图,假如你的主机中不止一个操作系统,你可以根据需要选择不同的操作系统;
仔细看菜单下面的选项,键入e键,可在开机前进入编辑模式,如下图,
方框内第一行代表boot目录所在的位置,此处为第一个磁盘第一个分区,
方框内第二行就是你的内核位置及内核,
方框内第三行ramdisk(ramfs),这是一个虚拟文件系统,可通过这个文件系统可找到根分区位置 以方便内核找到根分区、init程序、以及必要的驱动程序、库文件
在这个界面,如果再次键入e键,可对你选择的选项进行修改!
在这两个界面中你也可以按c进入GRUB的命令
在以上两个界面中你也可以按c进入GRUB的命令行模式
这样手动指定内核及initrd也能启动系统
5、加载内核S
GRUB通过GRUB2找到内核及ramdisk,GRUB将CPU的控制权交给内核;CPU将内核加载到内存中;此刻内核将是系统的主角,控制着整个操作系统,CPU探测可识别的所有硬件设备,将ramdisk中加载到内存中;kernel借助ramdisk找到真正的根分区,以只读方式挂载根文件系统;完成根切换。
linux内核是单内核体系设计,但又引入了模块化机制;一般有内核核心(/boot/vmlinuz)、内核对象(lib/modules/VERSION-RELEASE)、辅助文件(/boot/[initrd|initramfs])组成
kernel的功能:进程管理、内存管理、文件系统管理、网络管理、驱动程序管理、安全功能
ramdisk具有根文件系统驱动、根文件系统,是在安装系统时根据根分区文件系统及硬件的驱动动态生成的
ramdisk在CentOS5(initrd)上是以一个磁盘的格式存在的,CPU与之传输时还要经过层层缓存,因此比较慢;而在CentOS 6(initramfs)上,则以一个文件系统的身份运行,文件系统自身具有缓存功能,无需缓存,因此较快,其磁盘位置一般为(/boot/initrd-VERSION-RELEASE.img 或/boot/initramfs-VERSION-RELEASE.img)
ramdisk文件可通过mkinitrd或dracut命令制作,制作原理同安装系统时的动态生成
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
id:3:initdefault 表示默认开机级别为3,自动进入字符界面
si::sysinit:/etc/rc.d/rc.sysinit 系统初始化
l#:#:wait:/etc/rc.d/rc 0 当键入init #时,进入该运行级别
tty1:2345:respawn:/usr/sbin/mingettytty1 在2345级别下运行中端tty1
注:CentOS6是靠/etc/init/rcS.conf启动服务的
当进入指定级别时,运行指定级别下的服务,指定级别下有服务脚本链接,当进入指定级别式,会运行其目录下的(k/s开头的kill或start脚本)
也可以手动修改、删除或添加某级别下的服务(chkconfig)
7、系统初始化
根据/etc/rc.d/rc/rc.sysinit/系统初始化脚本实现的
(1) 设置主机名
(2) 设置欢迎界面
(3) 激活udev和selinux
(4) 挂载/etc/fstab文件中定义的文件系统
(5) 检测根文件系统,并以读写方式重新挂载根文件系统
(6) 设置系统时钟
(7) 激活swap设备
(8) 根据/etc/sysctl.conf文件设置内核参数
(9) 激活lvm及software raid设备(硬raid是在开机时启动的)
(10) 加载额外设备驱动程序
(11) 清理操作
自此开机完成,系统会在指定级别中运行指定服务
(3)kernel2.4以后(3)中udev主要在系统第一次访问硬件时,根据/sys目录中的文件生成/dev下的内容,以方便管理员管理硬件
(5)在ramdisk的帮助下,kernel第一次将根文件系统以只读方式加载如内存、
它只能读,不能写入数据,这次将以读写方式加载根文件系统