Linux的启动流程(CentOS 6)

前言

   Linux启动的过程在实际生产中有着至关重要的作用。试想一下,如果我们在实际生产中服务器因为某一个服务出了问题,而不能启动,这时我们应该怎么办。如果我们了解Linux的详细启动过程,知道是在哪一个环节出了问题,我们就能够进入到相应的环节,排除掉相应的问题,从而解决实际生产中的问题。

   同时,我们在这里提出一个问题,有谁知道Windows的启动过程呢?如果启动过程出了问题,我们该怎么办呢?恐怕答案只有重启系统了吧……

   Linux 系统的启动过程对于管理员来说是完全透明的,了解了Linux的启动过程,就好像有了透视眼一样,能够清楚的了解Linux的一切。知道了这些,不仅能够解决实际生产中的问题,更能够自己来制作Linux,自己定制Linux了,总之Linux大法好……

写在前面(最重要)

本文部分资料参考了以下博文。

  1. Linux Booting Process steps – RHEL/CentOS 7
  2. http://www.linuxidc.com/Linux/2014-03/97862.htm
  3. http://www.cnblogs.com/zengkefu/p/5559058.html

先来看一张图

可以图片上点击右键,选择在新的标签页中打开,这样可以查看大图。此图为笔者根据参考资料重制,转载请注明出处。


   这张图大体上描述了Linux 的启动流程,在Linux的不同启动阶段,标注的相应的注释。本文将在此图的基础上,对Linux的启动过程分阶段的进行详细的描述。同时由于自身能力有限,文中描述难免有纰漏之处,还请各位读者留言指出,我会及时改正。

Linux启动过程都经历了什么!!

  • 硬件引导启动
  • grub启动引导阶段
  • 内核引导阶段
  • init初始化阶段

硬件引导启动

   硬件引导启动过程在Linux和Windows上是相似的。熟悉Windows系统的朋友可以结合Windows的启动过程来理解。

BIOS 启动

   稍有计算机基础的人都会知道BIOS(Basic Input / Output System),又称为基本输入输出系统,它是一组固化到计算机主板上的一段程序,存储在ROM中。里面保存了计算机最基本的输入输出程序,计算机启动的时候首先根据BIOS中提供的信息去查找相应的硬件,并完成最基本的检测。如果这个过程中出现了问题,系统就不会启动。
   举一个最简单的例子,如果系统在BIOS阶段发现,内存条没有成功加载,那么系统还能够正常启动吗?即便Windows系统在这一点上也是如此的。

MBR 分区引导

   关于Linux系统的分区结构有两种方式,分别是MBR分区和GPT分区。二者在分区结构上有很大的不同,区别也很多,二者的异同可以去查看相关的资料,我们在这里不做详细的介绍。
   我们以MBR分区为例,来介绍Linux的启动过程。
   硬盘上第0磁道第一个扇区被称为MBR,也就是Master Boot Record,即主引导记录,它的大小是512字节,预启动信息、分区表信息。

   在计算机完成了BIOS阶段之后,系统会找到BIOS中指定的硬盘的MBR,此时系统启动的控制权就移交到MBR阶段。如图所示,在MBR由三部分组成,分别是BootLoader(主引导程序),DPT(硬盘分区表)和55AA(硬盘有效标志)。其详细结构可参考上图。

grub 启动引导阶段

   系统启动到MBR阶段的时候会读取MBR中记录的BootLoader。所谓的BootLoader指的就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好一切准备。在Linux 中就是grub。

   Linux 中的grub 启动位于/boot/grub/目录下

实验 如果仅仅保留 grub.conf 文件,系统能够正常启动吗?

仅仅保留 grub.conf 在启动过程发生的错误,提示信息如下图所示

stage 1阶段

   系统进入到MBR阶段中,就会直接将磁盘的前446字节读入内存中,也就是BootLoader。stage 1阶段就是指的这一段。
   stage 1 阶段的任务非常简单,就是将硬盘中的这446个字节读入内存中,并解析,然后为下一个阶段做好准备。

实验 如果Stage1 阶段被破坏了,如何修复启动?

前面我们说过,Stage1 主要位于BootLoader 中,也就是硬盘的第0个磁道的第一个扇区的前446个字节,那么我们只要将446个字节破坏掉了就可以模拟这个实验。先看下面一个动图。

从图中可以看到,这时系统会直接进入救援模式。因为系统找不到找不到硬盘启动代码。所以我们就进入到救援模式,进行一系列的救援操作。

