CentOS 6开机启动流程理论篇

CentOS 6开机启动流程理论篇


  • centos 系统的启动流程
  • grub
  • 破坏Linux的核心文件再修复体验系统启动流程

概述

任何系统启动的第一步必然是加电,然后计算机硬件会主动地读取BIOS来加载硬件设备信息并检测,之后系统会主动地读取第一个有引导程序的设备,该引导程序(grub)可以指定使用哪个内核来启动,并将其加载至内存当中运行,同时内核还要加载其他硬件设备以及对应的驱动程序,来例主机各个组件开始运行,等所有硬件设备加载完后,系统就真正地启动了,稍后系统会操作一些外部程序开始准备软件的运行环境,之后加载一些系统运行时所需要的软件程序,最后一公里就是等待用户的登陆.

本文主要以CentOS 5、6的启动说明Linux系统的启动流程,CentOS 7来日再叙!主要以CentOS 6为例说明!

从宏观上讲,centos 6的开机可简述为:

POST(加电自检)--> MBR引导--> grub--> 加载内核 --> 启动init进程 --> 用户登录

具体详情见下图:

1.加载BIOS的硬件信息,获取第一个启动设备
2.读取第一个启动设备MBR的引导加载程序(grub)的启动信息
3.加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备
4.核心执行init程序,并获取默认的运行信息
5.init程序执行/etc/rc.d/rc.sysinit文件
6.启动核心的外挂模块
7.init执行运行的各个批处理文件(scripts)
8.init执行/etc/rc.d/rc.local
9.执行/bin/login程序,等待用户登录
10.登录之后开始以Shell控制主机

关键词:

bootloader: 引导程序,一个引导加载器

对于Windows而言,其bootloader为ntloader,仅启动的是OS.

对于Linux而言,目前流行的是gurb,其功能强大,允许用户选择要启动的系统(不同的内核版本),把用户选定的内核装载到内存中的特定空间中,解压、展开,并把系统控制权移交给内核。

MBR: 主引导刻录,位于硬盘的主引导扇区里面(硬盘的0柱面、0磁头、1扇区称为主引导扇区),其中bootloader占用了446bytes, 分区表占用了64bytes,2bytes的分区标识符55AA.

GRUB:

primary boot loader : 1st stage,1.5 stage
secondary boot loader :2nd stage,分区文件

grub的程序运行本配置加载是分三个阶段(stage)来运行:

stage1:运行bootloader主程序,这个程序必须要被安装在主引导区,即MBR中,而MBR中仅安装了bootloader的最小主程序,并没有安装bootloader的相关配置文件。

stage1_5: 在MBR随后的扇区中存放,主要用于与stage2所有分区的文件系统进行交互。

stage2: 通过bootloader加载所有配置文件及相关的环境参数信息,这些配置文件及相关的环境参数都存放于磁盘分区上的/boot目录下。

当bootloader读取了这些文件系统所定义的数据后,就能够识别文件系统并读取在该文件系统上的内核文件了。

grub作为Linux系统使用最广泛的启动管理器,我们有必要了解一下其配置文件grub.conf的内容:

Note:

default=0
    表示默认的启动条目
timeout=5
    表示等待时间,如果超过5秒,则使用默认的启动条目defaultsplashimage=(hd0,0)/grub/splash.xpm.gz
    定义启动时的背景图片信息
hiddenmenu
    启动时是否要显示菜单,默认情况下是不显示菜单信息,如果要显示,注释掉该行即可
title
    定义各个操作系统的名称
root (hd0,0)
    root: 表示内核文件存放的位置,这里指的是分区位置,而非根目录;
    硬盘以hd表示,代号以()括起来,如(hd0,0)表示磁盘上的第一个分区,磁盘编
    号是grub搜寻到的顺序。
kernel
    内核的名称及一些启动时的核心参数,由于启动过程中需要挂载根目录,因此
    就需要指定根目录所在的分区。
initrd
    initrd或initramfs,即虚拟文件系统

grub也支持命令行接口:直接在shell中输入grub

grub的保护机制:只有通过认证才能修改grub.conf信息,可以通过以下方式来对grub.conf进行保护:

1. 在第一个title之上添加password --md5 
    主要用于保护编辑功能;
2. 在某个title内添加password --md5
    主要用于保护内核
    
生成密码的命令:grub-md5-crypt
              openssl passwd -1   # -1表示生成md5

Kernel: 自身初始化

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

init:

