您的位置:首页 > 运维架构 > Linux

linux启动流程简单介绍

2011-08-21 18:34 477 查看
首先,我们先了解一下linux开机的整个流程,以了解这些细节,这对我们后面***小

linux系统有很大帮助:

首先,按下你电脑的开关,此时启动流程开始

1、加电自检,POST

2、然后按照BOOT SEQUENCE设定的启动次序,逐个检查你的硬件设备,以查找可用的

boot loader,查找到以后,将bootloader加载到内存中来,

3、bootloader的前446个字节开始引导加载linux系统的内核kernel到内存,然后将内核解压缩,

此时bootloader就完成它的任务就退出了,

4、在bootloader退出前将控制权都交给了内核kernel,内核开始进行系统的初始化,

识别一下基本的硬件,并加载驱动,

5、接下来就开始加载/sbin/init进程了,只是系统的第一个进程,是所有进程的祖父

6、这个进程是在/etc/inittab 的定义下开始执行的,

7、init进程加载完之后就打印登录提示给你了,

当然这只是粗略的介绍一下开机的大致流程,

那么接下来我们就将每一步解读一下,

bootloader:从最初到现在有两款比较强大的

1、LILO(LInux LOader),它可以引导多个linux,但是它有个缺陷就是不能

引导1024柱面的以外的分区

2、GRUB (grand unified bootloader)的功能非常强大,不仅能够引导linux,还可以

引导windows,甚至还可以引动unix,它没有LILO的缺陷,可以引动大硬盘的任何分区

上得操作系统,而且grub本身还不用装在MBR里面,

它甚至可以装在某个分区的引导扇区里,但是,grub只要不在MBR里,就必须需要别

的装在MBR内来引导,因此grub一般都装在MBR内,但是问题又来了,我们知道在MBR

内只有446个字节来存放bootloader,而这么小的空间grub怎样来实现这么强大的功能

,显然是有些吃力的,所以我们的grub为了不将自己局限在这446个字节内,而把自己

分成了N段,主要分成了两段,第一段就是那446个字节放在bootloader里,目的是来

启动第二段,别的什么都不干,

Stage1:boot stage2

Stage2: 位于磁盘分区上,在磁盘分区上空间就大了,一般来讲不但可以给你引导操作

系统,还可以给用户提供一个图形界面,光这个图片就不止446个字节了吧,这些东西

都是在内核所在的目录下,/boot/grub,所以第一个阶段就是引导启动第二个阶段,

第二个阶段就是在/boot/grub目录下,这个阶段还有一个配置文件叫grub.conf,而第二

阶段的运行就是在这个配置文件的支配下来运行的。

其实,grub是三个阶段的,还有一个1_5阶段,我们可以到/boot/grub下来看一下

这些1_5其实就是文件系统不一样,那就是说明第二阶段很可能在不同的文件系统,

所以这主要用于对某个特定的文件系统的装载,或者是驱动某个特定的文件系统

在这个目录下有一个红色字样的splash.xpm.gz文件,他就是你在开机时进入系统选择

界面看都的那个背景图片,如果你觉得它难看,你可以将其改为你喜欢的图片,方法很

简单

那先来总结一下grub的功能:

1、可以实现让你选择操作系统

2、在你选择操作系统之后还可以给这个操作系统的内核传递一个参数

也就是说grub本身还具有编辑功能,打开编辑模式可以直接向内核传递参数的

3、还有加密保护的功能,就是给你的内核设置一个密码,有了这个密码就可以

防止你的内核接受除了你之外的任何人传递的参数

接下来我们共同研究一下kernel加载的过程

一般来讲内核是放在我们系统上的一个独立分区,这个分区直接挂载到/boot目录下

,也就是说,一般来讲内核就在此处了,有一个叫vmlinuz-2.6.18-el5的文件就是我们

的内核,这只是其中的一个版本,后面有主版本号,次版本号等信息,这个内核

一般都很小,一方面是因为压缩了,一方面是因为很多功能和驱动都做成了模块儿放在了

内核的外面,我们的内核文件就是在boot目录下存储

而我们的grub也在这个目录下,所以由此可以看出这个boot目录至关重要,这个分区

至关重要,操作系统的整个启动文件都在这个目录下,

由于grub要启动系统它就需要去加载内核,去加载内核就要到这个分区上来找,还

需要加载一些驱动,一些额外的文件也需要到这个分区来找,grub自己本身就在这个

分区下,而grub本身的所有的引导过程都是靠在Bootloader内的第一个阶段内的

446个字节引导程序来实现的,这些引导程序除了能够加载位于某个基本磁盘分区上

的某些程序之外没有任何意义,没有其他额外的功能其他的程序是加载不上的,

所以,这个分区所在设备不能是一个软RAID设备,也不能是一个LVM设备,因为要加载

这些设备就需要有驱动,但是在那446个字节内是放不下这么多内容的,最多可以使用

RAID 1,因为它本身就是一个镜像盘,只要其中一个就够了,所以一般还是建议将这个

分区放到一个基本磁盘分区上,这也是为什么将它独立分区的原因

在这个目录下还有一个较initrd的文件,这个文件除了开头跟我们的内核不太一样

以外其余的基本都一样,将这个解压你会发现,里面是一个完整的linux系统,所以它就是来虚拟一个

linux跟文件系统,让内核加载上来,然后提供一个可以让内核可以读取真正根分区的驱动程序的,

因此,内核装在进来之后,就马上将这个文件读取进来,将其展开,从中读到驱动程序,然后读到真正

的跟文件系统,然后内核完成初始化,然后将去执行下一个程序

kernel的共做:

1、要做硬件探测。

2、驱动程序的初始化

3、以只读方式加载根文件系统

4、装在并启动init进程

内核任务完成之后就将权利给了,init进程了

这个程序就是/sbin/init,这个进程的工作都是在inittab的支配下完成的,

格式主要是冒号隔开的四个段:

第一段:纯粹的表示信息

第二段:runlevel。运行级别,主要是用于定义第三段的动作的

第三段:action,用于定义怎样启动这个进程的

第四段:process

以上完了之后就执行mingetty,然后打印一个login,系统启动到此时就基本完成了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: