RHEL6 启动过程

在 Red Hat Enterprise Linux 6 中,sysvinit 软件包中的 init 已经由 Upstart 替换,它是基于事件的 init 系统。这个系统可处理在引导过程中的任务和服务启动,在关机过程中关闭它们并在系统运行时监控它们。rhel6的启动流程发生了比较大的变化。对于熟悉其流程非常重要,对系统的排错有很大的帮助。

————————————————————————————————–

1、BIOS加电,进行硬件自检。然后产生int 19的终端,读取第一个可引导的设备,比如自检,初始化各种芯片,控制器,与端口;包括显示器,内存,键盘,软驱,串口等等最终,POST(Power-On Self Test)执行INT 19h中断,找到可以启动的磁盘,并将boot程序装入内存,并将控制权交给OS的boot程序。当BIOS INT 19h被执行以后,系统进入OS Booting阶段。

————————————————————————————————–

2、一块硬盘,有一个主引导记录,就是0面0道1扇区,又称MBR。MBR是由BIOS自动装载到内存中并CPU跳转过去执行的。主引导记录(Master Boot Record,缩写:MBR),又叫做主引导扇区,是计算机开机后访问硬盘时所必须要读取的首个扇区,它在硬盘上的三维地址为(柱面,磁头,扇区)=(0,0,1)。共512 Byte。

_____________________________________________

| | | |

| 引导代码 446 Byte | 分区表 64 Byte | 结束符2 Byte |

|_________________|______________|_________ ___|

————————————————————————————————–

3、读取第一个可引导的设备的MBR的BootLoader程序,在rhel系统上是Grub.

stage1:

/boot/grub中的stage1文件大小为512b,它是引导扇区中引导程序(前446字节为引导程序)的备份文件,功能是用来装载 stage1.5或stage2的。

stage1.5:

因为STAGE2较大,通常都是放在一个文件系统当中的,但是STAGE1并不能识别文件系统格式,所以才需要stage1.5来引导位于某个文件系统当中的STAGE2,根据文件系统格式的不同,STAGE1.5也需要相应的文件,如:e2fs_stage1_5,fat_stage1_5,分别用于识别 ext和fat的文件系统格式。但是,当stage1加载1.5时,原则上是不认识ext文件系统的,应该也是无法找到1.5程序的,而实际上在安装 grub时,程序已经把1.5程序写到硬盘最前面的32K中,因为紧连着MBR的一段硬盘空间通常是空白无用的,grub就把stage1.5程序写到这个地方,这个地方没有文件系统,stage1程序可以直接去加载stage1.5。

————————————————————————————————–

4、Grub进程第二阶段引导,读取/boot/grub/grub.conf配置文件,根据配置文件中的定义,加载相应的内核,内核再加载相应的硬件驱动,进行必要的基础硬件初始化

stage2:

grub能让用户以选项方式将OS加载、改变参数、修改选项,这些全都是stage2程序的功能。stage2可以去获取grub.conf以及menu.lst等文件的内容。

[root@osdba~]# ls /boot/

config-2.6.32-71.el6.i686 <===系统kernel的配置文件,,内核编译完成后保存的就是这个配置文件

efi &lt;===Extensible Firmware Interface(EFI,可扩展固件接口)是 Intel 为全新类型的 PC 固件的体系结构、接口和服务提出的建议标准。

grub &lt;===开机管理程序grub相关数据目录

initramfs-2.6.32-71.el6.i686.img &lt;===虚拟文件系统文件(RHEL6用initramfs代替了initrd,他们的目的是一样的,只是本身处理的方式有点不同)

initrd-2.6.32-71.el6.i686.img &lt;===此文件是linux系统启动时的模块供应主要来源,initrd的目的就是在kernel加载系统识别cpu和内存等内核信息之后,让系统进一步知道还有那些硬件是启动所必须使用的;

symvers-2.6.32-71.el6.i686.gz &lt;===模块符号信息

System.map-2.6.32-71.el6.i686 &lt;===是系统kernel中的变量对应表;(也可以理解为是索引文件)

vmlinuz-2.6.32-71.el6.i686 &lt;===系统使用kernel,用于启动的压缩内核镜像。

[root@osdba~]# cat /boot/grub/grub.conf

# grub.conf generated by anaconda

#

# Note that you do not have to rerun grub after making changes to this file

# NOTICE: You have a /boot partition. This means that

# all kernel and initrd paths are relative to /boot/, eg.

# root (hd0,0)

# kernel /vmlinuz-version ro root=/dev/sda3

# initrd /initrd-[generic-]version.img

#boot=/dev/sda

default=0

timeout=5

splashimage=(hd0,0)/grub/splash.xpm.gz

hiddenmenu

title Red Hat Enterprise Linux (2.6.32-71.el6.i686)

root (hd0,0)

kernel /vmlinuz-2.6.32-71.el6.i686 ro root=UUID=bfd97ccd-15df-4e0f-8a66-b2da62213f62

rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM

LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us crashkernel=auto rhgb quiet

initrd /initramfs-2.6.32-71.el6.i686.img

default #启动系统时在人为不干预的情况下,默认读取哪一个title,如果安装了多个不同版本内核或者安装了不用的操作系统,默认会产生多个title,#0第一个,1第二个,以此类推。

timeout #开机等待用户的超时时间,单位为秒。在超时时间结束时,如果用户没有人为选择,则以default指定的title读取。

splashimage=(hd0,0)/grub/splash.xpm.gz #grub的背景图案

hiddenmenu #隐藏菜单

title Red Hat Enterprise Linux (2.6.32-71.el6.i686) #title后为指定的菜单名字

root (hd0,0)

#root 这里不是管理员的意思,这里的root表示为根文件系统,hd代表硬盘(不区分IDE、SCSI),第一个0:第一个硬盘,第二个0:第一个分区。

#这里的意思是定义第一个硬盘的第一个分区为根文件系统。

kernel /vmlinuz-2.6.32-71.el6.i686 ro root=UUID=bfd97ccd-15df-4e0f-8a66-b2da62213f62 rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us crashkernel=auto rhgb quiet

initrd /initramfs-2.6.32-71.el6.i686.img

#kernel /vmlinuz-2.6.32-71.el6.i686

由boot loader的管理而开始读取内核文件后,接下来,Linux 就会将内核解压缩到主存储器当中, 并且利用内核的功能,开始测试与驱动各个周边设备,包括储存设备、CPU、网卡、声卡等等。 此时 Linux 内核会以自己的功能重新检测一次硬件,而不一定会使用 BIOS 检测到的硬件信息。也就是说,内核此时才开始接管 BIOS 后的工作。内核一般来说,它会被放置到 /boot 里面,并且取名为 /boot/vmlinuz。

#ro root=UUID=bfd97ccd-15df-4e0f-8a66-b2da62213f62

人生没有彩排,每天都是现场直播。

RHEL6 启动过程

相关文章:

你感兴趣的文章:

标签云: