CentOS系统启动过程

CentOS系统启动流程图

(1) 加载 BIOS

        计算机电源加电质检,首先加载基本输入输出系统(Basic Input Output System,BIOS),BIOS 中包含硬件 CPU、内存、硬盘等相关信息,包含设备启动顺序信息、硬盘信息、内存信息、时钟信息、即插即用(Plug-and-Play,PNP)特性等。加载完 BIOS信息,计算机将根据顺序进行启动。

(2) 读取 MBR

        读取完 BIOS 信息,计算机将会查找 BIOS 所指定的硬盘 MBR 引导扇区,将其内容复制到 0x7c00 地址所在的物理内存中。被复制到物理内存的内容是 Boot Loader,然后进行引导。

(3) GRUB 引导

        GRUB 启动引导器是计算机启动过程中运行的第一个软件程序,当计算机读取内存中的 GRUB 配置信息后,会根据其配置信息来启动硬盘中不同的操作系统。

(4) 加载 Kernel

        计算机读取内存映像,并进行解压缩操作,屏幕一般会输出“Uncompressing Linux”的提示,当解压缩内核完成后,屏幕输出“OK, booting the kernel”。系统将解压后的内核放置在内存之中,并调用 start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完成 Linux 核心环境的建立。

(5) 读取 Inittab 运行等级

        内核加载完毕,会启动 Linux 操作系统第一个守护进程 init,然后通过该进程读/etc/inittab 文件,/etc/inittab 文件的作用是设定 Linux 的运行等级。

        init是Linux系统操作中不可缺少的程序之一。所谓的init进程,它是一个由内核启动的用户级进程。内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。所以,init始终是第一个进程(其进程编号始终为1)。

        内核会在过去曾使用过init的几个地方查找它,它的正确位置(对Linux系统来说)是/sbin/init。如果内核找不到init,它就会试着运行/bin/sh,如果运行失败,系统的启动也会失败。

        init一共分为7个级别,这7个级别的所代表的含义如下

    • 0:停机或者关机(千万不能将initdefault设置为0)
    • 1:单用户模式,只root用户进行维护
    • 2:多用户模式,不能使用NFS(Net File System)
    • 3:完全多用户模式(标准的运行级别)
    • 4:系统未使用,保留一般不用
    • 5:图形化(即图形界面)
    • 6:重启(千万不要把initdefault设置为6)

        To view current default target, run:systemctl get-default

        To set a default target, run:systemctl set-default TARGET.target

        runlevel:查看启动级别

(6) 加载 rc.sysinit

        读取完运行级别,Linux 系统执行的第一个用户层文件/etc/rc.d/rc.sysinit,该文件功能包括:设定 PATH 运行变量、设定网络配置、启动 swap 分区、设定/proc、系统函数、配置Selinux 等。

(7) 加载内核模块

        读取/etc/modules.conf 文件及/etc/modules.d 目录下的文件来加载系统内核模块。该模块文件,可以后期添加或者修改及删除。

(8) 启动运行级别程序

        根据之前读取的运行级别,操作系统会运行 rc0.d 到 rc6.d 中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务。其中以 S 开头表示系统即将启动的程序,如果以 K 开头,则代表停止该服务。S 和 K 后紧跟的数字为启动顺序编号。如图所示:

 

                                                运行级别服务

(9) 读取 rc.local 文件

        操作系统启动完相应服务之后,会读取执行/etc/rc.d/rc.local 文件,可以将需要开机启动的任务加入到该文件末尾,系统会逐行去执行并启动相应命令,如图所示:

 

                                        开机运行服务

(10) 执行/bin/login 程序

        执行/bin/login 程序,启动到系统登录界面,操作系统等待用户输入用户名和密码,即可登录到 Shell 终端,至此Linux操作系统完整流程启动完毕。

 