grub-install 的作用就是重新安装grub,会恢复/boot/grub 目录下的文件。
我们在执行 grub-install的过程,不仅修复了stage1 阶段,还修复了stage1.5阶段和stage2阶段。

stage 1.5阶段

stage1 位于/boot基本磁盘分区中,为识别内核文件所在的文件系统提供系统识别扩展。
Stage 1.5 是桥梁,Stage 1 并不能直接识别文件系统,所以需要Stage 1.5来引导某个文件系统当中的Stage 2.

stage 2阶段

  stage 2阶段是GRUB的核心程序,能让用户以菜单方式将操作系统加载、新增参数、修改选项,这些全都是stage2的功用。对GRUB来说,stage2除了不能自己启动外,剩下的事情全都由stage2完成。像是用户在启动时所看到的GRUB启动倒数画面,或是紧接着的启动菜单画面,就都是由stage2所提供的。 在 /boot/grub/目录下可以看到由一个stage2 的文件,就是这个文件起到了至关重要的作用。
   在Stage 2阶段 会读取 grub.conf 文件,而grub.conf 文件也是在Linux的整个启动过程中占据着尤为重要的一环。

grub.conf 配置文件

grub.conf 文件在启动过程中有着很大的作用

  • 能够指定默认启动的内核或者系统
  • 提供交互式接口
  • 提供启动时的密码保护

下面我们就会详细的解释一下grub.conf 这个配置文件。如下图所示,是我们自定义的grub.conf文件。

  • default=0 默认启动的是哪个操作系统
  • timeout=5 选择需要启动的操作系统所需要的时间,如果5秒钟之内不选的话,就启动默认内核或者操作系统
  • splashimage 启动菜单的背景 ,也就是在选择 需要启动的内核或者操作系统的界面
  • passwd 输入启动项的密码,意思就是说在看到系统启动项之后,只有输入密码才能进行命令操作,比如说进入单用户。这里配置密码的方式有多种,可以以明文的形式进行配置也可以以加密的形式进行配置。而加密的方式有两种,grub-md5-crypt,grub-crypt. 在文件中配置如下所示。
    passwd magedu
    passwd --md5 加密密码
    passwd --encrypted  加密密码
  • hiddenmenu 隐藏选择kernel或操作系统菜单,只有出现等待界面后按下enter键才会出现。如果没有这个字段,则每次系统启动都会出现这个选择菜单。
  • title 定义需要启动的菜单,(hd0,0) 可以去掉,但是 kernel 和 initrd 两者的顺序不能颠倒,否则系统启动失败。
  • rhgb 选项可以去掉,隐藏 启动的动画界面(通常是CentOS 6 或者 CentOS 7的LOGO),直接显示字符界面,字符界面上显示的是各种服务的相关启动信息
  • quiet 默认隐藏内核的启动信息,如果去掉,启动时不光显示服务的启动信息,还显示内核的启动信息。

如果我们隐藏了内核的启动信息,去哪里能够查看内核的启动信息呢?

cat /proc/cmdline 会显示与grub.conf 一致的内核信息。

内核引导阶段

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

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

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

init 初始化阶段

   init 过程,顾名思义,就是对操作系统进行初始化的一个过程,此时操作系统内核已经在内存中加载。实际上是根据/etc/inittab(定义了系统默认运行级别)设定的动作进行脚本的执行,第一个被执行的脚本为/etc/rc.d/rc.sysinit,这个是真正的OS初始化脚本
相关的内容以及配置在图中已经有了详细的描述,此处不再详述。

综上,系统启动流程进行了大体的介绍,无奈,时间紧张,有很多地方只是简单地一笔带过。实际生产中,有些细节也很重要,包括整个启动过程中每一个环节如果出了故障应该如何修复,都是值得详细描述的知识点。以后有时间会回来重新更新补充,以图做到更好。

时间: 2024-12-31 02:54:56

Linux的启动流程(CentOS 6)的相关文章

【内核】linux内核启动流程详细分析【转】

转自:http://www.cnblogs.com/lcw/p/3337937.html Linux内核启动流程  arch/arm/kernel/head-armv.S  该文件是内核最先执行的一个文件,包括内核入口ENTRY(stext)到start_kernel间的初始化代码, 主要作用是检查CPU ID, Architecture Type,初始化BSS等操作,并跳到start_kernel函数.在执行前,处理器应满足以下状态:  r0 - should be 0 r1 - unique

