Linux启动过程的逐步解释
当我们点击系统的电源按钮时,有几个进程在后台执行。了解启动过程对学习操作系统的工作是非常重要的。了解Linux内核如何启动以解决启动错误是必须的。这是一个非常令人好奇的话题,所以让我们从基础知识开始。
一个清晰的启动读取方法讨论如下。
Linux启动过程的阶段
- 机器的启动微码或BIOS成百上千,并执行一个启动加载器。
- 引导加载器在磁盘上捕获内核图像,并将其运到内存中,开始计算机。
- 内核启动设备和驱动程序。
- 内核挂载公共文件系统。
- 内核开始一个名为init的程序,其方法ID为零。
- 初始化配置系统进程的其余部分。
- Init开始一个方法,允许我们出于某种目的登录,通常是在启动顺序的最后或最前面。
启动信息
经典的UNIX操作系统在启动时制造了许多诊断信息,告诉我们启动方法的情况。最初,这些消息是从init开始的内核和进程中恢复的。虽然,这些消息并不一致,也不漂亮,甚至在某些情况下,它们的信息量也大得可怕。硬件的增强也导致了内核开始的速度比以前快了很多,信息闪过的速度也相应的快了很多;可能很难看清正在发生什么。几乎所有当前的Linux发行版都在用不同的过滤器和闪屏品种来分散我们的注意力,而系统开始的结果是覆盖启动医疗专业。
内核启动和初始化选项
- CPU检查
- 设备总线发现
- 内存检查
- 设备发现
- 根文件系统挂载
- 辅助内核系统启动
- 用户空间开始
CPU检查和内存检查并不那么特殊。虽然,当内核启动设备时,依赖性的问题就来了。例如,磁盘设备驱动程序可能依赖于SCSI系统和总线支持。我们不需要担心一般的依赖关系,除了一些重要的部分是可加载的内核模块而不是几乎所有内核的一部分。
内核参数
Linux内核在启动时接收一组基于文本的内核参数,其中有一些进一步的系统细节。这些参数描述了几种可供选择的行为类型,比如内核对设备驱动程序特定和制造商选择的诊断结果。Ro参数指导内核在用户区启动时以只读模式挂载普通文件系统。这种普通的只读模式保证fsck在试图做任何严重的事情之前可以安全地检查基础文件系统。在检查过程中,启动技术以读写模式重新挂载基础文件系统。
开机加载的任务
- 从多个内核中选择。
- 在内核参数组之间转换。
- 支持启动不同的操作系统。
重要的是,自Linux内核起源以来,引导程序变得更加先进,有了菜单系统和命令行历史等选项。虽然,一个共同的愿望是在参数选择和内核图像中永远保持灵活性。一个了不起的发展是,一些需求已经减少了。
例如, 由于我们可以从USB设备上执行恢复性启动或紧急关联,我们很少需要担心手动进入内核参数或进入单用户模式。现代引导器提供了比以往更多的动力,如果我们正在创建自定义内核或想要调整参数,这可能会很方便。
开机加载器的概述
- GRUB: 它是Linux系统下正常的近乎通用的,还有UEFI和BIOS/MBR版本。
- SYSLINUX: SYSLINUX可以被管理为从几个可供选择的文件系统样式中执行。
- LILO: 它是主要的Linux引导程序之一。ELILO可以是一个UEFI版本。
- LOADLIN: 它通过DOS启动内核。
- System-boot: 它是UEFI的一个直接的引导管理器。
- coreboot: 它是系统BIOS的一个很好的替代品,它将演示内核。
- EFI Linux: 它是一个UEFI引导加载器,被指定作为一个模型工作,并倾向于UEFI的不同引导加载器。
- Linux内核EFISTUB: 它是一个内核插件,用于直接从相关的UEFI/EDI系统分区加载内核。
GRUB工作和介绍
GRUB是 Grand Unified Boot Loader 的首字母缩写 。 GRUB最重要的功能之一是文件系统导航,可以直接选择配置和内核图像。
- GRUB的代码有数百个。
- BIOS在搜索到启动代码后,就会运行它。通常,GRUB在哪里启动,它就在哪里。
- 该代码初始化。目前,GRUB会在现在访问文件系统和磁盘。
- GRUB识别其启动分区和那里的几个配置。
- GRUB为用户提供了区分配置的机会。
- GRUB在用户操作或超时后运行配置。
- 在配置执行的过程中,GRUB可能会在启动分区中加载进一步的代码。另外,还预装了几个模块。
- 为了运行和加载内核,GRUB运行启动命令。
Linux启动过程的详细步骤
操作系统是低级别的软件,它处理资源,给其他软件提供基本的服务,并控制外围设备。我们将详细解释每个启动过程。
- BIOS
BIOS是Basic Input/Output System的首字母缩写。换句话说,BIOS可以加载和运行MBR(主引导记录)引导加载器。当我们第一次打开系统时,BIOS首先对SSD或HDD实现一些完整性检查。
之后,BIOS找到、加载并运行启动加载器功能,这可以从MBR中检测到。有时,MBR在CD-ROM或U盘上,比如现场安装的Linux。然后,将 Boot Loader 功能加载到内存中,一旦检测到它,BIOS 就向它提供系统控制。 - MBR
MBR是Master Boot Record的缩写,负责加载和运行GRUB启动加载器。MBR被放置在第一个可启动的磁盘扇区,通常是/dev/sda,这取决于我们的硬件。另外,MBR包括GRUB的细节,或者LILO是一个较老的系统。 - GRUB
GRUB有时被称为 GNU GRUB ,它代表 GNU GRand Unified Bootloader。 它是几乎所有最新Linux系统的经典引导程序。GRUB的闪屏通常是我们启动系统时最初看到的东西。它包含一个普通的菜单,我们可以选择一些部分。
如果我们有多个已安装的内核镜像,我们可以用键盘来选择我们希望系统启动的部分。默认情况下,我们会选择最新的内核镜像。闪屏会延迟几秒钟让我们选择选项。如果我们不选择,它就会加载内核镜像(默认)。在一些系统中,我们可以在 /etc/grub/conf 或 /boot/grub/grub.conf 看到GRUB的配置文件 。 - 内核
通常,内核被称为一个操作系统的代码。它包含了对我们系统中一切的完全控制。在这个启动过程阶段,内核挂载了在文件中设置的基础文件系统,即 grub.conf。 然后,它运行/sbin/init函数,它总是要运行的初始函数。我们可以通过它的PID(进程ID)来确认它,它应该总是1。然后,内核在initrd(Initial RAM Disk)的帮助下创建一个临时的基础文件系统,直到实际的文件系统被挂载。 - Init
在这个阶段,我们的系统运行运行级程序。它将找到一个init文件,一般在/etc/inittab检测,以确定Linux的运行级别。现代Linux系统利用systemd来选择运行级别,而。然后,systemd就会开始运行运行级别的程序。
在Linux操作系统中,有六个运行标签。- 0- 停机
- 1- 单用户模式
- 2- 多用户,不含NFS
- 3- 完全多用户模式
- 4- 未使用
- 5- X11
- 6- 重启
我们可以通过运行以下命令检查我们系统的配置默认运行级别。
$ grep initdefault /etc/inittab
- 运行级别程序
我们可以看到不同的服务被启动,这取决于我们所安装的Linux版本。它们被称为运行级别程序,根据我们的运行级别,从不同的目录中运行。上面提到的六个运行级别都包含其目录。- 运行级别0-/etc/rc0.d/
- 运行级别1-/etc/rc1.d/
- 运行级别2-/etc/rc2.d/
- 运行第3级/etc/rc3.d/
- 运行第4级/etc/rc4.d/
- 运行第5级/etc/rc5.d/
- 运行第6级 /etc/rc6.d/
重要提示: 这些目录的确切位置在不同的发行版中是不同的。
如果我们在不同的运行级别目录中寻找,我们会发现以 “ K “ 或 “ S “ 开头的程序,它们分别代表杀戮和启动。这些启动程序在系统启动时运行,在关机时杀死几个程序。