系统启动流程相关概念

前言:

了解系统内核基本知识

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

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

    • 运行中的系统可分为两层:内核空间用户空间 

  • 内核设计流派: 

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

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

linux内核的特点: 
支持模块化:.ko(kernel object) 
支持模块运行时动态装载和卸载; 

其中linux内核的组成部分: 
核心文件:/boot/vmlinuz-VERSION-release 
ramdisk: 
centos5:/boot/initrd-VERSION-release.img 
centos6和7:/boot/initramfs-VERSION-release.img 
模块文件:/lib/modules/VERSION-release

系统启动流程

  • 简单描述:

    系统初始化流程: 
    内核级别: POST–>Bootsequence(BIOS)–>Bootloader(MBR)–>kernel(ramdisk)–>rootfs(readonly)–>/sbin/init(/etc/inittab) 
    用户级别: 设置默认运行级别–>运行系统初始化脚本,完成系统初始化rc.sysinit–>关闭对应级别下面要停止的服务,启动对应级别下面要开启的服务–>设置登录终端–>[]启动图像终端]

  • 详细介绍:

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

    Bootsequence(BIOS):按次序查找引导设备,第一个有引导程序的设备就是本次启动用到的设备。进行设备的枚举和初始化,按CMOS的设置所有处于活动状态并且可引导的设备(floppy、CD-ROM、USB、DISK、NFS),加载主引导记录(MBR)到内存中,然后BIOS将控制权给下一步BOOTLOADERBOOTLOADER(MBR):引导加载器,程序;MBR前446bytes; 
    功能:提供一个菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装载到内存中的特定空间中,解压、展开;而后把系统控制权移交给内核;

    kernel 内核自身初始化
    启动init进程

    init 以守护进程方式存在,是所有其他进程的祖先(PID=1),init 进程非常独特,能够完成其他进程无法完成的任务。 
    程序类型: 
    CentOS5-sysv init 
    配置文件:/etc/inittab 
    CentOS6:upstart(并发启动) 
    配置文件:/etc/inittab/etc/init/*.conf 
    CentOS7systemd 
    配置文件:/usr/lib/systemd/system/ /etc/systemd/system/*

    • 系统进入runlevel

    • 运行系统初始化脚本/etc/rc.d/rc.sysinit

    • 运行指定运行级别对应的目录下的脚本,/etc/rc.d/rc#.d/目录下的服务脚本

    • 捕获组合键的定义

    • 定义电源 fail/restore脚本

    • 启动 getty 和虚拟控制台

    • 用户级别:init通过读取/etc/inittab文件来完成系统初始化过程: 

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

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

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

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

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

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

    • GRUB 1.X:[centos7] grub2 

    • Windows:ntloader,仅是启动OS

    • Linux: 

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

    • ramdisk-(磁盘)转换成ramfs(文件系统),提高速度;

    • centos5 :initrd,工具程序:mkinitrd

    • centos6,7initramfs,工具程序:dracutmkinitrd


工作原理介绍:

MBR(master boot record)主引导记录

MBR共有512bytes,其中446bytes为主引导记录bootloader,另外的64bytes为分区表fat,其中包含4个分区表记录,以16bytes为一个分区划分记录,最后2bytesMBR的有效性检测55AA

GRUB(bootloader)

grub:Grub unified bootloadergrub向用户提供了更好的开机体验,加入了开机的菜单、开机图片等更多的功能,而这种功能bootloader不能提供,grub分为三个阶段(grub legacy):

  • 一阶段: primary boot loader1st stage 分区引导加载 
    功能:此阶段在bootloader中,bootloader不在直接加载内核,而是加载grub的第二阶段;bootloader备份在了/boot/grub/stage1

  • 二阶段:paritionfilesystem driver1.5stage 文件系统接口。功用:提供文件系统驱动,方便虚拟系统的生成,让stage1中的bootloader能识别stage2所在分区上的文件系统;

  • 三阶段:partition /boot/grub2nd stage,分区文件,不支持复杂逻辑软raid等,仅支持基本分区(内核文件只能放在基本磁盘分区上),通过读取 /etc/grub.conf 文件,显示出内核列表,指定了内核镜像和 initrd所在的分区为root,设定内核参数,并加载vmlinuzinitramfs这两个文件到内存中。在这一阶段可以编辑启动项目。如指定根分区root,内核kernelinitrd镜像等;也可以进入grub command line手动写启动信息。 
    功用:1、提供菜单、并提供交互式接口;[e:编辑模式,用于编辑菜单;c:命令接口];2、加载用户选择的内核或操作系统允许传递参数给内核,可隐藏此菜单;3、为菜单提供保护机制,为编辑菜单进行认证,为启动内核或操作系统进行认证;

GRUB管理开机启动的过程分成了三个阶段.。tage1主要负责BIOSGRUB之间的交接。这部分才是真正放在MBR中的bootloader。而后stage1.5是连接stage1stage2之间的通道,起着过渡的作用。最后才是GRUB中真正核心的部分stage2,它可以让用户以选项的方式将操作系统加载、修改选项和内核参数。

kernel工作方式:

工作原理:当内核映像被加载到内存中,并且stage2 的引导加载程序释放控制权之后,内核阶段就开始了,内核在完成自身的初始化之后进行探测可识别的所有硬件设备,由于内核中只包含了少量的硬件驱动,此时会借助内存中的initrd根文件系统加载相关驱动程序。当内核具备访问根文件系统功能时(rootfs),initrd根文件系统将被卸载,并挂载真正的根文件系统。这就是内核的初始化过程,系统已经脱离了 /boot 分区,独立存活在内存中。

  • vmlinuz-xxx内核镜像是一个 zImage(压缩映像,小于 512KB)或一个 bzImage(较大的压缩映像,大于 512KB),它是使用zlib 进行压缩过的内核文件。

  • initramfs-xxx.img是由stage2 引导加载程序加载到内存中的,它会被复制到 RAM 中并挂载到系统上。这个 initrd 会作为 RAM 中的临时根文件系统使用,并允许内核在没有挂载任何物理磁盘的情况下完整地实现引导。initrd文件包括可加载模块的驱动程序,为内核提供可访问磁盘和磁盘上的文件系统的接口,并为其他硬件提供了驱动程序。由于根文件系统是磁盘上的一个文件系统,因此内核通过initrd取得根分区的访问,并挂载真正的根文件系统。这是一个解包的initramfs镜像文件。


用户级别启动

  • 首先系统通过读取/etc/inittab文件来完成系统的初始化过程;

  • inittab文件 

inittab文件表示的为系统init初始化程序用到的配置文件。这个文件负责设置init初始化程序初始化脚本在哪里;每个运行级初始化时运行的命令; 开机、关机、重启对应的命令;各运行级登陆时所运行的命令。 
inittab文件中,每一行定义一种action以及与之对应的process. 

  • 基本格式idrunlevelsactionprocess 

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

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

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

  • process:执行的任务;

runlevel :Sysvinit 读取 /etc/inittab 文件中是否含有 initdefault’项,有则init 将启动默认运行的模式。如果没有默认的运行模式,将进入系统控制台,手动决定进入何种运行模式。

  • 一共有7个(0-6)运行级别: 
    0:关机,shutdown; 
    1:单用户模式(singler user),root用户无须认证,此为维护模式; 
    2:多用户模式(multi user),会启动网络功能,但不会启动NFS,维护模式; 
    3:多用户模式(Full multiuser mode),完全功能模式,文本界面; 
    4:预留级别:目前无特别适合目的,但习惯以同3级别功能使用; 
    5:多用户模式(multi user),完全功能,图形界面; 
    6:重启,reboot; 
    其中默认级别35 
    级别切换:init命令 
    级别查看:who -rrunlevel

  • 其中ACTION常见的有4中动作: 
    1、wait:等待切换至此任务所在的级别时执行一次; 
    2、respawn:一旦此任务终止,就自动重新启动之; 
    3、initdefault:设定默认运行级别; 
    4、sysinit:设定系统初始化方式,此处一般指定/etc/rc.d/rc.sysinit

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

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

  1. 设置主机名

  2. 设置欢迎信息

  3. 激活UDEVSELINUX

  4. 挂载/etc/fstab文件中定义的所有文件系统

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

  6. 设置系统时钟

  7. 根据/etc/sysctl.conf文件的设置,来设置内核参数

  8. 激活lvm软raid设备

  9. 激活swap设备(此操作在fstab中以执行)

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

  11. 清理操作(过去的lockpid文件)

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

  1. rc是个脚本,后面接参数。如: 
    l5:5:wait:/etc/rc.d/rc 5 
    wait意味着init系统将等待rc启动服务脚本 
    i0:0:wait:/etc/rc.d/rc3 
    意味着去启动或关闭/etc/rc.d/rc3.d/目录下的服务脚本所控制服务

  2. rc 根据 runlevel 执行rc#.d目录下启动脚本。每个 runlevel 都有一个对应的 rc#.d 目录; 
    其中在这些目录下存放着很多不同的脚本,文件名以 S 开头的脚本表示在当前runlevel中启动,K开头的脚本表示不在当前runlevel中启动; 
    K*:要启动的服务;K##*,优先级,数字越小,越先关闭;依赖的服务先关闭,而后关闭被依赖的; 
    S*:要启动的服务;S##*,优先级,数字越小,越是优先启动;被依赖的服务先启动,而依赖的服务后启动;

  3. /etc/rc.d/rc#.d 目录下的脚本其实都是一些软链接文件,真实的脚本文件存放在/etc/init.d目录下,也就是说在/etc/init.d目录下的文件会自动以S##scriptK##script的软链接存在于各 runlevel 的目录下

  4. /etc/rc.d/rc.local 
    正常级别下,最后启动的一个服务S99local没有链接至/etc/init.d下的某脚本,而是链接至了/etc/rc.d/rc.local(/etc/rc.local)脚本;因此,不便或不需为服务脚本的程序期望能开机自动运行时,直接放置此脚本文件中即可;

init在等待/etc/rc.d/rc执行完毕之后,将在指定的各个虚拟终端上运行/sbin/mingetty,等待用户的登录。 至此,Linux的启动完成
  • tty1:2345:respawn:/usr/sbin/mingetty tty1 
    … 
    tty6:2345:respawn:/usr/sbin/mingetty tty6 
    注意: 
    1、mingetty调用login程序; 
    2、打开虚拟终端的程序出了mingetty之外,还有诸多getty等;


命令行中的操作:

gurb的命令行接口操作

help:获取帮助列表 
help KEYWORD:获取详细帮助信息 
find (hd#,#) /path/to/somefile 
root (hd#,#) 
kernel /path/to/kernel_file:设定本次启动时用到的内核文件;额外还可以添加许多内核支持使用的cmdline参数 
例如: 
init=/path/toinitselinux=0 
initrd:/path/to/initramfs_file:设定为选定的内核提供额外文件的ramdisk; 
boot:引导启动选定的内核;

  • 如何识别设备: 
    (hd#,#) 
    hd#:磁盘编号,用数字标示:从0开始编号 
    #:分区编号,用数字标示;从0开始编号 

手动在grub命令行接口启动系统: 
grub> root(hd#,#) 
grub> kernel /vmlinuxz-VERSION-RELEASE ro root/dev/DEVICE 
grub> initrd /initramfs-VERSION-release.img 
grub> boot


在配置文件中操作: 
配置文件:/boot/grub/grub.conf 
配置项: 
default=#:设定默认启动的菜单项:菜单项(title)编号从0开始 
timeout=#:指定菜单项等待选项选择的时长; 
splashimage=(hd#,#)/PATH/TO/XPAM_PIX_FILE:指明菜单背景图片文件路径; 
hiddenmenu:隐藏菜单; 
password [--md5] STRING:菜单编辑认证; 
title TITLE:定义菜单项”标题”,可出现多次; 
root(hd#,#):grub查找stage2kernel文件所在设备分区;为grub的”” 
kernel /PATH/TOVMLINUZ_FILE [PARAMETERS]:启动的内核 
initrd /PATH/TO/INITRAMFS_FILE:内核匹配的ramfs文件; 
password [--md5] STRING:启动选定的内核或操作系统时进行认证;(grub-md5-crypt)

进入单用户模式:
  1. 编辑grub菜单(选定要编辑的title,而后使用e命令);

  2. 在选定的kernel后附加

  3. sSsingle都可以

  4. kernel所在行,键入b命令

安装grub

  1. 在系统中安装: 
    grub-install 
    grub-install --root-directory=ROOT /dev/DISK

  2. 在grub表中安装: 
    grub 
    grub> root (hd#,#) 
    grub> setup (hd#)

原创文章,作者:N22-白蚁,如若转载,请注明出处:http://www.178linux.com/47130

(0)
N22-白蚁N22-白蚁
上一篇 2016-09-19
下一篇 2016-09-19

相关推荐

  • linux函数和数组定义

    函数介绍:    函数function 是由若干条shell 命令组成的语句块,实现代码重用和模块化编程。    它与shell 程序形式上是相似的,不同的是它不是一个单独的进程,不能独立运行,而是shell 程序的一部分。    函数和shell 程序比较相似,区别在于:   …

    Linux干货 2017-04-02
  • LVM逻辑卷管理

    前言     通常情况下,在操作系统上新建了一个分区并在此分区创建文件系统后,该文件系统的大小就固定了。假如要增加此文件系统的大小,我们不得不添加一块硬盘并重新分区,创建文件系统,然后把原文件系统的数据完整复制过来。如果第二次分区时分配的空间太大,用不完又浪费该怎么办呢?重复此前的流程又将花费大量的时间,有没有更便捷的…

    Linux干货 2015-05-04
  • N25-第六周作业

    第6周作业 — 请详细总结vim编辑器的使用并完成以下练习题 vim是模式化的全屏文本编辑器。vim分为三种模式:分别是编辑模式;输入模式;末行模式; 打开文件的方式有:vim +# FILE打开文件FILE并把光标定位到#行的行首;vim +/PATTERN FILE打开文件并让光标处于第一个被PATTERN匹配到的行的行首。(支持正则表达式)…

    Linux干货 2017-02-22
  • iptables总结

    iptables简称为包过滤型防火墙一般分为2种:     1,主机防火墙:主机防火墙是用来防止本主机内的应用服务被攻击所需要保护的防火墙     2,网络防火墙:做为想路由功能的防火墙凡是进过此服务器的数据包都要进行规则匹配 iptables的架构由功能和链组成  &…

    Linux干货 2016-12-05
  • 磁盘术语与磁盘管理

    磁盘术语与磁盘管理 磁盘术语 扩展1-4 逻辑5- sector 512 6位 sector 10位 track 1024 cylinder 8位head 256 0-1023 2^6=64 512*63*1024*256 cylinder=512*63*256 10M CHS 设备文件 磁盘设备的设备文件命名:/dev/DEV_FILE SCSI, SAT…

    Linux干货 2017-05-15
  • 数据分析≠Hadoop+NoSQL,不妨先看完善现有技术的10条捷径

    让业务搭乘大数据技术确实是件非常有吸引力的事情,而Apache Hadoop让这个诱惑来的更加的猛烈。Hadoop是个大规模可扩展数据存储平台,构成了大多数大数据项目基础。Hadoop是强大的,然而却需要公司投入大量的学习精力及其它的资源。 如果得到正确的应用,Hadoop确实能从根本上提升你公司的业务,然而这条Hadoop的应用之路却充满了荆棘。另一个方面…

    Linux干货 2015-02-25