现在的位置: 首页 > 系统 > 正文

Linux启动过程及系统初始化

2019年10月22日 系统 ⁄ 共 2724字 ⁄ 字号 暂无评论

简述启动流程

在服务器被加电后,大体流程如下:POST—->MBR(bootloader)—->kernel(ramdisk)—->挂载rootfs(ro)—->运行/sbin/init—->运行系统初始化脚本—->启动终端

1、第一阶段POST(POWER ON and SELF TEST即加电自检)是主板上的BIOS系统在加电后自动检测硬件设备比如:cpu、内存、主板等等,加载各种硬件运行参数,确保硬件正常运行,保护硬件的作用。如果在此过程中出现故障,一般会有提示音。或者会在屏幕上面显示故障信息,提醒用户处理;如果正常,则进入下一步,根据BIOS的设定的启动顺序(BootLoader),找到第一序列的启动设备,一般是的启动设备就是硬盘(在特定的情况下也有光盘或者U盘)。

2、在找到第一启动设备后,系统会去读该设备的MBR(Master Boot Record),然后系统就可以根据引导加载程序(Boot Loader)开始执行以下的工作:

BootLoader主要安装在启动设备的第一个扇区.系统会在第一个扇区446bytes加载grub程序成为一个阶段,以及在加载2-27扇区的第1.5阶段,最后找到/boot/grub,完成第二阶段。在Linux系统目录下,有一个/boot目录,里面有grub目录以及VMLinuz(内核)、initramfs等文件。

blob.png

而在grub目录中,则有grub启动的第一阶段、第1_5阶段以及第二阶段,还有grub的配置文件(grub.conf)提供启动配置。

blob.png

3、grub在启动的过程中提供启动菜单、并提供交互式接口;加载用户选择的内核或者操作系统;为菜单提供保护机制。同时,编辑grub的配置文件grub.conf能够改变启动是提供给用户的交互接口。grub.conf的内容如下:

blob.png

相应的配置:

default=#: 设定默认启动的菜单项;落单项(title)编号从0开始
timeout=#:指定菜单项等待选项选择的时长
splashimage=(hd#,#)/PATH/TO/XPM_FILE:菜单背景图片文件路径
hiddenmenu:隐藏菜单
password [–md5] STRING: 启动菜单编辑认证
title TITLE:定义菜单项“标题” , 可出现多次
root (hd#,#): grub查找stage2及kernel文件所在设备分区;为grub“根”
kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:启动的内核
initrd /PATH/TO/INITRAMFS_FILE: 内核匹配的ramfs文件
password [–md5] STRING: 启动选定的内核或操作系统时进行认证

在启动的时候,grub提供的界面如下:

blob.png

供用户选择在配置文件grub.conf里面设置启动选项,通过下面的提示符,可以进入某一个选项,里面的配置如下:

blob.png

是不是和在配置文件里面看到的一样。如果在配置文件里面加入password字段的话,要进入这个界面是需要密码的,这也提供了很好的保护机制,不是每个人都有权利进入这个界面的。

当启动流程进入这个步骤后,下一步就是grub程序的引导下找到/boot目录下找到内核文件以及为服务加载内核的文件initramfs。然后就是将内核文件成功的加载到内存中。

4、内核加载完成后,就可以挂载根文件系统(rootfs)。但是要加载rootfs,就必须要其下的设备,而设备的驱动是在根文件系统中,而根文件系统现在还没有挂载就没办法取得设备的驱动,这就形成了一个死循环。而/boot下面的initramfs文件就是解决这一问题的。为加载后的内核提供根文件系统的所在设备的驱动,让能正常挂载。initramfs文件里面的内容如下:

blob.png

可以看见它提供了很多为挂载根文件系统的很多程序以及驱动。将initramfs加载后,相当于运行了一个过度系统,该系统有根文件系统的设备驱动,能够将其挂载上,但是,此时挂载的根文件系统是以只读的方式。到此内核空间的任务完成,开始进入用户空间的进程。

5、进入用户空间流程,执行的第一个程序就是/sbin/init,该程序完成了用户空间的启动流程,完成后启动/etc/inittab文件,初始化用户空间。/颚突出/inittab如下:

blob.png

设定启动的默认模式,默认的是多用户命令行模式:

0:关机

1:单用户模式

2:不带网络文件系统个功能的多用户模式

3:多用户模式

4:未设置

5:图形界面模式

6:重新启动

blob.png

上图中小框的内容是系统初始化脚本:

(1)设置主机名

(2) 设置欢迎信息

(3) 激活udev和selinux

(4) 挂载/etc/fstab文件中定义的文件系统

(5) 检测根文件系统,并以读写方式重新挂载根文件系统

(6) 设置系统时钟

(7) 激活swap设备

(8) 根据/etc/sysctl.conf文件设置内核参数

(9) 激活lvm及software raid设备

(10) 加载额外设备的驱动程序

(11) 清理操作

大框内的内容是设定不同启动模式下的服务启动配置:在/etc/rc.d目录下的文件是这样的

blob.png

rc#.d中的数字#代表是7中启动模式,每个目录定义的是在不同的启动模式下启动或关闭的服务的设置,里面的文件如下:

blob.png

里面的文件按都是以S#和K#开头的文件,且都是软连接的文件,它们都指向/etc/init.d目录下的文件,K即kill,代表在该模式下停止服务,S为start,代表在不同的模式下启用服务,数字定义服务开启或者关闭的顺序。而每个文件的格式如下:

blob.png

框内的为固定格式,chkconfig后面的3组数字分别代表在3、4、5模式下的动作(启动或者关闭)、启动顺序和关闭顺序。

blob.png

上图从上到下分别定义:

a、定义ctrl+alt+delete组合键的功能

b、定义在断电是ups电源的设定

c、设置虚拟终端,可以通过修改这些设置添加或者减少虚拟终端

d、定义图像界面启动设置

在/etc/rc.d中有一个脚本rc.local,在开机最后加载,可以根据自己的需求将一些执行命令或是脚本写到里面,当开机时,就可以加载。

blob.png

最后,完成所有用户空间的设置,进入登录提示界面,启动完成。

总结,在整个启动过程中,至关重要的文件有:

A、boot 一般将这个目录单独分区挂载为简单分区

B、grub以及grub.conf文件

C、vmlinuz以及initrd文件

D、/etc/inittab脚本

E、/etc/rc.d/rc.sysinit脚本等

给我留言

留言无头像?