linux操作系统启动流程 & grub简述

linux操作系统启动流程 & grub简述

linux操作系统启动流程 & grub简述

CentOS 5 启动流程

1.POST:通电自检
2.BIOS:BOIS自检,加载硬盘
3.读取MBR,进行MBR引导
4.bootloader:grub引导菜单
5.加载内核 Kernel(ramdisk)
6.启动init进程,依据inittab文件设定运行级别
7.init进程,执行rc.sysinit文件
8.启动内核模块,执行不同级别的脚本程序
9.执行/etc/rc.d/rc.local
10.启动mingetty,进入系统登陆界面。

1.BIOS

打开计算机电源,计算机会首先加载BIOS信息。BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。开机时将ROM中的指令映射到RAM的低地址空间,CPU读取到这些指令,硬件的健康状况进行检查,按照BIOS中设置的启动设备来启动。

2.MBR

硬盘上第0磁道第一个扇区被称为MBR,也就是Master Boot Record,即主引导记录,它的大小是512字节,可里面却存放了预启动信息、分区表信息。
系统找到BIOS所指定的硬盘的MBR后,就会将其复制到0×7c00地址所在的物理内存中。被复制到物理内存的内容就是Boot Loader,那就是lilo或者grub了。

3.bootloader

Boot Loader 就是在操作系统内核运行之前运行的一段小程序。bootloader供一个菜单,允许用户选择要启动的系统或不同的内核版本; 把用户选定的内核装载到RAM中的特定空间中,解压、展开,而后把系统控制权移交给内核。

Boot Loader有若干种,其中Grub、Lilo和spfdisk是常见的。

grub简介

grub启动三阶段:

  • stage1: 引导安装在MBR中的引导程序(bootloader)
  • stage1_5: mbr之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统;
  • stage2:读取存放在磁盘上的grub(存放位置:/boot/grub),grub的配置文件:/boot/grub/grub.conf,在etc目录下有此文件的连接文件:/etc/grub.conf

注意:stage2及内核通常放置于同一个磁盘分区。

grub stage2功用:

  • 提供菜单、并提供交互式接口
    e: 编辑模式,用于编辑菜单;
    c: 命令模式,交互式接口;
  • 加载用户选择的内核或操作系统
    允许传递参数给内核
    可隐藏此菜单
  • 为菜单提供了保护机制
    为编辑菜单进行认证
    为启用内核或操作系统进行认证

grub的命令行接口

如何识别设备

grub配置文件

实例:手动恢复grub

linux操作系统启动流程 & grub简述

linux操作系统启动流程 & grub简述

linux操作系统启动流程 & grub简述

linux操作系统启动流程 & grub简述

4>.root (hd[0-n,y) 指令来指定/boot所在的分区

linux操作系统启动流程 & grub简述

5>.kernel 指令,用来指定Linux的内核,及/所在的分区

linux操作系统启动流程 & grub简述

6>.initrd 命令行来指定initrd文件

linux操作系统启动流程 & grub简述

7>.boot 引导系统

linux操作系统启动流程 & grub简述

4.加载内核

Kernel,内核,Kernel是Linux系统最主要的程序,实际上,Kernel的文件很小,只保留了最基本的模块,并以压缩的文件形式存储在硬盘中,当GRUB将Kernel读进内存,内存开始解压缩内核文件。

initrd(Initial RAM Disk),它在stage2这个步骤就被拷贝到了内存中,这个文件是在安装系统时产生的,是一个临时的根文件系统(rootfs)。因为Kernel为了精简,只保留了最基本的模块,因此,Kernel上并没有各种硬件的驱动程序,也就无法识rootfs所在的设备,故产生了initrd这个文件,该文件装载了必要的驱动模块,当Kernel启动时,可以从initrd文件中装载驱动模块,直到挂载真正的rootfs,然后将initrd从内存中移除。

Kernel会以只读方式挂载根文件系统,当根文件系统被挂载后,开始装载第一个进程(用户空间的进程),执行/sbin/init,之后就将控制权交接给了init程序。

总结

  1. 探测可识别到的所有硬件设备;
  2. 加载硬件驱动程序;(有可能会借助于ramdisk加载驱动)
  3. 以只读方式挂载根文件系统:rootfs;
  4. 运行用户空间的第一个应用程序:/sbin/init

5. init:依据inittab文件设定运行级别

内核被加载后,第一个运行的程序便是/sbin/init,该文件会读取/etc/inittab文件,并依据此文件来进行初始化工作。其实/etc/inittab文件最主要的作用就是设定Linux的运行等级,其设定形式是“:id:5:initdefault:”,这就表明Linux需要运行在等级5上。Linux的运行等级设定如下:

配置文件/etc/inittab

6.系统初始化脚本rc.sysinit

系统初始化脚本:/etc/rc.d/rc.sysinit

  1. 设置主机名;
  2. 设置欢迎信息;
  3. 激活udev和selinux;
  4. 挂载/etc/fstab文件中定义的所有文件系统;
  5. 检测根文件系统,并以读写方式重新挂载根文件系统;
  6. 设置系统时钟;
  7. 根据/etc/sysctl.conf文件来设置内核参数;
  8. 激活lvm及软raid设备;
  9. 激活swap设备;
  10. 加载额外设备的驱动程序;
  11. 清理操作;

7.启动内核模块,执行不同级别的脚本程序

执行/etc/inittab中脚本:

8.执行/etc/rc.d/rc.local

/etc/rc.d/rc.local是给用户自定义启动时需要执行的文件。

9.启动mingetty,进入系统登陆界面

CentOS6启动流程

CentOS7启动流程

区别

linux操作系统启动流程 & grub简述

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/100142

联系我们

400-080-6560

在线咨询

工作时间:周一至周五,9:30-18:30,节假日同时也值班

QR code