I.MX6 Linux Qt 启动流程跟踪

/************************************************************************** * I.MX6 Linux Qt 启动流程跟踪 * 声明: * 1. 源代码来源MY-I.MX6: * 2. 本文仅仅是对启动流程的解析,没有解释启动流程为什么是这样的问题. * * 2015-6-13 深圳 晴 南山平山村 曾剑锋 *********************************************************

Linux 的启动流程

那篇文章不涉及操作系统,只与主板的板载程序有关.今天,我想接着往下写,探讨操作系统接管硬件以后发生的事情,也就是操作系统的启动流程. 这个部分比较有意思.因为在BIOS阶段,计算机的行为基本上被写死了,程序员可以做的事情并不多:但是,一旦进入操作系统,程序员几乎可以定制所有方面.所以,这个部分与程序员的关系更密切. 我主要关心的是Linux操作系统,它是目前服务器端的主流操作系统.下面的内容针对的是Debian发行版,因为我对其他发行版不够熟悉. 第一步.加载内核 操作系统接管硬件以后,首先读入

bootchart工具:记录Linux的启动流程

因为网上的大部分中文描述bootchart工具的都是过时的了,故也就有这篇日志的产生. Bootchart 是一个分析Linux启动流程的方便工具,此工具得出的结果可以用来作为优化启动速度的参考,此工具在较新的发行版中直接安装包后,即会在下次系统启动时生成一个系统启动时的各个组件启动所花的时间的记录的图表,此图表位于:/var/log/bootchart目录下,默认格式为.png格式,以Mint Linux为例: 安装: sudo apt-get install bootchart 重启系统后,

Linux 的启动流程详解

第一阶段:BIOS启动引导阶段 在该过程中实现硬件的初始化以及查找启动介质 从MBR中装载启动引导管理器(GRUB)并运行该启动引导管理 第二阶段:GRUB启动引导阶段 装载stage1 装载stage1.5 装载stage2 读取/boot/grub.conf文件并显示启动菜单 装载所选的kernel和initrd文件到内存中 第三阶段:内核阶段 运行内核启动参数 解压initrd文件并挂载initd文件系统,装载必须的驱动 挂载根文件系统 第四阶段:Sys V init初始化阶段 启动/sb

Linux内核启动流程分析(一)【转】

转自:http://blog.chinaunix.net/uid-25909619-id-3380535.html 很久以前分析的,一直在电脑的一个角落,今天发现贴出来和大家分享下.由于是word直接粘过来的有点乱,敬请谅解! S3C2410 Linux 2.6.35.7启动分析(第一阶段) arm linux 内核生成过程  1. 依据arch/arm/kernel/vmlinux.lds 生成linux内核源码根目录下的vmlinux,这个vmlinux属于未压缩,带调试信息.符号表的最初的

各大计算机公司 笔试及面试 题目 - 阿里巴巴、深信服(Linux的启动流程 V3)

· 启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息.设备启动顺序信息.硬盘信息.内存信息.时钟信息.PnP特性等等.在此之后,计算机心里就有谱了,知道应该去读取哪个硬件设备了. 启动第二步--读取MBR 众所周知,硬盘上第0磁道第一个扇区被称为MBR,也就是Master Boot Record,即主引导记录,它的大小是512字节,别看地方不大,可里面却存放了预启动信

Linux内核启动流程分析(二)【转】

转自:http://blog.chinaunix.net/uid-25909619-id-3380544.html S3C2410 Linux 2.6.35.7启动分析(第二阶段) 接着上面的分析,第一阶段的代码跳转后,会进入第二阶段的代码. 第二阶段的代码是从\arch\arm\kernel\head.S开始的. 内核启动第二阶段主要完成的工作有,cpu ID检查,machine ID(也就是开发板ID)检查,创建初始化页表,设置C代码运行环境,跳转到内核第一个真正的C函数startkerne

Linux系统服务 4 启动流程+模块管理与loader

一 Linux的启动流程分析 1 目前各大Linux发行版本的主流引导装载程序使用的软件为grub 2 简单来说,系统启动的过程如下: 1. 加载BIOS的硬件信息与自我测试,并依据设置取得第一个可启动的设备 2. 读取并执行第一个启动设备内的MBR的boot Loader也就是一般的grub 3. 依据boot Loader的设置加载Kernel,Kernel会开始检测硬件与加载驱动程序 4. 在硬件驱动成功后,Kernel会主动调用init进程,而init会取得run-level信息 5.