; 系统启动流程相关概念 | Linux运维部落

系统启动流程相关概念

前言:

了解系统内核基本知识

  • 内核功能:进程管理、内存管理、网络协议栈、文件系统、驱动程序、安全功能等 

    • 用户空间:应用程序其中有进程或者线程

    • 运行中的系统可分为两层:

      1
      内核空间

      1
      用户空间

       

  • 内核设计流派: 

    • 单内核设计:把每种功能集成于一个程序中;例如:

      1
      linux

    • 微内核设计:每种功能使用一个单独的子系统实现;例如:

      1
      Windows

      1
      Solaris

linux内核的特点: 
支持模块化:

1
.ko

(kernel object) 
支持模块运行时动态装载和卸载; 

其中linux内核的组成部分: 
核心文件:

1
/boot/vmlinuz-VERSION-release

 
ramdisk: 
centos5:

1
/boot/initrd-VERSION-release.img

 
centos6和7:

1
/boot/initramfs-VERSION-release.img

 
模块文件:

1
/lib/modules/VERSION-release

系统启动流程

  • 简单描述:

    系统初始化流程: 
    内核级别: POST–>Bootsequence

    1
    (BIOS)

    –>Bootloader(MBR)–>kernel

    1
    (ramdisk)

    –>rootfs

    1
    (readonly)

    –>/sbin/init

    1
    (/etc/inittab)

     
    用户级别: 设置默认运行级别–>运行系统初始化脚本,完成系统初始化

    1
    rc.sysinit

    –>关闭对应级别下面要停止的服务,启动对应级别下面要开启的服务–>设置登录终端–>[]启动图像终端]

  • 详细介绍:

    POST:开机自检<加电自检>完成对硬件的检测;是BIOS功能的一个主要部分,负责完成对CPU、主板、内存、硬盘子系统、显示子系统、串并行接口、键盘、CD-ROM光驱等硬件情况的检测;如某些硬件出现错误无法通过检测就导致系统无法启动,POST完成之后将被清出内存;

    Bootsequence(BIOS):按次序查找引导设备,第一个有引导程序的设备就是本次启动用到的设备。进行设备的枚举和初始化,按CMOS的设置所有处于活动状态并且可引导的设备

    1
    (floppy、CD-ROM、USB、DISK、NFS)

    ,加载主引导记录

    1
    (MBR)

    到内存中,然后BIOS将控制权给下一步

    1
    BOOTLOADER

    BOOTLOADER(MBR):引导加载器,程序;

    1
    MBR

    前446bytes; 
    功能:提供一个菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装载到内存中的特定空间中,解压、展开;而后把系统控制权移交给内核;

    kernel 内核自身初始化
    启动

    1
    init

    进程

    init 以守护进程方式存在,是所有其他进程的祖先(PID=1),init 进程非常独特,能够完成其他进程无法完成的任务。 
    程序类型: 

    1
    CentOS5-

    sysv init 
    配置文件:

    1
    /etc/inittab

     

    1
    CentOS6

    :upstart(并发启动) 
    配置文件:

    1
    /etc/inittab

    1
    /etc/init/*.conf

     

    1
    CentOS7

    systemd 
    配置文件:

    1
    /usr/lib/systemd/system/

     

    1
    /etc/systemd/system/*

    • 系统进入

      1
      runlevel

    • 运行系统初始化脚本

      1
      /etc/rc.d/rc.sysinit

    • 运行指定运行级别对应的目录下的脚本,

      1
      /etc/rc.d/rc#.d/

      目录下的服务脚本

    • 捕获组合键的定义

    • 定义电源 

      1
      fail/restore

      脚本

    • 启动 getty 和虚拟控制台

    • 用户级别:

      1
      init

      通过读取

      1
      /etc/inittab

      文件来完成系统初始化过程: 

    • 探测可识别到的所有硬件设备;

    • 加载设备驱动程序(有可能会借助ramdisk加载驱动);

    • 以只读方式挂载根文件系统;

    • 运行用户空间的第一个应用程序:/sbin/init 

    • 1
      LILO

      :LInux LOader (无法支持大硬盘分区)

    • 1
      GRUB 0.X

      :[centos5,6] grub legacy (经典),各种安卓手机使用 ;

    • 1
      GRUB 1.X

      :[centos7] grub2 

    • Windows:

      1
      ntloader

      ,仅是启动OS

    • Linux: 

  • linux内核特征之一:使用缓冲和缓存来加速对磁盘上的文件进行访问;

    • 1
      ramdisk

      -(磁盘)转换成

      1
      ramfs

      (文件系统),提高速度;

    • 1
      centos5

       :

      1
      initrd

      ,工具程序:

      1
      mkinitrd

    • 1
      centos6,7

      1
      initramfs

      ,工具程序:

      1
      dracut

      1
      mkinitrd


工作原理介绍:

MBR(master boot record)主引导记录

1
MBR

共有

1
512bytes

,其中

1
446bytes

为主引导记录

1
bootloader

,另外的

1
64bytes

为分区表

1
fat

,其中包含

1
4

个分区表记录,以

1
16bytes

为一个分区划分记录,最后

1
2bytes

1
MBR

的有效性检测

1
55AA

GRUB(bootloader)

grub:

1
Grub unified bootloader

1
grub

向用户提供了更好的开机体验,加入了开机的菜单、开机图片等更多的功能,而这种功能

1
bootloader

不能提供,

1
grub

分为三个阶段(grub legacy):

  • 一阶段: 

    1
    primary boot loader

    1
    1st stage

     分区引导加载 
    功能:此阶段在

    1
    bootloader

    中,

    1
    bootloader

    不在直接加载内核,而是加载

    1
    grub

    的第二阶段;

    1
    bootloader

    备份在了

    1
    /boot/grub/stage1

  • 二阶段:

    1
    parition

    1
    filesystem driver

    1
    1.5stage

     文件系统接口。功用:提供文件系统驱动,方便虚拟系统的生成,让

    1
    stage1

    中的

    1
    bootloader

    能识别

    1
    stage2

    所在分区上的文件系统;

  • 三阶段:

    1
    partition /boot/grub

    1
    2nd stage

    ,分区文件,不支持复杂逻辑软raid等,仅支持基本分区(内核文件只能放在基本磁盘分区上),通过读取 

    1
    /etc/grub.conf

     文件,显示出内核列表,指定了内核镜像和 

    1
    initrd

    所在的分区为

    1
    root

    ,设定内核参数,并加载

    1
    vmlinuz

    1
    initramfs

    这两个文件到内存中。在这一阶段可以编辑启动项目。如指定根分区

    1
    root

    ,内核

    1
    kernel

    1
    initrd

    镜像等;也可以进入

    1
    grub command line

    手动写启动信息。 
    功用:1、提供菜单、并提供交互式接口;[

    1
    e

    :编辑模式,用于编辑菜单;

    1
    c

    :命令接口];2、加载用户选择的内核或操作系统允许传递参数给内核,可隐藏此菜单;3、为菜单提供保护机制,为编辑菜单进行认证,为启动内核或操作系统进行认证;

1
GRUB

管理开机启动的过程分成了三个阶段.。

1
tage1

主要负责

1
BIOS

1
GRUB

之间的交接。这部分才是真正放在

1
MBR

中的

1
bootloader

。而后

1
stage1.5

是连接

1
stage1

1
stage2

之间的通道,起着过渡的作用。最后才是

1
GRUB

中真正核心的部分

1
stage2

,它可以让用户以选项的方式将操作系统加载、修改选项和内核参数。

kernel工作方式:

工作原理:当内核映像被加载到内存中,并且stage2 的引导加载程序释放控制权之后,内核阶段就开始了,内核在完成自身的初始化之后进行探测可识别的所有硬件设备,由于内核中只包含了少量的硬件驱动,此时会借助内存中的

1
initrd

根文件系统加载相关驱动程序。当内核具备访问根文件系统功能时(

1
rootfs

),

1
initrd

根文件系统将被卸载,并挂载真正的根文件系统。这就是内核的初始化过程,系统已经脱离了 

1
/boot

 分区,独立存活在内存中。

  • 1
    vmlinuz-xxx

    内核镜像是一个 

    1
    zImage

    (压缩映像,小于 

    1
    512KB

    )或一个 

    1
    bzImage

    (较大的压缩映像,大于 

    1
    512KB

    ),它是使用

    1
    zlib

     进行压缩过的内核文件。

  • 1
    initramfs-xxx.img

    是由

    1
    stage2

     引导加载程序加载到内存中的,它会被复制到 

    1
    RAM

     中并挂载到系统上。这个 

    1
    initrd

     会作为 

    1
    RAM

     中的临时根文件系统使用,并允许内核在没有挂载任何物理磁盘的情况下完整地实现引导。

    1
    initrd

    文件包括可加载模块的驱动程序,为内核提供可访问磁盘和磁盘上的文件系统的接口,并为其他硬件提供了驱动程序。由于根文件系统是磁盘上的一个文件系统,因此内核通过

    1
    initrd

    取得根分区的访问,并挂载真正的根文件系统。这是一个解包的

    1
    initramfs

    镜像文件。


用户级别启动

  • 首先系统通过读取

    1
    /etc/inittab

    文件来完成系统的初始化过程;

  • inittab文件 

1
inittab

文件表示的为系统

1
init

初始化程序用到的配置文件。这个文件负责设置

1
init

初始化程序初始化脚本在哪里;每个运行级初始化时运行的命令; 开机、关机、重启对应的命令;各运行级登陆时所运行的命令。 

1
inittab

文件中,每一行定义一种

1
action

以及与之对应的

1
process

. 

  • 基本格式

    1
    id

    1
    runlevels

    1
    action

    1
    process

     

  • ID:一个任务的标识符; 

  • runlevels:在哪些级别启动此任务;#,###,也可以为空,表示所有级别; 

  • action:在什么条件下启动此任务; 

  • process:执行的任务;

1
runlevel

 :

1
Sysvinit

 读取 

1
/etc/inittab

 文件中是否含有 

1
initdefault’

项,有则

1
init

 将启动默认运行的模式。如果没有默认的运行模式,将进入系统控制台,手动决定进入何种运行模式。

  • 一共有7个(0-6)运行级别: 

    1
    0

    :关机,

    1
    shutdown

    ; 

    1
    1

    :单用户模式(

    1
    singler user

    ),

    1
    root

    用户无须认证,此为维护模式; 

    1
    2

    :多用户模式(

    1
    multi user

    ),会启动网络功能,但不会启动

    1
    NFS

    ,维护模式; 

    1
    3

    :多用户模式(

    1
    Full multiuser mode

    ),完全功能模式,文本界面; 

    1
    4

    :预留级别:目前无特别适合目的,但习惯以同3级别功能使用; 

    1
    5

    :多用户模式(

    1
    multi user

    ),完全功能,图形界面; 

    1
    6

    :重启,

    1
    reboot

    ; 
    其中默认级别

    1
    3

    1
    5

     
    级别切换:

    1
    init

    命令 
    级别查看:

    1
    who -r

    1
    runlevel

  • 其中

    1
    ACTION

    常见的有4中动作: 
    1、

    1
    wait:

    等待切换至此任务所在的级别时执行一次; 
    2、

    1
    respawn:

    一旦此任务终止,就自动重新启动之; 
    3、

    1
    initdefault:

    设定默认运行级别; 
    4、

    1
    sysinit:

    设定系统初始化方式,此处一般指定

    1
    /etc/rc.d/rc.sysinit

系统初始化脚本:/etc/rc.d/rc.sysinit

此文件初始化过程中主要功用:

  1. 设置主机名

  2. 设置欢迎信息

  3. 激活

    1
    UDEV

    1
    SELINUX

  4. 挂载

    1
    /etc/fstab

    文件中定义的所有文件系统

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

  6. 设置系统时钟

  7. 根据

    1
    /etc/sysctl.conf

    文件的设置,来设置内核参数

  8. 激活

    1
    lvm

    1
    软raid

    设备

  9. 激活

    1
    swap

    设备(此操作在

    1
    fstab

    中以执行)

  10. 加载额外设备的驱动文件

  11. 清理操作(过去的

    1
    lock

    1
    pid

    文件)

/etc/rc.d/rc 和/etc/rc.d/rc#.d/ 介绍

  1. 1
    rc

    是个脚本,后面接参数。如: 

    1
    l5:5:wait:/etc/rc.d/rc 5

     

    1
    wait

    意味着

    1
    init

    系统将等待

    1
    rc

    启动服务脚本 

    1
    i0:0:wait:/etc/rc.d/rc3

     
    意味着去启动或关闭

    1
    /etc/rc.d/rc3.d/

    目录下的服务脚本所控制服务

  2. 1
    rc

     根据 

    1
    runlevel

     执行

    1
    rc#.d

    目录下启动脚本。每个 

    1
    runlevel

     都有一个对应的 

    1
    rc#.d

     目录; 
    其中在这些目录下存放着很多不同的脚本,文件名以 

    1
    S

     开头的脚本表示在当前

    1
    runlevel

    中启动,K开头的脚本表示不在当前runlevel中启动; 
    K*:要启动的服务;

    1
    K##*

    ,优先级,数字越小,越先关闭;依赖的服务先关闭,而后关闭被依赖的; 
    S*:要启动的服务;

    1
    S##*

    ,优先级,数字越小,越是优先启动;被依赖的服务先启动,而依赖的服务后启动;

  3. 1
    /etc/rc.d/rc#.d

     目录下的脚本其实都是一些软链接文件,真实的脚本文件存放在

    1
    /etc/init.d

    目录下,也就是说在

    1
    /etc/init.d

    目录下的文件会自动以

    1
    S##script

    1
    K##script

    的软链接存在于各 runlevel 的目录下

  4. 1
    /etc/rc.d/rc.local

     
    正常级别下,最后启动的一个服务

    1
    S99local

    没有链接至

    1
    /etc/init.d

    下的某脚本,而是链接至了

    1
    /etc/rc.d/rc.local

    (

    1
    /etc/rc.local

    )脚本;因此,不便或不需为服务脚本的程序期望能开机自动运行时,直接放置此脚本文件中即可;

init在等待/etc/rc.d/rc执行完毕之后,将在指定的各个虚拟终端上运行/sbin/mingetty,等待用户的登录。 至此,Linux的启动完成
  • 1
    tty1:2345:respawn:/usr/sbin/mingetty tty1

     
    … 

    1
    tty6:2345:respawn:/usr/sbin/mingetty tty6

     
    注意: 
    1、

    1
    mingetty

    调用

    1
    login

    程序; 
    2、打开虚拟终端的程序出了

    1
    mingetty

    之外,还有诸多

    1
    getty

    等;


命令行中的操作:

gurb的命令行接口操作

1
help

:获取帮助列表 

1
help KEYWORD

:获取详细帮助信息 

1
find (hd#,#) /path/to/somefile

 

1
root (hd#,#)

 

1
kernel /path/to/kernel_file

:设定本次启动时用到的内核文件;额外还可以添加许多内核支持使用的cmdline参数 
例如: 

1
init=/path/toinit

1
selinux=0

 

1
initrd:/path/to/initramfs_file

:设定为选定的内核提供额外文件的

1
ramdisk

; 

1
boot

:引导启动选定的内核;

  • 如何识别设备: 

    1
    (hd#,#)

     

    1
    hd#

    :磁盘编号,用数字标示:从

    1
    0

    开始编号 

    1
    #

    :分区编号,用数字标示;从

    1
    0

    开始编号 

手动在grub命令行接口启动系统: 

1
grub&gt; root(hd#,#)

 

1
grub&gt; kernel /vmlinuxz-VERSION-RELEASE ro root/dev/DEVICE

 

1
grub&gt; initrd /initramfs-VERSION-release.img

 

1
grub&gt; boot


在配置文件中操作: 
配置文件:

1
/boot/grub/grub.conf

 
配置项: 

1
default=#:

设定默认启动的菜单项:菜单项(

1
title

)编号从

1
0

开始 

1
timeout=#

:指定菜单项等待选项选择的时长; 

1
splashimage

=

1
(hd#,#)/PATH/TO/XPAM_PIX_FILE

:指明菜单背景图片文件路径; 

1
hiddenmenu

:隐藏菜单; 

1
password [--md5] STRING

:菜单编辑认证; 

1
title TITLE

:定义菜单项”标题”,可出现多次; 

1
root(hd#,#)

:grub查找

1
stage2

1
kernel

文件所在设备分区;为

1
grub

的”

1

” 

1
kernel /PATH/TOVMLINUZ_FILE [PARAMETERS]

:启动的内核 

1
initrd /PATH/TO/INITRAMFS_FILE

:内核匹配的

1
ramfs

文件; 

1
password [--md5] STRING

:启动选定的内核或操作系统时进行认证;

1
(grub-md5-crypt)

进入单用户模式:
  1. 编辑

    1
    grub

    菜单(选定要编辑的

    1
    title

    ,而后使用

    1
    e

    命令);

  2. 在选定的

    1
    kernel

    后附加

  3. 1
    s

    1
    S

    1
    single

    都可以

  4. 1
    kernel

    所在行,键入

    1
    b

    命令

安装

1
grub

  1. 在系统中安装: 

    1
    grub-install

     

    1
    grub-install --root-directory=ROOT /dev/DISK

  2. 在grub表中安装: 

    1
    grub

     

    1
    grub&gt; root (hd#,#)

     

    1
    grub&gt; setup (hd#)

原创文章,作者:N22-白蚁,如若转载,请注明出处:/47130

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1660809109@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班

友情链接:万达注册  万达娱乐直属  万达主管  万达娱乐平台  万达娱乐  万达招商QQ  测试  万达娱乐招商  万达招商QQ  万达主管QQ