【Linux鸟哥笔记】20-启动流程、模块管理与Loader
【Linux鸟哥笔记】20-启动流程、模块管理与Loader
- 目录浏览
- 章节学习
- BIOS加载
- 内核功能
- init进程
- 内核与内核模块
- Boot Loader: Grub
- initrd 文件
- 启动过程问题解决
前言
最近兄弟@programer_cao 在装ROS 系统,奈何实验室的服务器太拉跨,三天一奔溃两天一死机,前端时间装的Ubuntu18.04 系统经常报错,问题主要集中在可以出现Grub 界面但之后卡在初始化内存盘界面(无法进入Ubuntu 的开机界面),定位错误后发现Grub 中的配置文件被修改导致开机程序无法正确启动,因此学习一下原理,期待能够对这类问题有更深入的了解。
目录浏览
- Linux 启动流程分析
- 内核与内核模块
- Boot loader: Grub
- 启动过程中的问题解决
章节学习
引导装载程序(Boot Loader):Grub
(主流)、LILO
、spfdisk
。
启动流程
- 加载
BIOS
自我测试 - 获取第一个启动设备内
MBR
或者UEFI
的Boot Loader
- 加载内核
Kernel
kernel
加载驱动并检测硬件- 硬件驱动成功后,调用
init
进程,取得run-level
信息init
执行/etc/rc.d/rc.sysinit
来准备操作环境——网络、时区等init
执行run-level
用script
方式启动各个服务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 开始驱动周边设备。
这里注意几个点:
- 读取Boot Loader:
BIOS 可以通过INT 13 这条信道来确保读取磁盘的MBR 分区,从而实现读取Boot Loader 程序。 - 多个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 所覆盖。 - 内核在哪?
/boot 路径下
内核功能
(在BL 加载完内核之后)内核可以动态加载内核模块,模块放置于/lib/modules
内(自定义内核模块放置在/etc/sysconfig/modules/*.modules
),内核在启动过程中检测硬件并挂载根目录来额外的驱动程序。
虚拟文件系统(initialRAM Disk),放置于/boot/initrd
内,该系统可被BL 加载进内存并仿真成一个虚拟根目录用以加载需要的驱动程序,完成所以驱动后内核会重新调用/sbin/init
来启动系统。
init进程
回顾一下上面的内容
- 硬件驱动成功后,调用
init
进程,取得run-level
信息init
执行/etc/rc.d/rc.sysinit
来准备操作环境——网络、时区等init
执行run-level
用script
方式启动各个服务init
执行/etc/rc.d/rc.local
文件init
执行mingetty
终端机模拟程序、启动login
进程,最后等待登陆
针对进程执行的过程,简略的提一下各部分的原理:
首先系统会开启/sbin/init 进程,以此准备系统执行环境和run-level 配置。
run-level
run-level 是系统服务的执行等级,它规定了从关机、单用户维护模式、重启等7种服务类型(分为3类:0关机/4系统保留功能/6重启、1单用户维护模式、2无网络系统/3有网络文本系统/5有网络界面系统)。通过/etc/inittab
配置文件设置run-level 等级,使用script 命令的方式来使用不同的服务。想要了解更多inittab 配置文件的信息可以参考/etc/inittab配置文件详解。
另外说一句,inittab文件可以自行修改来自行设计启动环境的配置,所以一般不要修改这个文件,以免产生未知的问题。
关于run-level 切换等更高级的操作,等待以后再更新。/etc/rc.d/rc.sysinit 系统初始化
一句话:设置系统环境(网络环境、挂载设备、是否启用SElink、字体、时钟、欢迎界面、文件系统等等等)详情请参考:/etc/sysconfig/启动系统服务
/etc/rc.d/rc N
比如run-level=5
时,会执行/etc/rc.d /rc 5来取得/etc/rc.d/rc5.d/目录下面所有脚本程序,这些程序负责各项系统服务的开关。用户自定义开机程序
/etc/rc.d/rc.local
,当你想要在开机时完成一些酷炫吊炸天的工作(例如开机程序中插入一些字符、《星球大战》电影等等),将所需执行的命令写入该文件,这样系统在启动过程中便会自动执行操作。加载mingetty 终端机或者 X Window 界面
一般是tty1-6 6个终端机。
另外读者可以自己了解respawn 命令的作用。启动配置文件
大多数配置文件放在/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无法读取较大硬盘、为菜单加上密码,这些等到有使用需求的时候现学即可。
启动过程问题解决
忘记root
init 配置文件错误
BIOS 磁盘故障
文件系统错误而无法启动
关键词:Loading Initial Ramdisk、载入初始化内存盘、紫屏、无能狂怒。
问题描述:启动时停留在紫色界面,然后使用advanced 选项,新内核和旧内核的所有选项均无法打开(普通、upstart、recovery mode),均卡在载入初始化内存盘,进行检测确认initrd 进程已经加载,并且启动配置文件。
问题定位:起初大兄弟看了这篇文章,修改了grub 和 modules 中的部分命令,所以一开始认为是系统启动过程或者内核加载中的错误。可以参考以下文章:
ubuntu内核损坏或误删除时的系统修复
ubuntu无法启动的解决方法
【linux】解决系统卡在ubuntu loading initial ramdisk
Ubuntu16.04开机后黑屏无法进入登陆界面的解决办法
Ubuntu开机紫屏的解决方法
Ubuntu 16.04系统开机紫屏的解决办法
GRUB2 hanging at ‘loading initial ramdisk’针对内核:启动旧内核并进行修复
针对启动命令:进入高级选项-在线编辑并启动单用户维护模式,修改错误的命令或者取消错误的硬盘挂载。
结果:无效。可见我们的错误并不在于启动命令的错误(有效)使用grub 自带的recovery mode 进行修复。然而在启动过程中也出现卡在加载初始化内存盘,使用在线编辑,将ro 只读改成rw 可读写,并
ctrl + x
引导启动,成功打开recovery mode。
修复菜单大概如图所示,这时把所有选项滚一边,再次重启,成功进入登陆界面,问题得到解决。
参考文章:
Ubuntu 16.04 启动长时间停留在紫屏状态 - Loading Initial Ramdisk
ubuntu的recovery mode
ubuntu14.04无法启动使用recovery mode编辑fstab解决
切换硬盘
【Linux鸟哥笔记】20-启动流程、模块管理与Loader相关推荐
- 鸟哥的Linux私房菜(基础篇)- 第二十章、启动流程、模块管理与 Loader
第二十章.启动流程.模块管理与 Loader 最近升级日期:2009/09/14 系统启动其实是一项非常复杂的程序,因为核心得要侦测硬件并加载适当的驱动程序后,接下来则必须要呼叫程序来准备好系统运行的 ...
- Linux学习笔记43——开机流程、模块管理与 Loader
一.Linux 的开机流程分析 1 开机流程一览 2 BIOS, boot loader 与 kernel 载入 Boot Loader 的功能 3 第一支程序 systemd 及使用 default ...
- 历经一个月拿下<Linux鸟哥的私房菜>(基础篇)
我的笔记链接会不断更新 word文件(126条消息) 学linux这篇就够了-Linux文档类资源-CSDN文库 完全适用Centos:如遇到特定符号 指代*#124;----- | ...
- LIteOS学习笔记-7LiteOS启动流程与编译流程
LIteOS学习笔记-7LiteOS启动流程与编译流程 LiteOS启动流程 1. 启动方式 2. 启动流程 硬件初始化 内核初始化 调试串口初始化 尝试进行网络连接 启动任务调度 LiteOS编译流 ...
- 【企业了解】人人都是产品经理、鸟哥笔记、CSDN、稀土掘金(2020年11月稀土掘金被字节跳动,金融与科技)
[企业了解]人人都是产品经理.鸟哥笔记.CSDN.稀土掘金 前言 今天早上看<今日热榜官网>的时候,被一篇文章吸引--<中国成功学迭代史>,内容挺有意思的.然后发现这篇文章来自 ...
- Linux鸟哥的私房菜(第五章 文件权限以及目录配置)
Linux鸟哥的私房菜 使用组和群组 User group others 文件属性 -rw-r–r-- 1 -(档案类型)rwx(档案拥有者权限{可读可写可执行)rwx(群组权限可读可写可执行)-其他 ...
- 【超级干货】鸟哥笔记VS知乎刘锤:一个运营牛人的进化论
送给真正的互联网人一顿干货早餐 [小咖导读]作者:鸟哥笔记.知乎刘锤.运营具体都会做些什么?从基础的层面来讲,运营要关注和涉及的工作通常包括了如下三方面--拉新.留存.促活.超级干货的一篇文章,强烈推 ...
- 企业分析【鸟哥笔记】
企业分析[鸟哥笔记] 前言 分析一下鸟哥笔记这家企业.看我能分析出什么信息来.此过程是实验过程.算是我企业分析的一个试错板块. 时长大约半小时. 分析思路:首先看官网,然后看企业政府公示,最后看第三方 ...
- Linux鸟哥的私房菜(硬件)
Linux 鸟哥的私房菜 CPU 组成 逻辑算术 单元控制单元 主储存器 主储存器:输入单元传入数据到主存储器,处理后再传回 控制单元:协调周边组建和各单元工作 指令集分为精简指令集(RISC)Red ...
最新文章
- 第一位女性商业程序员玛丽库姆斯去世,享年 93 岁!
- ORM是进化还是倒退?
- webpack从入门到精通(一)初体验
- 全国计算机等级考试二级教程——公共基础知识(2013年版)pdf,全国计算机等级考试2级教程:公共基础知识(2013年版)...
- win7旗舰版6l打印机咋安驱动_在w7旗舰版上怎么安装HPlaserjet6L打印机?
- 特斯拉三季度生产23.8万辆 交付超24万辆
- java时间格式化yyyy
- NoSQL--Redis 2.4--Set
- 安装python时需要勾选_软件应用 | 用Python爬取网络站点数据时需要哪些必备库
- LeetCode_88、合并两个数组(python)
- 企业代码提交和发布流程
- 云计算设计模式翻译(五):Compute Resource Consolidation Pattern
- 为什么认真自学了NLP,面试还是回答不出问题
- 叮咚,您有一封告白信件待查收(原生HTML+CSS+JS绘制表白信件,代码+链接+步骤详解)
- vue如何做Seo优化
- 最新彩虹DS网源码V6.0.8完美运营防黑版
- 电脑时常断网和掉线的解决方法
- 通过集成第三方IM实现聊天应用
- Vue 表情输入组件,微信face表情组件
- python读取txt转为csv
热门文章
- 【豆瓣电影】2019/11/21/Python搜索豆瓣电影(Top100)爬虫+D3.js词云(票房和豆瓣评分)实现
- nemenyi检验英文全称_医学统计学专业术语中英文对照表.doc
- Linux route详解
- 《阿里云科技评论》第五期
- Javascript的Set集合
- 【Appium】基础之原生App/Web App/混合App
- 关于 Vue.proxyTable 是干什么的?以及如何配置?
- 华为手机鸿蒙芯片怎样,华为鸿蒙发布会虽然热闹,背后却依然充满了芯片焦虑...
- LT8711龙迅替代方案|Type-C转HDMI 4K60Hz高清投屏显示方案
- nfs服务器哪个版本稳定,NFS V3与各个版本间的比较