linux引导顺序系统启动过程大致按照洳下步骤进行(这是一个简述):
第一阶段:BIOS启动引导阶段;
的初始化以及查找启动介质;
第二阶段:GRUB启动引导阶段;
和initrd文件到内存中
第㈣阶段:Sys V init初始化阶段:
同时在上述过程中各阶段所需要读取的文件和操作的对象:
鼠标等)硬件配置信息及一些
执行POST代码对系统外围关鍵设备检测通过后,系统启动自举程序 根据我们在BIOS中设置的启动顺序搜索启动驱动器(比如的
等)。选择合适的启动器比如通常情况丅的硬盘设 备,BIOS会读取硬盘设备的第一个扇区(MBR512字节),并执行其中的代码实际上这里BIOS并不关心启动设备第一个扇区中是什么内容,咜只是 负责读取该扇区内容、并执行BIOS的任务就完成了。此后将系统启动的控制权移交到MBR部分的代码
注: 在我们的现行系统中,大多关鍵设备都是连在主板上的因此主板BIOS提供了一个操作系统(
)和系统外围关键设备(硬件)最底级别的接口,在这 个阶段检测系统外围關键设备是否“准备好”,以供操作系统使用
BIOS通过下面两种方法之一来传递引导记录:
在磁盘主引导记录(MBR)中
无论上面的哪种情况中,IPL都是MBR的一部分并应该存储于一个不大于446字节的磁盘空间中因为MBR是一个不大于512字节的空间。
因此IPL仅仅是GRUB的第一个部分(stage1)他的作用就昰定位和装载GRUB的第二个部分(stage2);stage2对启动系统起关键作 用,该部分提供了GRUB启动菜单和交互式的GRUB的shell启动菜单在启动时候通过/boot/grub/grub.conf文件所定义的內容生 成。在启动菜单中选择了kernel之后GRUB会负责解压和装载kernel
完成之后后续的引导权被移交给kernel。
注:此时stage1是没有能力识别文件系统的其定位硬盘0头0道2扇区过程如下:
注:这里的stage2或者stage1_5不是/boot分区/boot/grub目录下的文件,这个时候grub还没有能力识别任何文件系统分以下 两种情况:
围有限,限淛在8GB以内因此这种情况需要将/boot分区分在硬盘8GB寻址空间之前。
假如是情形(2)我们将/boot/grub目录下的内容清空,依然能成功启动grub;假如是情形(1)将/boot/grub目录下stage2 删除后,则系统启动过程中grub会启动失败
这个地方经常要进行的操作:
是关于grub常用的几个指令对应的函数:
如阶段2所述,grub>boot指令后系统启动的控制权移交给kernel。Kernel会立即初始化系统中各设备并做相关配置工作其中包括 CPU、I/O、存储设备等。
关于设备驱动加载有两蔀分:一部分设备驱动编入linux引导顺序 Kernel中,Kernel会调用这部分驱动初始化相关设备同时将日志输出到kernel message buffer,系统启动后dmesg可以查看到这部分输出信息另外有一部分设备驱动并没有编入Kernel,而是作为模块形式放在 initrd(ramdisk)中
在2.6内核中,支持两种格式的initrd一种是2.4内核的文件系统
initrd是一种基于内存的文件系统,启动过程中系统在访问真正的根文件系统/时,会先访问initrd文件系统将initrd中的内容打开来看, 会发现有bin、devetc、lib、procsys、sysroot、init等文件(包含目录)其中包含了一些设备的驱动模块,比如scsi ata等设备驱动模块同时还有几个基本的可执行程序 insmod, modprobe, lvm,nash主要目的是加载一些存储介质嘚驱动模块,如上面所说的scsi ideusb等设备驱动模块初始化LVM,把/根文件系统以只读方式挂载
initrd中的内容释放到rootfs中后,Kernel会执行其中的init文件这里的init昰一个脚本,由nash解释器执行这个时候内核的 控制权移交给init文件处理,我们查看init文件的内容主要也是加载各种存储介质相关的设备驱动。
驱动加载后会创建一个根设备,然后将根文件系统/以只读的方式挂载这步结束后释放未使用内存并执行switchroot,转换到真正的根/上面去哃 时运行/sbin/init程序,开启系统的1号
此后系统启动的控制权移交给 init 进程。关于switchroot是在nash中定义的程序
linux引导顺序 Kernel需要适应多种不同的硬件架构,但昰将所有的硬件驱动编入Kernel又是不实际的而且Kernel也不可能每新出一种硬件结构,就将该硬件 的设备驱动写入内核实际上linux引导顺序 Kernel仅是包含叻基本的硬件驱动,在系统安装过程中会检测系统硬件信息根据安装信息和系统硬件信息将一部分设备驱动写入 initrd 。这样在以后启动系统時一部分设备驱动就放在initrd中来加载。
init进程起来后系统启动的控制权移交给init进程。
/sbin/init进程是所有进程的父进程当init起来之后,它首先会读取配置文件/etc/inittab进行以下工作:
1)执行系统初始化脚本(/etc/rc.d/rc.sysinit),对系统进行基本的配置以读写方式挂载根文件系统及其它文件系统,到此系统基夲算 运行起来了后面需要进行运行级别的确定及相应服务的启动;
2)确定启动后进入的运行级别;
3) 执行/etc/rc.d/rc,该文件定义了服务启动的顺序昰先K后S而具体的每个运行级别的服务状态是放在/etc/rc.d /rcn.d(n=0~6)目录下,所有的文件均链接至/etc/init.d下的相应文件
5) 有关UPS的脚本定义
7)在运行级别5上运行X
這时呈现给用户的就是最终的登录界面。
至此系统启动过程完毕:)
根文件系统的检查和二次挂载(读写),
检查并挂载其它文件系统
GRUB嘚基本原理以及对GRUB的操作控制方法:
GRUB全称为Grand Unified Boot Loader是linux引导顺序操作系统主流的启动引导管理器。主要作用是启动和装载linux引导顺序操作系统系統启动过程中一旦完成了BIOS自检,GRUB会 被立刻装载在GRUB里面包含了可以载入操作系统的代码以及将操作系统引导权传递给其他启动引导管理器嘚代码。GRUB可以允许用户选择使用不同的 kernel启动系统或者在启动系统的过程中设置不同的启动参数。
而通常BIOS会以下面两种方法之一来调用启動引导管理器:
将控制权移交给其他启动引导管理器再由他们将控制权移交给安装在分区引导扇区的IPL
通常情况下启动引导管理器GRUB由两部汾组成(stage1和stage2):
stage1比较小,通常可以驻留在MBR或者各个磁盘分区的启动扇区中主要作用是装载stage2。
stage2比较大从磁盘的启动引导分区读取
在linux引导順序系统中对GRUB的配置有两种方法:
会将启动引导管理器的stage1安装在MBR上,这时启动引导管理器必须被配置为可以传递控制权到其他操作系统;
會将启动引导管理器的stage1安装在一些分区的引导扇区上而其他的启动引导管理器会被安装在MBR上,由他们来向linux引导顺序启动引导管理器传递控制 权
GRUB在启动过程中可以提供
行交互界面,可以从ext系 列reiserfs,fat等多种文件系统引导系统并且可以提供密码加密功能,其内容在/boot分区下系统启动过程中由配置文件/boot /grub/grub.conf来定义启动方式,对该配置文件的更改会立即生效
grub所在的分区,引导系统所使用的kernel文件位置硬件初始化使鼡的initrd文件位置,以及启动参数
可见其指定的内容大多数在/boot分区,如果切换到/boot分区之后会看到这些内容:
通常GRUB出错几率不是很大但一旦絀现问题恐怕采用最多的方式是重装grub到MBR中。
在这种时候需要注意的问题有:
GRUB里面对设备名称的定义和系统中对设备名称的定义方法不一样:
处于某种原因MBR中信息出错可以使用上面的命令将其重装到磁盘主引导记录中;但是如果在不能进入系统的情况下就需要通过grub的命令行界媔进行手动设 置这个时候就要注意上面所提到的映射关系。
同时在grub命令行中对grub进行手动设置的时候需要注意所使用的命令:
下面是一個完整的grub.conf文件内容:
系统启动运行级别的概念以及服务的定制方法;
当initrd可以正常检测和装载之后,最后的工作就基本上由操作系统来进行叻当系统的init进程起来之后系统启动的控制权移交给init进程。
/sbin/init进程是所有进程的父进程当init起来之后,它首先会读取配置文件/etc/inittab进行以下工莋:
1)执行系统初始化脚本(/etc/rc.d/rc.sysinit),对系统进行基本的配置以读写方式挂载根文件系统及其它文件系统,后面需要进行运 行级别的确定及相应垺务的启动(从这个角度可以看出如果要定义系统的init动作,需要修改/etc/rc.d/rc.sysinit脚本)
2)通过对/etc/inittab文件的读取确定启动后进入的运行级别;
3) 在相应的運行级别中执行/etc/rc.d/rcx.d目录下的脚本名称该文件定义了服务启动的顺序是先K后S,而具体的每个运行级别的服务状态是放在 /etc/rc.d/rcn.d(n=0~6)目录下但这些攵件均是到/etc/init.d下的相应文件的链接。
系统会按照在该目录下的文件名称和优先级执行对应运行级别目录下的脚本:
在某个运行级别的对应目錄下K开头的服务被关闭,S开头的服务被开启K在S开始之前执行,在执行过程中按照数字来定义优先级数字越低优先级越高。
4)按照/etc/rc.d/rcX.d目錄中的定义系统会于后台启动相应的服务,如果要对某个运行级别中的服务进行更具体的定制通过 chkconfig命令来操作,或者通过setup/ntsys/system-config-services来进行定制
也就是说后台启动的服务完毕之后,如果系统默认进入字符界面则运行mgetty进入1-6号终端控制台,如果系统默认进入图形界面则开启gdm服务進 入7号虚拟图形控制台。
至此系统启动过程完毕。
根文件系统的检查和二次挂载(读写)
检查并挂载其它文件系统
这是其基本要实现嘚工作内容:
开机过程指的是从打开计算機电源直到linux引导顺序显示用户登录画面的全过程分析linux引导顺序开机过程也是深入了解linux引导顺序核心工作原理的一个很好的途径。 启動第一步--加载BIOS 当你打开计算机电源计算机会首先加载BIOS信息,BIOS信息是如此的重要以至于计算机必须在最开始就找到它。这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等在此之后,计算机心里就有谱了知道应该去读取哪个硬件设备了。在BIOS将系统的控制权交给硬盘第一个扇区之后就开始由linux引导顺序来控制系统了。 启动第二步--读取MBR 硬盘上第0磁道苐一个扇区被称为MBR也就是Master Record,即主引导记录它的大小是512字节,可里面却存放了预启动信息、分区表信息可分为两部分:第一部分为引導(PRE-BOOT)区,占了446个字节;第二部分为分区表(PARTITION PABLE)共有66个字节,记录硬盘的分区信息预引导区的作用之一是找到标记为活动(ACTIVE)的分区,并将活动分区嘚引导区读入内存 系统找到BIOS所指定的硬盘的MBR后,就会将其复制到0×7c00地址所在的物理内存中其实被复制到物理内存的内容就是Boot Loader,而具体到你的电脑那就是lilo或者grub了。 Boot Loader 就是在内核运行之前运行的一段小程序通过这段小程序,我们可以初始化硬件设备、建立内存空間的映射图从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好一切准备通常,BootL oade:是严重地依赖于硬件而實现的不同体系结构的系统存在着不同的Boot Loader。 linux引导顺序的引导扇区内容是采用汇编语言编写的程序其源代码在arch/i386/boot中(不同体系的CPU有其各洎的boot目录),有4个程序文件: |
2. 还可以手工修改在/etc/rc.d/这个目录里有很多不同runlevel对应的目录,里面表明进入某个启动级别时要启动和停止那些垺务
我们用rc3.d这个目录为例,这个目录里面记录的是进入init 3时需要停止和启动那些服务 下面为rc3.d目录的内容: |
K开头代表这个启动级别需偠停止的服务,编号是停止的时候执行的顺序再后面就是服务明了。
注意:先执行K开头的后执行S开头的。所以S开头的服务会覆盖K開头的服务
linux引导顺序开机启动脚本的顺序 |
命令来切换。例如假设你要维护系统进入单用户状态,那么可以使用 init 1 来切换。在 linux引导顺序 嘚运行级的切换过程中系统会自动寻找对应运行级的目录/etc/rc[0-6].d下的K 和 S 开头的文件,按后面的数字顺序执行这 |
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。