Linux启动过程及系统初始化

一、前言

    服务器在正常的运行过程中,很少有重启的机会。在正常的情况下,也很少有出现启动异常的情况,但是在遭到了人为或者误操作的情况后,可能会出现启动异常的情况。为了加深学习系统启动流程,能够更加深入理解Linux系统的启动流程。总结了这篇文字。

二、简述启动流程

    在服务器被加电后,大体流程如下: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查找stage2kernel文件所在设备分区;为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脚本等

原创文章,作者:王更生,如若转载,请注明出处:http://www.178linux.com/60456

(0)
王更生王更生
上一篇 2016-11-22 17:01
下一篇 2016-11-23 13:54

相关推荐

  • awk用法三

      6、结构化控制语句     6.1 if语句       格式:if(条件) {body} else {else body}         实例1:判断/etc/passwd文件中的UID如果大于500则显示为“common user”,否则显…

    Linux干货 2016-02-14
  • samba

    Samba 简介:      Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件,而SMB是Server Message Block的缩写,即为服务器消息块 ,SMB主要是作为Microsoft的网络通讯协议,后来Samba将SMB通信协议应用到了Linux系统上,就形成了现在的Samba软件。…

    系统运维 2016-11-01
  • 创建CA证书

    创建CA证书 CA证书         CA 也拥有一个证书(内含公钥和私钥)。网上的公众用户通过验证 CA 的签字从而信任 CA ,任何人都可以得到 CA 的证书(含公钥),用以验证它所签发的证书。       &nb…

    Linux干货 2017-07-23
  • 第三周作业

    1. 列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次则显示一次即可。 who | cut -d' ' -f1 | sort -u 2. 取出最后登录当前系统的用户的相关信息 grep  "$(who …

    Linux干货 2016-12-19
  • Linux 压缩、解压缩和打包工具

        前言:你是否曾经因为某个文件占用空间较大,而空间紧缺的U盘无法存放此文件。你是否曾经因为软件里有太多文件而不方便复制和携带。你是否曾因需要备份太过零散而头疼。那么基于“文件压缩和打包”的技术因此出现。下面介绍下Linux下关于压缩、解压缩和打包的工具及使用。 一、相关术语的原理和意义   &…

    Linux干货 2015-07-15
  • Linux Yum源的安装配置​‍

    Linux Yum源的安装配置     一、基本概念   Yum(全称为YellowdogUpdater,Modified)是一个在Fedora和RedHat以及SUSE、CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包…

    Linux干货 2015-05-11