【Linux鸟哥笔记】20-启动流程、模块管理与Loader

  • 目录浏览
  • 章节学习
    • BIOS加载
    • 内核功能
    • init进程
    • 内核与内核模块
    • Boot Loader: Grub
    • initrd 文件
  • 启动过程问题解决

前言
最近兄弟@programer_cao 在装ROS 系统,奈何实验室的服务器太拉跨,三天一奔溃两天一死机,前端时间装的Ubuntu18.04 系统经常报错,问题主要集中在可以出现Grub 界面但之后卡在初始化内存盘界面(无法进入Ubuntu 的开机界面),定位错误后发现Grub 中的配置文件被修改导致开机程序无法正确启动,因此学习一下原理,期待能够对这类问题有更深入的了解。

目录浏览

  1. Linux 启动流程分析
  2. 内核与内核模块
  3. Boot loader: Grub
  4. 启动过程中的问题解决

章节学习

引导装载程序(Boot Loader)Grub(主流)、LILOspfdisk

启动流程

  1. 加载BIOS自我测试
  2. 获取第一个启动设备内MBR或者UEFIBoot Loader
  3. 加载内核Kernel
  4. kernel加载驱动并检测硬件
  5. 硬件驱动成功后,调用init进程,取得run-level信息
    • init 执行 /etc/rc.d/rc.sysinit来准备操作环境——网络、时区等
    • init 执行run-levelscript方式启动各个服务
    • init 执行 /etc/rc.d/rc.local文件
    • init 执行 mingetty 终端机模拟程序、启动login进程,最后等待登陆

BIOS加载

在启动电源后,主板会加载存储中的BIOS(Basic Input Output System),通过BIOS程序加载CMOS信息,获得主机的硬件配置,进行POST开机自检,初始化硬件检测并确定可启动的设备顺序,为读取启动程序做好基础。
Boot Loader同时安装在启动设备的第一个sector内,BIOS需要通过Boot Loader 程序加载Kernel文件。
Kernel 开始驱动周边设备。
这里注意几个点:

  1. 读取Boot Loader:
    BIOS 可以通过INT 13 这条信道来确保读取磁盘的MBR 分区,从而实现读取Boot Loader 程序。
  2. 多个Boot Loader:
    整个主机存储中可以分成两个部分,即MBR 分区和文件系统分区(如windows 文件系统和Linux 文件系统等),文件系统分区中保留一个引导扇区(Boot Sector)用于安装Boot Loader,但是电脑启动时,只会启动MBR 分区中的Boot Loader,因此在安装操作系统时需要主要MBR 分区的安装(可能会被新安装系统的Boot Loader 给覆盖)。
    为了实现多重系统,还需要进行多重引导,以Linux 系统为例,Linux Loader 中具有菜单选择、直接启动等功能,其中选择菜单提供了其它Loader 选项,因此我们在Grub 界面中可以选择想要启动的系统。
    Q:为什么实现多系统需要先装windows再装linux?
    A:注意MBR 分区最后被linux loader 所覆盖。
  3. 内核在哪?
    /boot 路径下

内核功能

