Linux系统启动过程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux系统启动过程相关的知识,希望对你有一定的参考价值。
1、Linux启动过程简介
(1)BIOS加电自检
计算机启动后,首先会进行固件(Bios)的自检,即所谓的POST(Power On Self Test),然后把保存在MBR(Master Boot Record,主引导记录)中的主引导加载程序放到内存中。
(2)加载主引导加载程序(MBR)
主引导加载程序通过分区表查找活动分区,然后将活动分区的次引导加载程序从设备读入内存中并运行。
(3)加载次引导加载程序(GRUB)
次引导加载程序显示GRUB(GRand Unified Bootloader,GRUB)选择界面,根据用户的选择(如果机器上安装了多个操作系统)把相应操作系统的内核映像加载进内存中。
(4)Linux内核映像
在内核的引导过程中,会加载必要的系统模块,以挂载根文件系统(/),完成后内核会启动init进程,并把引导的的控制器交给init进程。
(5)init进程
init进程会挂载/etc/fstab中设置的所有文件系统,并根据/etc/inittab文件来执行相应的脚本进行系统初始化,至此,Linux系统已经启动,可以接受用户登录并进行操作。
2、BIOS加电自检
x86计算机在启动后首选会进行BIOS的加电自检,检测计算机的硬件设备,然手按照CMOS设置的顺序搜索处于活动状态并且可以引导的设备。引导设备可以是软盘、光驱、USB设备、硬盘设置或者是网络上的某个设备。
硬盘上的主引导记录(Master Boot Record,MBR)中保存有引导加载程序。MBR是一个512字节大小的扇区,位于硬盘的第一个扇区中。
#dd if=/dev/had of=mbr.dmp bs=512 count=1 把MBR的内容保存到文件mbr.dmp中
1+0 records in 读取1个数据块
1+0 records out 输出1个数据块
512 bytes (512B) copied,0.0147461 seconds,34.7kB/s复制了512个字节,每秒34.7KB
#od -xa mbr.dmp 显示mbr.dmp文件的内容
00000000 48eb d090 00bc fb7c 0750 1f50 befc 7c1b
dd命令会读取硬盘/dev/had(第一个IDE接口的primary硬盘)开始的512字节的内容(即MBR),将其写入mbr.dmp文件中,然后使用od命令以ASCII和十六进制格式显示这个文件的内容。
BIOS会把MBR中引导加载程序加载到内存中,然后把控制权交给引导加载程序,继续系统的启动过程。
3、引导加载程序
(1)引导加载程序的启动
Linux引导分两个阶段,第一阶段是保存在MBR中的主引导加载程序的加载。MBR中的主引导加载程序是一个512字节大小的映像,其中包含有机器的二进制代码和一个小分区表。主引导加载程序的任务就是查找并加载保存在硬盘分区上的次引导加载程序,它通过分区表查找活动分区,然后将活动分区的次引导加载程序从设备读入内存中并运行,进入引导加载程序的第二阶段。
次引导加载程序也被称为内核加载程序,这个阶段的任务是加载Linux内核。一旦次引导加载程序被加载到内存中后,便会显示GRUB的图形界面。如果用户不进行选择,GRUB会在5秒内自动启动grub.conf文件中设置的默认操作系统。GRUB确定要启动的操作系统后,它就会定位相应内核映像所在的/boot/目录。内核映像文件一般使用/boot/vmlinuz-<内核版本号>进行命名。
接下来GRUB会把内核映像加载到内存中,由于内核映像并不是一个可执行的内核,而是经过压缩的内核映像,GRUB需要对内核进行解压,然后加载到内存中并执行。至此,引导加载程序GRUB完成它的任务,它会把控制权交给内核映像,由内核继续完成接下来的系统引导工作。
(2)GRUB配置
GRUB的配置主要通过修改/boot/grub/目录下的grub.conf文件来完成。
default选项:用于设置GRUB默认启动的操作系统(如果GRUB中配置了多个操作系统),当超过timeout所设置的时间后用户都没有进行选择,则GRUB自动启动default中所配置的操作系统。在GRUB中计数是由0开始的,0即表示第一个。
◇timout选项:设置默认等待的时间,单位为秒。
◇splashimage选项:设置GRUB界面的背景图片。
◇hiddenmenu选项:设置该选项后,GRUB将隐藏操作系统选择菜单。
◇title选项:设置操作系统在GRUB选择菜单中的名称。
◇root(hdx,y):设置内核所在的磁盘分区。GRUB的硬盘表示方法和Linux是不同的,GRUB是由0开始计数,(hd0,0)表示第一块磁盘的第一个主分区,而Linux则表示hda1;(hd0,1)表示第一块硬盘的第一个逻辑分区,而Linux中则是hda5,依此类推。
◇kernel选项:设置内核文件的名称。Linux的内核文件一般存放在/boot目录下,文件的命名规则为vmlinuz-<版本号>。
4、init进程
Linux进程是Linux系统所有进程的起点,内核在完成内核引导后,便会加载init进程,其进程号是1。init进程启动后,会初始化操作系统,并启动特定的运行级别(Runlevel)下的自动运行程序。
(1)init进程简介
内核映像在完成引导后,便会启动init进程,init进程对应的执行文件为/sbin/init,它是系统中所有进程的发起者和控制者,所有的进程都是由它衍生。如果init进程出现问题,系统中的其他进程也会随之而受影响。由于是系统中第一个运行的进程,所以init进程的进程号(Process ID,PID)永远是1。
(2)init进程的引导过程
当init进程获得控制权后,它首先会执行/etc/rc.d/rc.sysinit脚本,根据脚本中的代码配置环境变量、配置网络、启用Swap、检查并挂载文件系统、执行其他系统初始化所必须的步骤。接下来,init进程会执行/etc/inittab脚本中的代码。在该脚本中定义了Linux系统的运行级别,以及每个级别所对应的引导步骤。
以上是关于Linux系统启动过程的主要内容,如果未能解决你的问题,请参考以下文章