第七周学习总结–系统启动流程

写在前面

作为一个理工科的你,我相信你一定给自己或者给别人装过windows操作系统,作为windows操作系统都图形化了,因此我们可能很难去了解中间都发生了什么。比如使用U盘安装的时候,网上一大堆某某某U盘制作系统工具,按照网上的教程,制作完成以后,就可以在要装系统的电脑上点击电源键狂按F12(不同的电脑可能不同)进入BIOS设置了,然后就等着使用了。作为学习另一个使用命令行的操作系统,我们有必要了解一下它的启动工作流程。

细说流程

Linux系统的启动流程主要分为以下几个主要步骤,POST –> BootSequence(BIOS) –> BootLoader(MBR)–> Kernel(ramdisk、ramfs)–> rootfs(readonly)–> /sbin/init。

  • POST

按下主机电源键,主机会首先加载BIOS信息,主要负责检测系统外围关键设备(如:CPU、内存、显卡、I/O、键盘鼠标等)是否正常。如果硬件设备因为各自原因自检没有通过,则不会进行下一步启动,如果硬件设备没有问题,则转交给下一步执行启动。

  • BootSequence

按次序查找BIOS中各引导设备,第一个有引导程序的设备即为本次启动要用到的设备。

  • BootLoader

BootLoader称为引导加载器,位于磁盘中的MBR中,每个磁盘都有一个MBR,MBR是磁盘上的第一个扇区又叫做主引导扇区,是主机开机后访问磁盘时首先要读取的扇区,MBR扇区共有512个字节,其中的446个字节即存放bootloader,64个字节存放分区表,剩余的2字节存放校验信息。

在Linux中,BootLoader的具体实现是由grub程序实现的。grub分为三个阶段,第一个阶段存放于MBR中,第二个阶段也称为stage1.5阶段,存放于MBR之后的扇区,主要为第三阶段提供文件系统驱动。第三阶段也称为stage2阶段,存放于一个基本的磁盘分区上,主要是提供一个菜单,允许用户选择要启动的系统或不同的内核版本,把用户选定的内核装载到RAM(内存)中特点空间中,解压、展开,而后把整个系统控制权移交给内核,即完成把内核加载到内存空间中。

grub也有自己的配置文件/boot/grub/grub.conf,启动菜单就是通过读取此文件进行信息显示,文件大体如下图所示:

701

其中各配置参数:

  1. default=#: 设定默认启动的菜单项顺序;菜单项(title)编号从0开始;
  2. timeout=#:指定菜单项等待选项选择的超时时长;
  3. splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜单背景图片文件路径;
  4. hiddenmenu:隐藏菜单;
  5. title TITLE:定义菜单项“标题”, 可出现多次;
  6. root (hd#,#):grub查找stage2及kernel文件所在设备分区;为grub的“根”;
  7. kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:启动的内核;
  8. initrd /PATH/TO/INITRAMFS_FILE: 内核匹配的ramfs文件;

此外还能对grub菜单及内核启动进行认证处理,在上面配置文件中加入password [–md5] STRING项即可,加在title之前表示需要对编辑菜单进行认证,加在title之后表示对内核进行认证,需要认证以后才能启动内核。

702

grub还有自己的命令行接口,启动系统时,敲击任意键进入grub命令行接口模式,在grub界面可以按照提示输入e、b、c进行相应的编辑,在对应的title输入c即可进入命令行模式,有如下常用选项:

  1. help:获取帮助信息;
  2. find :文件查找,通常用于定位文件,find(hd#,#);
  3. root (hd#,#):把哪一个磁盘分区设置为根;
  4. kernel:设定本次启动时用到的内核文件;
  5. initrd:设定为选定的内核提供额外文件的ramdisk;

所以也可以通过手动指定来启动内核,在grub界面通过上述介绍的参数,依次输入:

  1. root (hd#,#);
  2. kernel /vmlinuz-VERSION-RELEASE  ro  root=/dev/DEVICE;
  3. initrd /initramfs-VERSION-RELEASE.img;
  4. boot;

来通过读取新指定的各参数启动内核。

703

  • Kernel

在kernal阶段,主要是通过前面步骤加载到的内核完成自身的初始化:

  1. 探测可识别到的所有硬件设备;
  2. 加载硬件驱动程序(有可能会借助于ramdisk加载驱动);
  3. 以只读方式挂载根文件系统;
  4. 运行用户空间的第一个应用程序:/sbin/init
  • rootfs

根切换,因为在内核加载阶段,系统有可能会借助ramdisk提供的一个简化版的根文件系统来提供驱动,完成后续步骤后ramdisk会加载真正的根文件系统,并把控制权移交给真正的根文件系统。

  • /sbin/init

内核被加载后,第一个运行的程序便是/sbin/init,该文件会读取/etc/inittab文件,设定Linux的运行级别并依据此来进行后续的初始化工作。

写在最后

今天的分享就到这里了,里面涉及到了Linux启动的一些基本流程,还特别提到了grub的两种实现方式,通过配置文件新增内核信息方式和grub命令行接口方式进行配置,如果我们熟知了Linux系统启动每步骤都需要什么文件,完成什么内容以后,我觉得配置都是很轻松的事情。实在没辙的话,不妨试试强大的搜索引擎,这也是学习的很好方法。

 

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/91102

(0)
虫草君虫草君
上一篇 2018-01-13 15:48
下一篇 2018-01-14 14:08

相关推荐

  • Hadoop Hive与Hbase整合+thrift

    1.  简介 Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。 Hive与HBas…

    Linux干货 2015-04-13
  • 正则表达式简述

    正则表达式简述 什么是正则表达式: 正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。 正则表达式分类: 标准正…

    Linux干货 2016-04-05
  • 19道小米网运维工程师笔试真题,你能通关吗?

    第一部分:Linux基础 题目1: 有一百个图片文件,它们的地址都是 http://down.xiaomi.com/img/1.png http://down.xiaomi.com/img/2.png … 一直到http://down.xiaomi.com/img/100.png 批量下载这100个图片文件,并找出其中大于500KB的文件。 题目2: 一个文…

    2017-09-08
  • 加油吧!少年!—至我和我M25期的伙伴

    引用 衣带渐宽终不悔,为伊消得人憔悴。—王国维《人间词话》 转眼已到了27岁的年纪,不知道自己是否还称得上少年。公交上让座被小朋友成为叔叔也都是很多年的事了。哪怕再有一颗少年心现在也要肩负起整个家庭的责任。 从毕业已工作了将近六个年头,无聊的工作平凡的薪水已经使我厌倦。闭上眼睛以后需要赡养四个老人,还要照顾孩子以后这些难题映入脑海。曾经以为遥远的…

    Linux干货 2017-07-11
  • 文件查找:find命令、locate命令;Linux文件系统上的权限

    文件查找:find、locate locate:依赖事先构建的索引,是在系统空闲周期性自动进行;手动更新(updatedb);极其消耗资源;   find [option]… [查找路径] [查找条件] [处理动作] 查找条件: 根据文件名查找: -name “文件名称”:支持使用通配符glob(*,?,[],[…

    Linux干货 2017-12-14
  • 正则表达式和变量写脚本

    #!/bin/bash 检查系统所有用户的shell是否为bash? 注释:用grep查找是否有此类用户,如果有则为真,则$?必然为0;显示的passwd结果对我们没意义,所以重定向到空。  grep “\bbash\b$” /etc/passwd &> /dev/null  A=`echo $?` …

    Linux干货 2017-04-16