(在BL 加载完内核之后)内核可以动态加载内核模块,模块放置于/lib/modules内(自定义内核模块放置在/etc/sysconfig/modules/*.modules),内核在启动过程中检测硬件并挂载根目录来额外的驱动程序。
虚拟文件系统(initialRAM Disk),放置于/boot/initrd内,该系统可被BL 加载进内存并仿真成一个虚拟根目录用以加载需要的驱动程序,完成所以驱动后内核会重新调用/sbin/init来启动系统。

init进程

回顾一下上面的内容

  1. 硬件驱动成功后,调用init进程,取得run-level信息

    • init 执行 /etc/rc.d/rc.sysinit来准备操作环境——网络、时区等
    • init 执行run-levelscript方式启动各个服务
    • init 执行 /etc/rc.d/rc.local文件
    • init 执行 mingetty 终端机模拟程序、启动login进程,最后等待登陆

针对进程执行的过程,简略的提一下各部分的原理:
首先系统会开启/sbin/init 进程,以此准备系统执行环境和run-level 配置。

  1. run-level
    run-level 是系统服务的执行等级,它规定了从关机、单用户维护模式、重启等7种服务类型(分为3类:0关机/4系统保留功能/6重启、1单用户维护模式、2无网络系统/3有网络文本系统/5有网络界面系统)。通过/etc/inittab配置文件设置run-level 等级,使用script 命令的方式来使用不同的服务。想要了解更多inittab 配置文件的信息可以参考/etc/inittab配置文件详解。
    另外说一句,inittab文件可以自行修改来自行设计启动环境的配置,所以一般不要修改这个文件,以免产生未知的问题。
    关于run-level 切换等更高级的操作,等待以后再更新。

  2. /etc/rc.d/rc.sysinit 系统初始化
    一句话:设置系统环境(网络环境、挂载设备、是否启用SElink、字体、时钟、欢迎界面、文件系统等等等)详情请参考:/etc/sysconfig/

  3. 启动系统服务
    /etc/rc.d/rc N
    比如run-level=5时,会执行/etc/rc.d /rc 5来取得/etc/rc.d/rc5.d/目录下面所有脚本程序,这些程序负责各项系统服务的开关。

  4. 用户自定义开机程序
    /etc/rc.d/rc.local,当你想要在开机时完成一些酷炫吊炸天的工作(例如开机程序中插入一些字符、《星球大战》电影等等),将所需执行的命令写入该文件,这样系统在启动过程中便会自动执行操作。

  5. 加载mingetty 终端机或者 X Window 界面
    一般是tty1-6 6个终端机。
    另外读者可以自己了解respawn 命令的作用。

  6. 启动配置文件
    大多数配置文件放在/etc/sysconfig/目录下,
    /etc/modprobe.conf :对模块进行参数规划
    /etc/sysconfig/* :用户身份、时钟、语言、键鼠、网络、网卡配置等文件

内核与内核模块

内核一般作为加载驱动和硬件检测的重要主体,在系统启动中具有重要的地位,也因此在日常使用中我们极少会碰到这些文件,所以一般而言内核部分只做了解即可,不用深入。
内核与内核模块更多资料请参考本链接

Boot Loader: Grub

Step1. 程序代码执行
安装在MBR 或boot sector 中,只是最小主程序,没有相关配置文件。
Step2. 设置值加载
所有配置文件(最重要的就是menu.lst )和环境参数文件,一般在/boot 目录下(与grub 有关的放在/boot/grub 下)

所以认识Grub 对于我们了解系统实际启动的流程具有很大帮助。
grub 识别硬盘:(hd0,1)代表第1块查找到的硬盘的第2个分区
grub 中的menu.lst 和grub.conf:menu是链接到conf文件上的,因此本体还是conf,通过vim打开可以看到其代码与我们的grub选择菜单具有高度的相关性。想要修改grub选择菜单中的选项就在menu.lst 文件中修改即可(注意!!!conf千万不要修改!!!conf千万不要修改!!!conf千万不要修改)
grub 的作用:加载内核文件、利用chain loader转交控制权(双系统)
在线编辑及命令行启动:选择内核文件,按e进入编辑模式即可修改启动设置。
vga设置:在编辑时加入vga=xxx,详情请参考ubuntu启动界面vga分辨率的调整

initrd 文件

辅助内核文件的加载,不作了解。

至于启动前的额外功能修改、vga设置、BIOS无法读取较大硬盘、为菜单加上密码,这些等到有使用需求的时候现学即可。

启动过程问题解决

  1. 忘记root

  2. init 配置文件错误

  3. BIOS 磁盘故障

  4. 文件系统错误而无法启动
    关键词:Loading Initial Ramdisk、载入初始化内存盘、紫屏、无能狂怒。
    问题描述:启动时停留在紫色界面,然后使用advanced 选项,新内核和旧内核的所有选项均无法打开(普通、upstart、recovery mode),均卡在载入初始化内存盘,进行检测确认initrd 进程已经加载,并且启动配置文件。
    问题定位:

    1. 起初大兄弟看了这篇文章,修改了grub 和 modules 中的部分命令,所以一开始认为是系统启动过程或者内核加载中的错误。可以参考以下文章:
      ubuntu内核损坏或误删除时的系统修复
      ubuntu无法启动的解决方法
      【linux】解决系统卡在ubuntu loading initial ramdisk
      Ubuntu16.04开机后黑屏无法进入登陆界面的解决办法
      Ubuntu开机紫屏的解决方法
      Ubuntu 16.04系统开机紫屏的解决办法
      GRUB2 hanging at ‘loading initial ramdisk’

      针对内核:启动旧内核并进行修复
      针对启动命令:进入高级选项-在线编辑并启动单用户维护模式,修改错误的命令或者取消错误的硬盘挂载。
      结果:无效。可见我们的错误并不在于启动命令的错误

    2. (有效)使用grub 自带的recovery mode 进行修复。然而在启动过程中也出现卡在加载初始化内存盘,使用在线编辑,将ro 只读改成rw 可读写,并ctrl + x引导启动,成功打开recovery mode。

      修复菜单大概如图所示,这时把所有选项滚一边,再次重启,成功进入登陆界面,问题得到解决。
      参考文章:
      Ubuntu 16.04 启动长时间停留在紫屏状态 - Loading Initial Ramdisk
      ubuntu的recovery mode
      ubuntu14.04无法启动使用recovery mode编辑fstab解决

  5. 切换硬盘

【Linux鸟哥笔记】20-启动流程、模块管理与Loader相关推荐

  1. 鸟哥的Linux私房菜(基础篇)- 第二十章、启动流程、模块管理与 Loader

    第二十章.启动流程.模块管理与 Loader 最近升级日期:2009/09/14 系统启动其实是一项非常复杂的程序,因为核心得要侦测硬件并加载适当的驱动程序后,接下来则必须要呼叫程序来准备好系统运行的 ...

  2. Linux学习笔记43——开机流程、模块管理与 Loader

    一.Linux 的开机流程分析 1 开机流程一览 2 BIOS, boot loader 与 kernel 载入 Boot Loader 的功能 3 第一支程序 systemd 及使用 default ...

  3. 历经一个月拿下<Linux鸟哥的私房菜>(基础篇)

    我的笔记链接会不断更新 word文件(126条消息) 学linux这篇就够了-Linux文档类资源-CSDN文库 完全适用Centos:如遇到特定符号  指代*#124;----- |         ...

  4. LIteOS学习笔记-7LiteOS启动流程与编译流程

    LIteOS学习笔记-7LiteOS启动流程与编译流程 LiteOS启动流程 1. 启动方式 2. 启动流程 硬件初始化 内核初始化 调试串口初始化 尝试进行网络连接 启动任务调度 LiteOS编译流 ...

  5. 【企业了解】人人都是产品经理、鸟哥笔记、CSDN、稀土掘金(2020年11月稀土掘金被字节跳动,金融与科技)

    [企业了解]人人都是产品经理.鸟哥笔记.CSDN.稀土掘金 前言 今天早上看<今日热榜官网>的时候,被一篇文章吸引--<中国成功学迭代史>,内容挺有意思的.然后发现这篇文章来自 ...

  6. Linux鸟哥的私房菜(第五章 文件权限以及目录配置)

    Linux鸟哥的私房菜 使用组和群组 User group others 文件属性 -rw-r–r-- 1 -(档案类型)rwx(档案拥有者权限{可读可写可执行)rwx(群组权限可读可写可执行)-其他 ...

  7. 【超级干货】鸟哥笔记VS知乎刘锤:一个运营牛人的进化论

    送给真正的互联网人一顿干货早餐 [小咖导读]作者:鸟哥笔记.知乎刘锤.运营具体都会做些什么?从基础的层面来讲,运营要关注和涉及的工作通常包括了如下三方面--拉新.留存.促活.超级干货的一篇文章,强烈推 ...

  8. 企业分析【鸟哥笔记】

    企业分析[鸟哥笔记] 前言 分析一下鸟哥笔记这家企业.看我能分析出什么信息来.此过程是实验过程.算是我企业分析的一个试错板块. 时长大约半小时. 分析思路:首先看官网,然后看企业政府公示,最后看第三方 ...

  9. Linux鸟哥的私房菜(硬件)

    Linux 鸟哥的私房菜 CPU 组成 逻辑算术 单元控制单元 主储存器 主储存器:输入单元传入数据到主存储器,处理后再传回 控制单元:协调周边组建和各单元工作 指令集分为精简指令集(RISC)Red ...

最新文章

  1. 第一位女性商业程序员玛丽库姆斯去世,享年 93 岁!
  2. ORM是进化还是倒退?
  3. webpack从入门到精通(一)初体验
  4. 全国计算机等级考试二级教程——公共基础知识(2013年版)pdf,全国计算机等级考试2级教程:公共基础知识(2013年版)...
  5. win7旗舰版6l打印机咋安驱动_在w7旗舰版上怎么安装HPlaserjet6L打印机?
  6. 特斯拉三季度生产23.8万辆 交付超24万辆
  7. java时间格式化yyyy
  8. NoSQL--Redis 2.4--Set
  9. 安装python时需要勾选_软件应用 | 用Python爬取网络站点数据时需要哪些必备库
  10. LeetCode_88、合并两个数组(python)
  11. 企业代码提交和发布流程
  12. 云计算设计模式翻译(五):Compute Resource Consolidation Pattern
  13. 为什么认真自学了NLP,面试还是回答不出问题
  14. 叮咚,您有一封告白信件待查收(原生HTML+CSS+JS绘制表白信件,代码+链接+步骤详解)
  15. vue如何做Seo优化
  16. 最新彩虹DS网源码V6.0.8完美运营防黑版
  17. 电脑时常断网和掉线的解决方法
  18. 通过集成第三方IM实现聊天应用
  19. Vue 表情输入组件,微信face表情组件
  20. python读取txt转为csv

热门文章

  1. 【豆瓣电影】2019/11/21/Python搜索豆瓣电影(Top100)爬虫+D3.js词云(票房和豆瓣评分)实现
  2. nemenyi检验英文全称_医学统计学专业术语中英文对照表.doc
  3. Linux route详解
  4. 《阿里云科技评论》第五期
  5. Javascript的Set集合
  6. 【Appium】基础之原生App/Web App/混合App
  7. 关于 Vue.proxyTable 是干什么的?以及如何配置?
  8. 华为手机鸿蒙芯片怎样,华为鸿蒙发布会虽然热闹,背后却依然充满了芯片焦虑...
  9. LT8711龙迅替代方案|Type-C转HDMI 4K60Hz高清投屏显示方案
  10. nfs服务器哪个版本稳定,NFS V3与各个版本间的比较