Rhel启动过程分析


主要参考文档:

http://blog.163.com/rhce_cn/blog/static/71417518200852212816379/

http://www.doc88.com/p-474114520477.html

 

对操作系统的启动过程有一个清晰的理解有助于开机失败的故障诊断。比如有人打电话咨询,说他电脑启动不来了,显然这句描述对问题定位来说是个很宏大的概念,如果你心中对计算机的启动过程很了解的话,你会详细询问启动到哪个画面失败了,比如直接按了开机键屏幕还一片黑,一点反应都没有,或者进入到bios界面,下一步没了反应,又或者是进入到了让选择操作系统的界面,按enter后就进不去了等等。这些才是定位问题出在哪一流程的有用信息。

以前总结过windows的启动过程,后来文档丢了,就没再重新整理过,今天整理下rhel的启动过程。我想,大部分liunx系统应该也差不了多少。

 

第一步:读BIOS

开机自检过程。主要检查cpu,内存,风扇、硬盘等硬件是否正常。其中bios中有设置下一步引导顺序的选项,即选择下一步引导加载的硬盘是哪一块。

第二步:加载MBR

根据BIOS中的设置,选择加载电脑上的硬盘。MBR全程为Master  Boot  Record,即主引导记录,它就是该硬盘001扇区。这个MBR大小为512个字节,其中钱446个字节就是系统引导程序,一般是lilo或者grub,后面有64个字节空间用于存储MBR分区表,MBR硬盘每一个分区表项信息占用16个字节,因此对于MBR硬盘来说,最多有4个分区,要么是4个主分区,或者3个主分区和一个扩展分区,扩展分区最多只能有一个,但扩展分区可以划分成若干个逻辑分区。MBR的结构为:


 

下面系统引导程序为grub的运行流程:

Grub程序有stage1stage2stage1_5menu.lst四个文件。其中stage1就是放在MBR中代码区的内容,它的主要作用就是定位和装载stage2Stage2才是实现grub引导功能的关键部分,它提供了grub启动菜单和交互式的grubshellgrub菜单就是那个让你选操作系统的界面,交互式的shell就是你在选操作系统菜单界面中按“E”键进入的那个shell。但是stage1由于只有446B,并不能识别具体的文件系统,这样就不能进入某个具体的目录去加载stage2,而stage1_5则提供了识别文件系统的功能,它是stage1stage2之间的过渡。若文件系统是ext2格式,则stage1先加载e2fs_stage1_5,若文件系统是fat,则stage1加载fat_stage1_5Stage2在运行时候,加载menu.lst,即grub.conf文件中的配置信息,完成grub的菜单显示。

Grub根据用户选择,加载系统内核的引导文件,并将cpu的控制权交给系统内核。

下面说一些多系统引导的东西。

首先grub是支持多系统引导的,而且grub是根据grub.conf中的配置直接定位系统所在磁盘,加载内核。而windows的引导程序则不是这样,windowsbios之后加载MBRMBR中存在了windows的系统引导程序,这段程序会直接查找并加载活动分区中的系统内核引导程序,然后根据用户选择再去寻找磁盘分区,加载该分区上的内核,即如果是双系统,a装在hd0,0),b装在hd0,1),那么他们系统的内核分别位于各自系统文件所在磁盘,若用户选择启动a系统,则直接从hd0,0)中加载内核,若启动b系统,则直接从hd(0,1)上加载系统内核。可见,只用grub是不需要活动分区这一概念的,它只在windows引导程序中存在,所以如果MBR中存在的是windows的引导程序,则无论系统安装在哪个分区,其内核引导文件必须防止在活动分区。即,如果机器是双系统,一个安装在e盘,一个安装在f盘,而活动分区是C盘,那么e盘系统和f盘系统的系统内核引导程序必须放在活动分区即C盘。

其次,grub引导方式3中,

一种是直接引导。一种是chinaload方式,一种是从网络引导。从网络引导没插,直接引导就是直接从系统所在磁盘加载内核引导文件,chainload方式我理解的就是链引导,比如grubwindows就是使用这种方式,就是grub在加载指定的系统内核之前,先加载并将控制权移交给该系统内核所使用的系统引导程序,然后再经过一步选择,才加载系统内核引导程序。

最后说下grub.conf文件的语法

-===================公共设置部分========================

default=0       //设置默认启动的操作系统

timeout=5       //启动前等待的时间

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

Hiddenmenu

===================操作系统设置部分=======================

title Red Hat Enterprise Linux Server (2.6.18-164.el5)         //grub菜单中该系统显示名称

root (hd0,0)                                       //系统所在磁盘分区号

kernel /vmlinuz-2.6.18-164.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet

//kernel指名内核文件,它是位于指定分区的/boot文件夹下。Ro是指read  olny,以只读方式加载内核,以防加载过程中出现意外导致系统损坏。Root=是设置根目录的位置。Rhgb是以图形界面显示,删除它就是以文本方式显示。Quiet是指启动过程中不显示错误信息。

initrd /initrd-2.6.18-164.el5.img     

               //将initrd映像文件加载到内存。这个文件里面存放的都是驱动程序

第三步:加载系统内核

grub中做出选择后,就按照grub中的配置,加载内核,并将系统硬件的信息和控制权转交给内核;然后加载驱动程序,接下来就是加载文件系统了,也就是加载开机所需要的库文件,程序等,所以/etc /bin /sbin /dev /lib这些目录的根目录必须是同一个分区,否则会造成Linux的开机失败(有待验证)。

第四步:初始化系统

加载完系统的各种东西之后,计算机首先

启动init程序

这个程序是用来初始化系统环境的,因此它总是第一个启动,因此其PID号永远是1.

init程序首先执行/etc/rc.d/rc.sysinit

这个脚本,这个脚本是用来初始化操作系统的,主要有设定计算机名称、设定系统时间、加载一些设备,检查根目录等。

然后Init程序查询inittab文件,

这个文件是指定系统的运行级(runlevel),一般有0-6个。根据这个文件的配置,加载/etc/rc*.d文件夹下的内容。比如inittab文件默认系统启动运行在5运行级上,则系统按照/etc/rc.d/rc5.d/文件夹中的内容,依次执行文件夹里的程序。可以再命令行下,使用ls  -l查看。这些文件都是以KS开头,其中K表示停用,S表示启用程序,两位数字表示执行的先后顺序,数字越小,越先执行,数字后面是程序名称。系统会按照以上的这个目录总的程序,先关闭某些程序,然后启动某些程序。

执行Run Level目录中相对的程序链接后,都会

最后执行rc.local程序

所以平时我们可以修改这个文件,可以将需要将开机执行的程序或者是指令写入这个文件中。

至此,系统就启动完成了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值