博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux 引导的六个步骤(启动顺序)
阅读量:3537 次
发布时间:2019-05-20

本文共 2333 字,大约阅读时间需要 7 分钟。

按下系统的电源开关,过一会就可以看到Linux的登录界面了。

你是否曾经想过,从按下电源开关到登录界面出现,这后面到底发生了什么?

下面就来介绍一下典型Linux引导的六大步骤:

1. BIOS

BIOS表示基本输入输入系统(Basic Input/Output System)

完成一些系统的完整性检查

搜索、加载并且执行引导程序(boot loader)

它在软盘,CD-ROM或者硬盘上寻找引导程序。你可以在系统启动时按下键盘(通常是F12或者F2,但是因系统而异)来修改启动顺序

一旦引导程序被检测到并且加载到内存,BIOS会将控制权移交给它

因此,简而言之,BISO负责加载并且执行MBR引导程序

2. MBR

MBR表示主引导记录(Master Boot Record)

它位于启动盘的第一个扇区。通常是/dev/hda,或者/dev/sda

MBR大小为512字节。包括三个部分:1)在第一个446字节中包含主引导程序(primary boot loader);2)后面64字节包含一个分区表;3)最后两字节是一个校验码

Anatomy of the MBR

它包含了GRUB(老系统中可能是LILO)信息

因此,简而言之,MBR负责加载并且执行了GRUB引导程序

3. GRUB

GRUB是多重引导管理器(GRand Unified Bootloader)

如果你的系统中安装了多个内核,你可以选择启动哪一个

GRUB显示了一个启动画面,等待几秒钟,如果你不输入任何东西,它将加载在配置文件中指定的默认内核

GRUB能够了解文件系统的信息(老一代的LILO就没有这个能力)

GRUB配置文件是/boot/grub/grub.conf(/etc/grub.conf是它的一个链接文件)。这是CentOS系统中grub.conf的样例

#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-194.el5PAE)
root (hd0,0)
kernel /boot/vmlinuz-2.6.18-194.el5PAE ro root=LABEL=/
initrd /boot/initrd-2.6.18-194.el5PAE.img
你可以注意到,这中间包含内核和initrd映像信息

因此,简而言之,GRUB负责加载并且执行内核和initrd映像。

4. 内核

按照grub.conf中“root="配置来挂载根文件系统

内核执行/sbin/init程序

既然这是被Linux内核执行的第一个程序,它的进程ID(PID)当然就是1了。执行”ps -ef | grep init"来查看一下PID。

initrd表示Initial RAM Disk

initrd被内核用作临时的根目录,直到内核启动完成并且真正的根目录挂载成功。它也包括一些编译好的必要的驱动程序,这些程序有助于它访问硬盘和其他硬件。

5. Init

查看/etc/inittab文件来决定Linux的运行级别(run level)

接下来是所有支持的运行级别

  • 0 - 挂起(halt)
  • 1 - 单用户模式
  • 2 - 多用户,不支持NFS
  • 3 - 完整的多用户模式
  • 4 - 保留
  • 5 - X11(图形用户界面)
  • 6 - 重启

Init程序从/etc/initab来确定默认的初始化级别,然后用来加载相应级别的程序

在你的系统上执行"grep initdefault /etc/inittab"来查看默认的运行级别

如果你想找点麻烦,可以将默认运行级别设为0或6试试。既然你已经知道0和6的意思,那估计你不会那么做

通常,默认运行级别会设置为3或者5

6. 运行级程序(Runlevel programs)

当Linux系统起来后,你能够看到各种各样的服务也起来了。比如说,它可能会显示“starting sendmail....OK"。这就是运行级程序,它们根据你在不同运行级别中的定义来执行不同目录中的程序

根据你在默认运行级别的设置,系统将从下面几个目录中选择一个来执行相应的程序:

  • Run level 0 – /etc/rc.d/rc0.d/
  • Run level 1 – /etc/rc.d/rc1.d/
  • Run level 2 – /etc/rc.d/rc2.d/
  • Run level 3 – /etc/rc.d/rc3.d/
  • Run level 4 – /etc/rc.d/rc4.d/
  • Run level 5 – /etc/rc.d/rc5.d/
  • Run level 6 – /etc/rc.d/rc6.d/

请注意在/etc目录下也有这些目录的符号链接。因此,/etc/rc0.d被链接到/etc/rc.d/rc0.d

在/etc/rc.d/rc*.d目录中,你能够看到很多开头是S或者K的程序

以S开头的程序在系统启动时被执行。S表示启动

以K开头的程序在系统关机时被执行。K表示杀死(Kill)

在程序名的S或K后面紧跟着一个数字,这是程序在启动或者关机时的执行序号。

例如,S12syslog用于启动syslog守护进程,它的执行序号是12。S80sendmail用于启动sendmail守护进程,它的执行序号是80。因此,syslog会在sendmail之前被启动

搞清楚了吧,这就是Linux启动过程中发生的事情。

原文链接:http://www.thegeekstuff.com/2011/02/linux-boot-process/

转载地址:http://wenhj.baihongyu.com/

你可能感兴趣的文章
卧槽!小姐姐用动画图解 Git 命令,这也太秀了吧?!
查看>>
厉害了!Python 编辑器界的神器 Jupyter ,推出官方可视化 Debug 工具!
查看>>
卧槽!Java 虚拟机竟然还有这些性能调优技巧...
查看>>
听说玩这些游戏能提升编程能力?
查看>>
7 年工作经验,面试官竟然还让我写算法题???
查看>>
被 Zoom 逼疯的歪果仁,造出了视频会议机器人,同事已笑疯丨开源
查看>>
再见,Eclipse...
查看>>
如果你还不了解 RTC,那我强烈建议你看看这个!
查看>>
沙雕程序员在无聊的时候,都搞出了哪些好玩的小玩意...
查看>>
漫话:为什么你下载小电影的时候进度总是卡在 99% 就不动了?
查看>>
我去!原来大神都是这样玩转「多线程与高并发」的...
查看>>
当你无聊时,可以玩玩 GitHub 上这个开源项目...
查看>>
B 站爆红的数学视频,竟是用这个 Python 开源项目做的!
查看>>
安利 10 个让你爽到爆的 IDEA 必备插件!
查看>>
自学编程的八大误区!克服它!
查看>>
GitHub 上的一个开源项目,可快速生成一款属于自己的手写字体!
查看>>
早知道这些免费 API,我就可以不用到处爬数据了!
查看>>
Java各种集合类的合并(数组、List、Set、Map)
查看>>
JS中各种数组遍历方式的性能对比
查看>>
Mysql复制表以及复制数据库
查看>>