GRUB相关说明: linux
主要是由device.map,menulst,stage1,stage2,以及一系列的stage1_5组成。网络
device.map:存放的是内核文件的根分区ide
menu.lis:为菜单列表,里面为可选择的菜单列表,存放于stage2中。spa
stage:用于grub引导程序过大,因此分2段引导,第一段存放在MBR中,第二段存放于内核文件系统中,第一段引导完成后能够找到第二段。 可是,第二段是存放于内核文件系统中的,此时尚未格式化文件系统,如何能够访问到第二段的menu.lst,就须要借助于中间层 stage1_5,有它来协助 stage1 段来访问stage2阶段。stage1_5一般位于stage1 字段后的 63 个扇区。 因为stage2 在内存中存放可使用的文件系统不肯定,因此这就是有多个stage1_5 的缘由。操作系统
Grub Legacy:分三阶段接口
stage1:存放在MBR上进程
stage1_5:存放在MBR以后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统;内存
stage2:磁盘分区(/boot/grub/)it
引导加载程序先读取MBR上的gurb第一阶段,因为MBR很小只有512字节采用grub这种方式引导程序,随后读取扇区中的stage1.5阶段,读取1.5阶段之后从而就能驱动第二阶段stage2所在的磁盘分区,stage2是存放在磁盘分区上的还包括了内核文件及ramdisk等都在这个分区上存放的;这就是为何经过Bootloader之grub就可以加载内核文件的缘由。io
注意:当前硬件平台,主板BIOS必须能识别硬盘,而后BIOS才能加载硬盘中的Bootloader,磁盘中的Bootloader自身加载完之后,就可以识别当前主机上的硬盘设备了。
但硬盘设备能识别,并不表明硬盘上的文件系统能识别,由于文件系统是额外附加的一层软件组织的文件结构,因此要可以对接一种文件系统,必需要用到文件系统驱动;对应的应用程序必须能识别和理解这样的文件系统才能够,这种程序就称为文件系统驱动;grub的1.5阶段就是给gurb提供了文件系统驱动的,从而就可以访问对应的第二阶段和内核所在的分区了,这一般是一个基本磁盘分区;因此grub第二阶段以及内核和ramdisk文件一般都会放在一个基本磁盘分区上;由于grub驱动不了逻辑卷这种高级接口。
stage2通常是挂载至/boot/grub/目录下;grub也有本身的配置文件:/boot/grub/grub.conf且一般有个符号连接文件:/etc/grub.conf;
stage2的功用:
(1)提供菜单或交互式接口;
(2)能加载用户选择的内核或操做系统;
(3)为菜单经过了保护机制。
/boot/grub/grub.conf配置文件详解:
进入单用户模式:
1)编辑grub菜单,选定要编辑的title,然后使用e命令
2)在选定的kernel后附加1 ,s 或single
3)在kernel所在的行,键入b键
演示:
启动时按e键:
上下选择到kernel后按e编辑输入1或s、S、single,再次按b键重启
六、根切换
在挂载根文件系统时为了不内核中有bug或操做过程当中有bug致使根文件系统被损坏,先只读挂载根文件系统,加载完成后才读写挂载,完成整个挂载根文件系统后,直接去找/sbin/init程序,即开始运行用户空间的第一个程序。
用户空间启动流程
七、/sbin/init程序
init程序主要依赖于配置文件:/etc/inittab,大致分为:设定默认启动级别 --> 设定系统初始化脚本 --> 启动对应级别的服务 --> 打印各终端登陆界面(若是级别为3处理提供文本登陆界面,若是级别为5还提供图形登陆界面)
八、设置默认运行级别
(1)运行级别:为了系统的运行或维护等目的而设定的机制;
0-6:共7个级别;
0:关机,shutdown
1:单用户模式(single user),root用户,无须认证,维护模式;
2:多用户模式(multi user),会启动网络功能,但不会启动NFS,维护模式;
3:多用户模式(multi user),彻底功能模式,文本界面;
4:预留级别:目前无特别使用目的,但习惯以同3级别功能使用;
5:多用户模式(multi user),彻底功能模式,图形界面;
6:重启,reboot
图示:
读取配置文件:/etc/inittab
(2)配置文件:/etc/inittab定义了不少功能,每一行定义一种操做(action)以及与之对应的process(仅适用于CentOS 5),一行就定义了init要执行的任务,甚至是一堆任务,每一行的语法格式为:
id:runlevels:action:process
id为一个任务的标识符;
runlevels:在哪些运行级别下启动此任务;例:3,2345,也可为空表示全部级别;
action:在什么条件下启动此任务;
wait:等待切换至此任务所在的级别时执行一次(刚刚切换进来时);
respawn:一旦此任务终止时,就自动重启;(如:登陆终端执行logout登出后会再次启动)
initdefault:设定默认容许级别;此时process省略为空;
sysinit:设定系统初始化方式,此处通常为指定/etc/rc.d/rc.sysinit脚本;(CentOS 5,6都用到此脚本,CentOS 7是靠systemd完成的),在CentOS 6中仅保留此配置文件中设定启动运行级别的功能。
process:具体任务;一般为应用程序,或脚本,或二进制的程序,取决于自定义。
演示:
九、系统初始化脚本
系统初始化脚本:/etc/rc.d/rc.sysinit
(1)设置主机名;
(2)设置欢迎信息;
(3)激活udev和selinux;
(4)挂载/etc/fstab文件中定义的全部文件系统;
(5)检测根文件系统,并以读写方式从新挂载根文件系统;(从新挂载是指根文件检测完以后)
(6)设置系统时钟;
(7)根据/etc/sysctl.conf文件来设置内核参数;
(8)激活lvm即软raid设备;
(9)激活swap设备;
(10)加载额外设备的驱动程序;(内核加载驱动只加载根文件系统的)
(11)清理操做;
注意:在init配置文件:/etc/inittab中,有一行内容是定义/etc/rc.d/rc.sysinit,此脚本文件是负责完成系统初始化的脚本文件。
十、关闭/启动对应级别下的服务
脚本文件/etc/rc.d/rc做用为当级别切换时启动或中止服务;此脚本接受传递的参数给脚本中$runlevel变量,而后,读取/etc/rc$runlevel.d/K*和/etc/rc$runlevel.d/S*全部文件,这些文件就是为何开机启动后,有些服务会自动启动,有些服务没有启动的缘由。
K*:要中止的服务,K##*,优先级,数字越小,越优先关闭,依赖的服务先关闭,而后再关闭被依赖的。
S*:要启动的服务,S##*,优先级,数字越小,越是优先启动,被依赖的服务先启动,而依赖的服务后启动。
/etc/rc.d/init.d目录还有个连接目录为/etc/init.d目录,这两目录下文件相同。
如上诉定义将会启动3级别下的以S打头的进程:
图示:
十一、启动终端(图形终端)
操做系统启动完成