SysV: init, CentOS 5之前
    配置文件:/etc/inittabUpstart: init,CentOS6
    配置文件:/etc/inittab, /etc/init/*.conf
Systemd:systemd, CentOS 7
    配置文件:/usr/lib/systemd/system
             /etc/systemd/system

ramdisk:

内核中的特性之一:使用缓冲和缓存来加速对磁盘上的文件访问
ramdisk--> ramfs提高速度
CentOS 5: initrd, 工具程序:mkinitrd
CentOS 6: initramfs,工具程序:mkinitrd, dracut

在/etc/inittab中定义了系统的默认启动级别及所有的级别,通常默认为3或5级别,各级别之间可通过 init [0-6] 来切换,可通过runlevel或者who -r命令来查看当前的运行级别。

7个不同的run level 需要启动的scripts放置路径: /etc/rc.d/

其中,/etc/rc.d/rc.sysinit是系统的初始化脚本,其实现以下作用:

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

另外,centos 5中,/etc/inittab中还有这一字段:

rc N意味着读取/etc/rc.d/rcN.d/,里面的文件都是以K或S打头的链接文件。

K*: K##*:##运行次序;数字越小,越先运行;数字越小的服务,通常为依赖到别的服务
S*: S##*:##运行次序;数字越小,越先运行;数字越小的服务,通常为被依赖到的服务

注意:正常级别下,最后启动一个服务S99local没有链接至/etc/rc.d/init.d一个服务脚本,而是指向了/etc/rc.d/rc.local脚本;

另外,不便或不需写为服务脚本放置于/etc/rc.d/init.d/目录,且又想开机时自动运行的命令,可直接放置于/etc/rc.d/rc.local文件中;

/etc/rc.d/rc.local在指定运行级别脚本后运行,可以根据情况,进行自定义修改

小结:CentOS 6的启动流程:

POST --> Boot Sequence(BIOS) --> Boot Loader --> Kernel(ramdisk) --> rootfs--> switchroot--> /sbin/init-->(/etc/inittab, /etc/init/*.conf) --> 设定默认运行级别--> 系统初始化脚本rc.sysinit--> 关闭或启动对应级别的服务--> 启动终端

小结:grub

  1. stage1: mbr
  2. stage1_5: mbr之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统
  3. stage2:磁盘分区(/boot/grub/), stage2及内核等通常放置于一个基本磁盘分区

在grub引导内核启动的过程中是可以设置内核参数的,譬如是否开启selinux, 系统的最大loop文件,系统要启动的第一个进程等,这些设置的内核参数可用如下命令查看:

[[email protected] ~]#cat /proc/cmdline
ro root=UUID=02ca7016-e9e5-47c2-b015-cd99629f2df0 rd_NO_LUKS rd_NO_LVM 
LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16   KEYBOARDTYPE=pc 
KEYTABLE=us rd_NO_DM rhgb quiet
[[email protected] ~]#

当然,还有专门的内核参考文档:usr/share/doc/kernel-doc-2.6.32/Documentation/k ernel-parameters.txt

要想查看此文档,需要安装相应的kernel-doc包,直接挂载光盘可安装。

[[email protected] /usr/share/doc/kernel-doc-2.6.32/Documentation]#ls kernel-docs.txt kernel-docs.txt
[[email protected] /usr/share/doc/kernel-doc-2.6.32/Documentation]#

关于临时根文件系统

临时根文件系统允许内核在没有挂载任何物理磁盘的情况下完整地实现引导,这个临时根文件系统就是initrd. 在内核引导过程中,初始 RAM 磁盘(initrd/initramfs)是由stage2加载到内存中的,它会被复制到RAM中,并挂载到系统上。当内核被引导之后,可以正式装备根文件系统了,此时会将 initrd 根文件系统卸载掉,并挂载真正的根文件系统,这就是所谓的switch root,即根切换.

了解了系统启动的基本流程,以下我们通过“破坏式实验”,即破坏系统启动过程中的一些关键环节,使系统无法启动,然后我们再通过修复这些文件使得系统正常重启,进而体验Linux系统的启动流程,这些关键环节包括破坏grub三个stage(stage1、stage1-5、stage2) 中的任何一个阶段,甚至是整个grub; 还有挂载文件/etc/fstab,内核文件vmlinuz, 系统引导时需要加载的驱动程序文件initramfs以及MBR中的相关信息等。

本文半前部分(理论篇)我们主要讲述了centos 6的启动流程,解析了相关的关键词,后半 部分(实验篇)将通过大量破坏式实验体验了相关的关键文件在Linux系统中起的作用。

时间: 2024-10-13 17:24:06

CentOS 6开机启动流程理论篇的相关文章

CentOS 6开机启动流程实验篇

CentOS 6开机启动流程实验篇 centos 系统的启动流程 grub 破坏Linux的核心文件再修复体验系统启动流程 CentOS 6开机启动的具体详情请参见理论篇! 了解了系统启动的基本流程,以下我们通过"破坏式实验",即破坏系统启动过程中的一些关键环节,使系统无法启动,然后我们再通过修复这些文件使得系统正常重启,进而体验Linux系统的启动流程,这些关键环节包括破坏grub三个stage(stage1.stage1-5.stage2) 中的任何一个阶段,甚至是整个grub;

CentOS系列开机启动流程

在我们使用Linux操作系统的时候,只要按下电源键,就会出现一些乱七八糟的代码,过一会就会出现登陆界面,那么在这期间系统自己都做了什么?现在就说一下在这这段时间系统做了些什么. 系统初始化流程:                                        POST-->Bootsequence(BIOS)-->Bootloader(MBR)-->Kernel(ramdisk)-->rootfs(readonly)-->/sbin/init()/sbin/in

CentOS开机启动流程简介

我们都知道按下电脑电源键后,屏幕上会一闪而过很多信息,然后显示登录界面,然后输入用户名,密码就可以畅享网络世界了.那么这中间到底发生了什么呢,今天就让我们来简单探讨一下CentOS的简易版开机启动流程吧. 第一阶段:通电自检过程 我们都知道电脑所有数据指令都是在内存上才能被cpu处理的吧,我们还知道内存在断电后其上面的所有数据都会丢失吧,那么开机的时候内存应该是没有东西的吧,那上面都不能干了,更别说启动一个操作系统了,其实啊,我们内存并不只是我们常见的那个内存卡,很多硬件都会映射一段内存到cpu

(转)CentOS 7系统详细开机启动流程和关机流程

CentOS 7系统详细开机启动流程和关机流程 原文:http://blog.csdn.net/yuesichiu/article/details/51350654 名称 bootup - 系统启动流程 描述 在系统启动过程中要涉及多个不同的组件.按下开机按钮后,首先BIOS/UEFI做最基本的硬件自检与初始化, 然后加载预设/手动选择的磁盘/网络上的引导加载器(例如GRUB2),引导加载器进一步从磁盘/网络上加载操作系统内核(例如Linux). 对于Linux来说,内核将会(可选的)解压一个i

Linux之Centos系统的启动流程

概述 了解系统的启动流程,有助于我们了解Linux系统上的一些工作原理,有助于我们深入的理解一个系统的运作方式,那么本篇就以CentOS6系统为例,介绍一下有关Linux系统启动相关的内容,分为一下几个部分 1.Linux系统的一些基础概念 2.CentOS6上的启动流程概述 第一章 Linux系统的一些基础概念 Linux系统的组成部分:内核(kernel)+根文件系统(rootfs) rootfs:程序和glibc(GNU发布的libc库)   库:   函数集合,function,调用接口

centos系列的启动流程及基础知识点

下面介绍的是基于Intel x86架构的CentOS系列操作系统的启动流程. 1.Linux系统基础简介 (1).Linux[系统组成]:内核+应用程序 或 内核+rootfs (2).Linux的[运行环境]:内核空间 --------内核进程占用CPU和内存资源总和 用户空间 --------应用程序占用CPU和内存资源总和 (3).[内核]主要具有6个[功能]:进程管理.文件系统管理.内存管理.网络协议管理.驱动管理.内存功能. 对于内核,有两种设计:单内核.微内核.单内核,是所有功能聚集

Linux CentOS 5/6启动流程

CentOS 5/6启动流程 1.加电自检(post) 按开机电源后通过CMOS芯片的BIOS系统检测系统硬件是否正常 2.查找系统引导2.1 通过BIOS中的引导设置BOOT Sequence按次序查找引导程序,通过第一个有引导程序的设备启动: 2.2 加载bootloader,通过bootloader选择需要加载的内核版本,将用户选择的内核版本加载到内存中特定的位置,解压展开,然后将控制全转交给内核 (1)MBR引导程序   446字节:bootloader  64字节:分区表  2:结束标

CentOS 6.X启动流程

CentOS 6.X启动流程 /boot分区 启动引导程序是默认可以识别boot分区的.因此在系统还无法加载硬盘的时候,boot分区是可以识别的! initramfs内存文件系统 CentOS 6.x中使用initramfs内存文件系统取代了CentOS 5.x中的initrd RAM Disk.他们的作用类似,可以通过启动引导程序加载到内存中,然后加载启动过程中所需要的内核模块[用来模拟真正的Linux文件系统结构,详细信息如下],比如USB.SATA.SCSI硬盘的驱动和LVM.RAID文件

Centos 配置开机启动脚本启动 docker 容器

原文:Centos 配置开机启动脚本启动 docker 容器 Centos 配置开机启动脚本启动 docker 容器 Intro 我们的 Centos 服务器上部署了好多个 docker 容器,因故重启的时候就会导致还得手动去手动重启这些 docker 容器,为什么不写个脚本自动重启呢,于是就有了这篇文章. 批量启动 Docker 容器 之前我们有提到过关于 docker 的一些骚操作 ,可以直接使用 docker start $(docker ps -aq) # 启动所有容器 docker s