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
下一篇 2016-11-23

相关推荐

  • Python第一周小结

    经历了两个星期Linux运维基础的铺垫,这周我们正式开始了python的学习。经过第一周的各种挣扎以及反复训练,终于有所收获了一点东西。现在将第一周中学到的一个非常重要的算法技巧总结如下: 即:折半思想 例:给定一个不超过五位数的正整数,判断该数有几位数 Code1:                                              …

    Linux干货 2018-03-26
  • 网络管理基础

    什么是网络?    在计算机领域中,网络是信息传输,接受,共享的虚拟平台,通过它把各个点,面体的信息联系到一起, 从而实现这些资源的共享。 网路物理组件     终端:可发送和接受数据的,如计算机。移动设备,打印机,服务器….    互联设备:互联…

    Linux干货 2016-09-06
  • centos7配置bindDNS解析服务

    首先来概述一下 通俗一点理解呢,DNS就是把域名转换成IP的一种服务(反向则是IP转换成域名).以方便人们的记忆,就好比记住一个代表性的英文要比记住电话号码快得多,通常我们将这种服务称之为解析.现在一般公网都有万网 腾讯云这些机构,DNS这一块我们不需要负责.但是在现在企业的内部网则就需要我们来搭建DNS服务器了.本次采用的bind工具进行域名的解析。 1.…

    Linux干货 2018-03-26
  • 磁盘管理与文件系统

      关于磁盘与文件系统大致思路:要想对磁盘进行充分利用,必须要对磁盘进行分区,第二步就是要对分区进行高级格式化,也就是在分区上创建文件系统,在此过程中可以对磁盘的各种属性进行自定义。打个比方来说,创建磁盘分区好比刚买来一个毛坯房,还未装修,还不适宜人居住,那么创建文件系统就好比在光秃秃的毛坯房上进行了装修,这样才更适于人居住使用。 要想搞懂磁盘,首…

    Linux干货 2016-08-30
  • 文件管理

    echo“- – -”>/sys/class/scsi_host/host2/scan扫描新装的硬盘,不需要重启 磁盘管理三大步骤:分区,管理,挂载 设备文件创建mknob cdrom /mnt/cdrom 并行接口针多,但是传的速度过快,会对数据造成干扰 vLinux的数据一般都存储在分区空间里 学习linux的磁盘管理就必须:…

    Linux干货 2016-11-27
  • 第三周博客作业

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 [root@localhost ~]# who (unknown) :0           2016-12-15 2…

    Linux干货 2016-12-20