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

相关推荐

  • 马哥教育网络班21期+第13周课程练习

    1、建立samba共享,共享目录为/data,要求:(描述完整的过程) 1)共享名为shared,工作组为magedu; 2)添加组develop,添加用户gentoo,centos和ubuntu,其中gentoo和centos以develop为附加组,ubuntu不属于develop组;密码均为用户名; 3)添加samba用户gentoo,centos和u…

    Linux干货 2016-10-24
  • lvs–各类型的原理及实现—(原理篇)

    前言:    LVS即是linux虚拟服务器,是一个虚拟的服务器集群系统,目的是使用集群技术和linux操作系统实现一个高性能、高可用的服务器。采用IP负载均衡技术和基于内容请求分发技术,将请求负载均衡地转移到不同的服务器上执行,从而将一组服务器构成一个高性能、高可用的虚拟服务器。此篇的内容只包含两种较为常用的LVS技术,分别是LVS-N…

    Linux干货 2016-10-27
  • 第十六周作业

    1、源码编译安装LNMP架构环境;     安装nginx:      1)安装依赖包 ]# yum groupinstall “Development Tools” “Development Libraries” -y ]# yum install wget openssl-devel ncurses-de…

    2017-05-02
  • 04用户和组的相关配置文件总结

    1、用户 个人理解的是,给使用者一个在系统中使用的身份,即用户。 用户分两种:管理员和普通用户。 而每一个用户都有一些属性,每一个属性都是用冒号分割开来。配置文件存储在【/etc/passwd】中。 例如,sarash:x:507:508::/home/sarash:/bin/nologin 他们分别是,用户名,密码,ID号,主组ID号,注释,家目录,默认登…

    Linux干货 2016-10-24
  • Nginx配置与应用详解

    前言 Nginx是由俄罗斯软件工程师Igor Sysoev开发的一个高性能的HTTP和反向代理服务器,具备IMAP/POP3和SMTP服务器功能。Nginx最大的特点是对高并发的支持和高效的负载均衡,在高并发的需求场景下,是Apache服务器不错的替代品。目前,包括新浪、腾讯等知名网站都已使用Nginx作为Web应用服务器。本文带来的是Nginx配置与应用详…

    Linux干货 2015-06-15
  • bash的基础特性

    1、Bash的命令补全      使用tab键可以实现命令补全或者路径补全 2、Bash的命令行展开      使用~,可以展开为用户的家目录;             例如#cd ~ 表示切换目录到当前用户家目录中   &nbs…

    Linux干货 2016-11-02