4-3 Linux启动流程

前言

Linux系统的启动过程并不是大家想象中的那么简单,其过程可以分为多个阶段:

通电 –> BIOS –> 主引导记录(MBR)–> grub引导 –> 加载内核 –> init进程 –> 读取/etc/inittab(运行级别)–> /etc/init.d –> 用户登录 –> Login shell



经典启动流程

以centos6为例,具体启动过程如下图所示:

在这里插入图片描述

1 按下电源

这是第一步。默认情况下,也只需这一步,服务器会按照预定程序完成后续开机工作。

当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。

操作系统接管硬件以后,首先读入 /boot 目录下的内核文件。


2 开机自检(BIOS)

通电后,服务器开机自检,包括硬盘内存等硬件设备。最后按照BIOS中设置的启动设备(通常是硬盘)来启动。

UEFI是新的主板引导模式,被看做是BIOS的继任者。


3 MBR引导

众所周知,硬盘上第 0 磁道第一个扇区被称为 MBR,也就是 Master Boot Record,即主引导记录,它的大小是 512 字节,存放了预启动信息、分区表信息。

系统找到 BIOS 所指定的硬盘的 MBR 后,就会将其复制到 0x7c00 地址所在的物理内存中。其实被复制到物理内存的内容就是 “引导加载器(Boot Loader)”,而具体到服务器,那就是下一步的grub了。

GPT是另一种分区表(数据存储结构),比MBR能保存更多分区等。注意,主板引导与磁盘分区表必须一致:

BIOS -> MBR
UEFI -> GPT


4 GRUB菜单

grub是一个小程序,负责引导加载系统。开机时会显示普通模式(默认)和rescue救援模式。通俗讲,有双系统时选择进入windows还是linux。

grub2配置文件位于/boot/grub2/grub.cfg中,由grub2 mkconfig使用/etc/grub.d中的模板和/etc/default/grub中的设置自动生成。


5 加载内核

grub选择操作系统后,os接管硬件,便加载 /boot 目录下的内核文件到内存里。boot目录内核文件包括:

$ ls /boot  
config-3.2.0-3-amd64
config-3.2.0-4-amd64
grub
initrd.img-3.2.0-3-amd64
initrd.img-3.2.0-4-amd64
System.map-3.2.0-3-amd64
System.map-3.2.0-4-amd64
vmlinuz-3.2.0-3-amd64
vmlinuz-3.2.0-4-amd64

6 运行init进程

init进程是系统所有进程的起点,它的进程号是1。init进程是所有进程的发起者和控制者,即所有其它进程的父进程,所以永远不会被终止。

如果某个进程在它衍生出来的全部子进程结束之前被终止,就会出现必须以init为参照的情况。此时那些失去了父进程的子进程就都会以init作为它们的父进程。


7 读取/etc/inittab

init的第二大作用,就是读取/etc/inittab,使得在进入某个特定的运行级别(Runlevel)时启动相应的程序。

Linux系统有7个运行级别(runlevel):

  1. 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
  2. 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登录
  3. 运行级别2:多用户状态(没有NFS)
  4. 运行级别3:完全的多用户状态(有NFS),登录后进入控制台命令行模式
  5. 运行级别4:系统未使用,保留
  6. 运行级别5:X11控制台,登录后进入图形GUI模式
  7. 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

8 读取/etc/rc.sysinit初始化系统

rc.sysinit是每一个运行级别都要首先运行的重要脚本,根据该脚本文件执行相应的系统初始化。

它主要完成的工作有:激活交换分区,检查磁盘,加载硬件模块,设置键盘、字体, 装载模块,设置网络等等以及其它一些需要优先执行任务。


9 运行/etc/rc.d/rcN.d/脚本

当运行级别为5,则系统会加载位置/etc/rc.d/rc5.d目录里的所有开机脚本。以此类推,不同运行级别运行不同目录的脚本。

/etc/rc.d/rc5.d/目录中的这些启动脚本实际上都是一些连接文件,真正的rc启动脚本实际上都是放在/etc/rc.d/init.d/目录下。

rc启动脚本有着类似的用法,它们一般能接受start、stop、restart、status等参数。


10 /etc/rc.local

执行用户自定义的开机启动程序,/etc/rc.local是一个shell脚本文件,将其赋予可执行文件,才能发挥作用。

zookeeper注册中心服务器开机自启动:

echo '/apps/zookeeper/bin/zkServer.sh start' >> /etc/rc.local
chmod +x /etc/rc.d/rc.local

11 登录页面login

系统运行mingetty程序显示登录页面,再执行/bin/login程序,用户输入账号密码信息将作为参数传给login程序来验证身份。

对于运行级别为5的图形方式用户来说,他们的登录是通过一个图形化的登录界面。登录成功后可以直接进入 KDE、Gnome 等窗口管理器。

对于运行级别为3的命令行方式用户来说,显示的是字符登录界面。当然,两种运行级别都可以通过ssh进行远程登录。



centos7与centos6

centos7与centos6启动略有不同,最大区别为centos7的系统第一个进程pid1为systemd程序,而centos6是init程序。

正如经典启动流程所示,从运行init进程往后红色部分为cento6特有。往前开机顺序是相似的。

两者开机启动流程的具体过程如下图:

在这里插入图片描述



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值