Linux系统启动引导流程
启动第一步--加载BIOS
当你打开计算机电源,计算机会首先加载BIOS信息,这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。在此之后,计算机心里就有谱了,知道应该去读取哪个硬件设备了,而这一切都与操作系统无关。
启动第二步--读取MBR
众所周知,硬盘上第0磁道第一个扇区被称为MBR,也就是Master Boot Record,即主引导记录,它的大小是512字节,别看地方不大,可里面却存放了预启动信息、分区表信息。
系统找到BIOS所指定的硬盘的MBR后,就会将其复制到0×7c00地址所在的物理内存中。其实被复制到物理内存的内容就是Boot Loader,而具体到你的电脑,那就是lilo或者grub了。
启动第三步--Boot Loader
Boot Loader自举程序就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好一切准备。
Boot Loader有若干种,其中Grub、Lilo和spfdisk是常见的Loader。
我们以Grub为例来讲解吧,毕竟用lilo和spfdisk的人并不多。
系统读取内存中的grub配置信息(一般为menu.lst或grub.conf),并依照此配置信息来启动不同的操作系统。
这里我们打开了grub.conf 这个文件,实际上是它是 /boot/grub/grub.conf 的 软链 , 有郊的内容如下,实际上我改动过了,如下图:
centos7的grub升级到了grub2
主要配置文件是
/boot/grub2/grub.cfg
通常修改的配置文件主要是/etc/default/grub
和/etc/grub.d/
目录
修改完配置后,都需要通过grub2-mkconfig命令下发。
grub2-mkconfig -o /boot/grub2/grub.cfg
GRUB2取代了grub逐渐成为主流,引导菜单启动从/boot自动生成,不是menu.lst手工配置。
Grub2修改内核启动顺序
在CentOS7中,提供了一个软件grubby,可以用来查看grub策略,如下:
grubby --info=ALL
列出所有内核
grubby --default-kernel
列出默认内核
grubby --default-index
列出默认索引
grub2-set-default 1
设置默认启动索引
grub2-mkconfig -o /boot/grub2/grub.cfg
重新下发
给grub2设定密码
grub2-setpassword
设定密码
cat /boot/grub2/user.cfg
查看密码
Grub2磁盘编号的变更
旧版的 grub 不论磁盘还是分区的起始号码都是 0 号,而 grub2 在分区的部分是以 1 开始编号
(hd0,msdos1)第一块磁盘,第一个分区
(hd1,gpt2) 第二块磁盘,第二个分区(GPT格式)
启动第四步--加载内核
根据grub设定的内核映像所在路径,系统读取内存映像,并进行解压缩操作。此时,屏幕一般会输出“Uncompressing Linux”的提示。当解压缩内核完成后,屏幕输出“OK, booting the kernel”。
系统将解压后的内核放置在内存之中,并调用start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完成Linux核心环境的建立。至此,Linux内核已经建立起来了,基于Linux的程序应该可以正常运行了。
启动第五步--用户层init依据inittab文件来设定运行等级
内核被加载后,第一个运行的程序便是/sbin/init,该文件会读取他的配置信息/etc/inittab文件,并依据此文件来进行初始化工作。
CentOS 7 已经不支持 /etc/inittab 方式了
新版本的运行级别都定义在 /lib/systemd/system下:
ls -ltr /lib/systemd/system/runlevel*.target
可以针对不同需要设置不同的运行级别:
设置命令行级别(init 3)方法:
ln -svf /lib/systemd/system/runlevel3.target /etc/systemd/system/default.target
ln -svf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
systemctl set-default multi-user.target
设置窗口级别(init 5)方法:
ln -svf /lib/systemd/system/runlevel5.target /etc/systemd/system/default.target
ln -svf /lib/systemd/system/graphical.target /etc/systemd/system/default.target
systemctl set-default graphical.target
以上每一行都可以设置,CentOS 7 中 systemd 使用链接来指向默认的运行级别
设置前最好删除 rm /etc/systemd/system/default.target
/etc/inittab文件最主要的作用就是设定Linux的运行等级,其设定形式是“:id:5:initdefault:”,这就表明Linux需要运行在等级5上。Linux的运行等级设定如下:
0:关机
1:单用户模式
2:无网络支持的多用户模式
3:有网络支持的多用户模式
4:保留,未使用
5:有网络支持有X-Window支持的多用户模式(既图形化界面)
6:重新引导系统,即重启
我们可以在命令行输入 runlevel 的命令可以看到当前的运行等级 格式如下:N 3 ,左边是上次运行等级,右边是现在的运行等级,init命令加上等级,可以直接切换当前运行等级,如init 5 切换至图形界面
在/etc/inittab中,文件格式如下
id:run-levels:action:process
- id 标识符,一般为2个数字或2个英文
- run-levels 指定运行等级,可以指定多个,或者不写,代表全部
- action 指定运行状态
- process 指定运行的脚本或命令
action常用取值
- initdefault :指定系统缺省启动的运行级别
- sysinit : 系统启动执行process中指定的指令
- wait :执行process中的指令,并等待结束再运行其他命令
- once :执行process中的指令,不等待其结束,很少用到
- crtlaltdel :按下Crlt + Alt + Del 的process指令
- powerfail :当电源出现错误时指定的process指令,不等待其结束
- powerokwait :当电源恢复时执行的process指令
- respawn :一旦process出现中止,请重新运行该指令
[cwj@iZ25bul9p1iZ rc.d]# ls /etc/rc.d/
init.d rc rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d rc.local rc.sysinit
在我们的这个目录里有这样几个文件,而我们的7个运行等级就是对应的这0-6这6个文件夹,有对应需要动的服务
而这7个文件夹里有我们需要的默认启动需要加载的服务。我们来看看这个文件夹
也很简单,他们全部是软链接文件,对应着/etc/init.d下面的脚本启动方式
其中S开头的代表是需要启动的服务(start的意思) ,K代表需要停止的服务。数字越小越优先启动,系统会分别启动他们。其实想要让系统在启动时不加载他们,只需要更改他们的名字,不让他们按照这样的规范就不会启动了
其实我们可以利用这里的文件达到自启动的目地
ln -s 加入软链接文件 chkconfig 查看和设定启动 ntsysv 可视化设定
启动第六步--init进程执行rc.sysinit
在设定了运行等级后,Linux系统执行的第一个用户层文件就是/etc/rc.d/rc.sysinit脚本程序,它做的工作非常多,包括设定PATH、设定网络配置(/etc/sysconfig/network)、启动swap分区、设定/proc等等。如果你有兴趣,可以到/etc/rc.d中查看一下rc.sysinit文件,里面的脚本够你看几天的
启动第七步--启动内核模块
具体是依据/etc/modules.conf文件或/etc/modules.d目录下的文件来装载内核模块。
启动第八步--执行不同运行级别的脚本程序
根据运行级别的不同,系统会运行rc0.d到rc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务。
启动第九步--执行/etc/rc.d/rc.local
你如果打开了此文件,里面有一句话,读过之后,你就会对此命令的作用一目了然:
This script will be executed after all the other init scripts.
You can put your own initialization stuff in here if you don’t
want to do the full Sys V style init stuff.
rc.local就是在一切初始化工作后,Linux留给用户进行个性化的地方。你可以把你想设置和启动的东西放到这里。
启动第十步--执行/bin/login程序,进入登录状态
此时,系统已经进入到了等待用户输入username和password的时候了,你已经可以用自己的帐号登入系统了。:)
漫长的启动过程结束了,一切都清静了…终于可以使用了
Linux系统启动引导流程相关推荐
- Linux开机引导流程
linux开机引导流程: 1.BIOS开机自检 BIOS程序首先检查,计算机硬件能否满足运行的基本条件,这叫做"硬件自检"(Power-On Self-Test),缩写为POST. ...
- 兄弟连Linux在线课堂:第5讲Linux系统引导流程
兄弟连Linux在线课堂:第5讲 Linux系统引导流程 大家好,我是李明,Linux爱好者,我计划推出一套Linux学习的在线课及视频教程,课程内容主要针对Linux初学者,大概每周一讲,差不多在春 ...
- 兄弟连Linux在线课堂:第5讲 Linux系统引导流程
大家好,我是李明,Linux爱好者,我计划推出一套Linux学习的在线课及视频教程,课程内容主要针对Linux初学者,大概每周一讲,差不多在春节前完成Linux基础入门与系统管理部分,总计分为十讲,内 ...
- linux的引导流程
随着Linux的应用日益广泛,特别是在网络应用方面,有大量的网络服务器使用Linux操作系统.由于Linux的桌面应用和Windows相比还有一定的差距,所以在企业应用中往往是Linux和Window ...
- Linux——系统引导流程学习简单笔记
开启电源: 固件 firmware(CMOS/BIOS) → POST 加电自检 对硬件就行检查 ↓ 自举程序 BootLoader(GRUB) → 载入内核 ↓ 载入内核 Kernel 1:驱动硬件 ...
- 重装系统 linux启动windows系统文件,重装Windows系统后,Linux系统启动引导失败
说明:我的电脑是在装了Windows系统后,装的Linux系统,所以启动引导是Linux干的活.可是,今天重装了Windows系统,启动引导就换成了Windows的,Windows的启动引导把Linu ...
- 简述linux系统引导流程,简单介绍如何用WinGrub 引导Linux系统简述
以下主要介绍我的第一次安装Linux系统遭遇,以及怎么度过这个遭遇的,希望对大家有所帮助.不喜欢的可以略过. 一.开篇叙述我第一次安装Linux系统和接下来的经历 开篇:按照北南兄弟的<FC4菜 ...
- 平述factory reset ——从main system到重引导流程
关于Android或linux的引导流程,网上大都是从开机开始讲述的,或者直接跳过bootloader引导阶段,直接从init进程开始说起.这里我从手机正常运行状态开始,到重启状态以及重启之后的状态略 ...
- grub2引导linux内核,一种基于grub2的linux系统启动bootloader的制作方法与流程
技术领域 本发明涉及服务器应用技术领域,具体涉及一种基于grub2的linux系统启动bootloader的制作方法. 背景技术: 当前linux系统的内核版本已经升级至4.0以上,最新的linux系 ...
最新文章
- Mysql学习总结(3)——MySql语句大全:创建、授权、查询、修改等
- 浅析企业网站排名低可能是哪些原因导致的呢?
- cvCalcBackProject的例子
- android 测试 大赛,轻量级android应用自动测试工具-2017全国大学生软件测试大赛.pdf...
- BeanPostProcessor 源码
- 三角形和矩形傅里叶变换_信号与系统:第三章傅立叶变换2.ppt
- 406. 根据身高重建队列
- 安装scrapy报错
- php编写九九乘法表隔行换色,JavaScript实现99乘法表及隔行变色实例代码
- 安卓c语言文档下载,C语言.NET技术09.doc
- 计算判断两条线是否垂直,平行,相交,求相交点坐标
- 微信H5开发-采坑记
- leapftp,leapftp中文教程加图解
- Python之ASCII码相关
- 光敏电阻5506主要参数_光敏电阻器的主要参数
- 计算机 显卡 淘汰,早该淘汰的VGA模拟接口:新显卡不再支持
- (二)openssl完成服务器证书签发
- Oracle 使用序列插入表自增字段(主键)
- 米兔机器人魔方_米兔卡片学习机首晒
- 中华英才网简历筛选标准