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

相关推荐

  • 运筹帷幄之中,决胜与千里之外!

           运筹帷幄之中,决胜与千里之外,决定改变一生。        自从2016年年后学校要求产参加毕业实习,但对linux一窍不通的我,阴差阳错的被一家网络公司给录取了。        安排在一家企业做驻场运维工程师,刚去驻场的时候并没有给我分配相应的工作只是给了一些关于数据库,网络,和系统的一些资料,要求进行自学。我想了想,就决定选择了系统进行了解…

    2018-03-26
  • 文件管理权限

    命令和笔记

    Linux干货 2017-12-03
  • N25_第四周

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 cp -R /etc/skel /home/tuser1chmod 700 -R /home/tuser1 2、编辑/etc/group文件,添加组hadoop。 vim /etc/group hadoop:x:1010:1…

    Linux干货 2016-12-25
  • LINUX课堂笔记(第二周)

    2018.03.12 rpm httpd*** service httpd start ab 模仿用户访问 cat /var/log/httpd/access_log curl 访问web服务 rev 字符颠倒显示 sort  -r 执行反方向(由上至下)整理  -R 随机排序  -n 执行按数字大小整理  -f 选项忽略(fold)字符串中的字符大…

    Linux干货 2018-03-17
  • Linux 目录配置

    Linux 目录配置 Linux目录配置标准:FHS 因为利用Linux来开发产品或distributions的团队/公司与个人实在太多了,如果每个人都用自己的想法来配置文件放置的目录,那么将可能造成很多管理上的困扰。所以/后来就有所谓的Filesystem Hierarchy Standard (FHS)标准出炉了。 根据FHS(http://www.pa…

    Linux干货 2017-03-26
  • N25第八周博客作业

    1、写一个脚本,使用ping命令探测172.16.250.1-172.16.250.254之间的所有主机的在线状态;     在线的主机使用绿色显示;     不在线的主使用红色显示; #!/bin/bash trap ‘mytrap’ INT mytra…

    Linux干货 2017-02-26