启动第一步--加载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系统启动引导流程相关推荐

  1. Linux开机引导流程

    linux开机引导流程: 1.BIOS开机自检 BIOS程序首先检查,计算机硬件能否满足运行的基本条件,这叫做"硬件自检"(Power-On Self-Test),缩写为POST. ...

  2. 兄弟连Linux在线课堂:第5讲Linux系统引导流程

    兄弟连Linux在线课堂:第5讲 Linux系统引导流程 大家好,我是李明,Linux爱好者,我计划推出一套Linux学习的在线课及视频教程,课程内容主要针对Linux初学者,大概每周一讲,差不多在春 ...

  3. 兄弟连Linux在线课堂:第5讲 Linux系统引导流程

    大家好,我是李明,Linux爱好者,我计划推出一套Linux学习的在线课及视频教程,课程内容主要针对Linux初学者,大概每周一讲,差不多在春节前完成Linux基础入门与系统管理部分,总计分为十讲,内 ...

  4. linux的引导流程

    随着Linux的应用日益广泛,特别是在网络应用方面,有大量的网络服务器使用Linux操作系统.由于Linux的桌面应用和Windows相比还有一定的差距,所以在企业应用中往往是Linux和Window ...

  5. Linux——系统引导流程学习简单笔记

    开启电源: 固件 firmware(CMOS/BIOS) → POST 加电自检 对硬件就行检查 ↓ 自举程序 BootLoader(GRUB) → 载入内核 ↓ 载入内核 Kernel 1:驱动硬件 ...

  6. 重装系统 linux启动windows系统文件,重装Windows系统后,Linux系统启动引导失败

    说明:我的电脑是在装了Windows系统后,装的Linux系统,所以启动引导是Linux干的活.可是,今天重装了Windows系统,启动引导就换成了Windows的,Windows的启动引导把Linu ...

  7. 简述linux系统引导流程,简单介绍如何用WinGrub 引导Linux系统简述

    以下主要介绍我的第一次安装Linux系统遭遇,以及怎么度过这个遭遇的,希望对大家有所帮助.不喜欢的可以略过. 一.开篇叙述我第一次安装Linux系统和接下来的经历 开篇:按照北南兄弟的<FC4菜 ...

  8. 平述factory reset ——从main system到重引导流程

    关于Android或linux的引导流程,网上大都是从开机开始讲述的,或者直接跳过bootloader引导阶段,直接从init进程开始说起.这里我从手机正常运行状态开始,到重启状态以及重启之后的状态略 ...

  9. grub2引导linux内核,一种基于grub2的linux系统启动bootloader的制作方法与流程

    技术领域 本发明涉及服务器应用技术领域,具体涉及一种基于grub2的linux系统启动bootloader的制作方法. 背景技术: 当前linux系统的内核版本已经升级至4.0以上,最新的linux系 ...

最新文章

  1. Mysql学习总结(3)——MySql语句大全:创建、授权、查询、修改等
  2. 浅析企业网站排名低可能是哪些原因导致的呢?
  3. cvCalcBackProject的例子
  4. android 测试 大赛,轻量级android应用自动测试工具-2017全国大学生软件测试大赛.pdf...
  5. BeanPostProcessor 源码
  6. 三角形和矩形傅里叶变换_信号与系统:第三章傅立叶变换2.ppt
  7. 406. 根据身高重建队列
  8. 安装scrapy报错
  9. php编写九九乘法表隔行换色,JavaScript实现99乘法表及隔行变色实例代码
  10. 安卓c语言文档下载,C语言.NET技术09.doc
  11. 计算判断两条线是否垂直,平行,相交,求相交点坐标
  12. 微信H5开发-采坑记
  13. leapftp,leapftp中文教程加图解
  14. Python之ASCII码相关
  15. 光敏电阻5506主要参数_光敏电阻器的主要参数
  16. 计算机 显卡 淘汰,早该淘汰的VGA模拟接口:新显卡不再支持
  17. (二)openssl完成服务器证书签发
  18. Oracle 使用序列插入表自增字段(主键)
  19. 米兔机器人魔方_米兔卡片学习机首晒
  20. 中华英才网简历筛选标准

热门文章

  1. JT等三维文件在线浏览系统
  2. 一行代码随意编辑网站
  3. 【计算机视觉40例】案例06:缺陷检测
  4. More Effective C++ Item 附2:一个auto_ptr的实现实例
  5. History of program(程序简史)
  6. 如何快速判断自己的网络NAT类型
  7. TikTok话题标签玄机何在,KOLBOX带你摆脱无效标签!
  8. MSP430F1612 第一个程序,点亮一个LED灯
  9. Do not stand at my grave and weep
  10. MFC读写ini文件方法