<think>好的,我现在需要详细解答用户关于CentOS系统启动流程的问题。首先,用户引用了五篇相关文章,我需要结合这些引用内容来构建回答。让我先仔细阅读这些引用内容,理解每个阶段的关键点。 引用[1]提到CentOS的启动流程包括BIOS/UEFI启动,并提到了初始化系统和准备用户环境。引用[2]则指出CentOS 5、6、7使用不同的init系统,尤其是CentOS 6和7有差异,但用户主要想了解CentOS 5/6的流程。不过引用[4]提到了CentOS 7中的initramfs的作用,可能需要在回答中区分不同版本。但用户的问题没有明确版本,可能需要涵盖主要版本,或者根据引用内容侧重CentOS 5/6,同时提及7的变化。 接下来,引用[3]涉及grub.cfg配置文件,说明GRUB配置的重要性。引用[4]详细描述了initramfs在挂载根文件系统前的作用,比如加载驱动和模块。引用[5]则解释了内核的概念,强调内核与操作系统的区别。 现在,我需要将启动流程分步骤解释,确保每个步骤对应引用的内容,并正确标注引用标记。例如,BIOS/UEFI阶段来自引用[1],内核加载和initramfs来自引用[4],grub配置对应引用[3],init系统不同版本在引用[2]中说明。 需要注意的是,用户的问题是关于CentOS系统启动过程的详解,可能需要按顺序描述各个阶段:BIOS/UEFI自检、加载MBR、GRUB引导、内核加载、initramfs初始化、挂载根文件系统、运行init/systemd进程,最后到用户登录。每个步骤需要结合引用内容,确保准确性。 此外,用户要求生成相关问题,我需要根据回答内容提出相关的问题,比如不同版本的init差异、GRUB的作用、initramfs的重要性等。 最后,要检查是否符合格式要求:行内公式用$...$,独立公式用$$...$$,但这个问题可能不需要数学公式,但需要确保中文回答,结构清晰,引用正确。例如,在提到initramfs时引用[4],提到CentOS版本差异时引用[2],grub配置引用[3]等。 现在,我需要组织这些信息,确保流程正确,步骤分明,并自然添加引用标记。可能的结构如下: 1. BIOS/UEFI阶段 2. MBR和GRUB引导 3. 内核加载与initramfs 4. 挂载根文件系统 5. 初始化进程(init或systemd) 6. 用户空间初始化和登录 每个部分结合引用内容详细说明,同时注意版本差异,特别是CentOS 5/6使用SysV init,而7使用systemd,但引用[2]主要讲5/6,所以可能需要侧重这些,但引用[4]提到CentOS 7的initramfs,所以需区分说明。 需要确保每个步骤的引用正确,例如在GRUB部分引用[3],initramfs引用[4],内核部分引用[5],系统启动流程整体引用[1]和[2]。 最后生成相关问题,比如不同init系统的区别、GRUB配置方法、initramfs的作用等,确保问题与回答内容相关。</think>### CentOS系统启动流程详解 CentOS系统的启动流程涉及多个阶段,不同版本(如CentOS 5/6与7)在初始化程序上存在差异。以下是基于引用内容的详细解析: --- #### 1. **BIOS/UEFI启动** 计算机通电后,首先执行**BIOS/UEFI固件**,完成硬件自检(POST)并检测可启动设备(如硬盘、U盘)。随后,BIOS/UEFI加载存储设备的主引导记录(**MBR**)或通过UEFI引导管理器定位引导加载程序[^1][^2]。 --- #### 2. **GRUB引导加载程序** MBR中的**GRUB(Grand Unified Bootloader)**被加载到内存,负责选择操作系统内核并传递控制权。 - **CentOS 6及更早版本**:使用GRUB Legacy,配置文件为`/boot/grub/grub.conf`。 - **CentOS 7及更新版本**:采用GRUB 2,配置文件为`/boot/grub2/grub.cfg`[^3]。 ```bash # 示例:CentOS 6的GRUB配置文件片段 title CentOS 6 root (hd0,0) kernel /vmlinuz-2.6.32-xxx ro root=/dev/sda2 initrd /initramfs-2.6.32-xxx.img ``` --- #### 3. **内核加载与initramfs初始化** 内核(如`vmlinuz-*`)被加载后,会解压并执行**initramfs(初始RAM文件系统)**,其作用包括: - 加载必要的硬件驱动(如磁盘控制器)。 - 挂载临时根文件系统,为后续挂载真实根文件系统做准备[^4]。 > **注**:在CentOS 7中,`dracut`工具生成initramfs,支持动态模块加载[^4]。 --- #### 4. **挂载根文件系统** 内核通过initramfs脚本挂载真实的根文件系统(如`/dev/sda2`),并切换至该文件系统。此时,内核释放initramfs占用的内存[^4]。 --- #### 5. **初始化进程启动** - **CentOS 5/6**:使用**SysV init**,通过`/etc/inittab`定义运行级别(如多用户模式为级别3),依次执行`/etc/rc.d/rc.sysinit`和`/etc/rc.d/rc`脚本。 - **CentOS 7+**:采用**systemd**作为初始化系统,通过`/usr/lib/systemd/system/`中的单元文件管理服务依赖关系。 ```bash # CentOS 6的运行级别配置示例(/etc/inittab) id:3:initdefault: ``` --- #### 6. **用户空间初始化与登录** - 启动基础服务(如网络、日志)。 - 执行`/etc/rc.local`中的自定义命令(仅限SysV init)。 - 最终启动登录管理器(如`gdm`或`tty`终端),等待用户登录[^1]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值