这个关于 Ubuntu 启动的简化流程图正确吗?

这个关于 Ubuntu 启动的简化流程图正确吗?

我正在尝试了解 Ubuntu 启动正在运行或启动的内容的方式。您能否确认我的简化流程图是否正确?

在此处输入图片描述

  1. 首先,我们启动一台装有 Linux 发行版的计算机,例如:Ubuntu,点击“打开”
  2. BIOS 从 ROM 启动。它初始化硬件。
  3. MBR 已执行。
  4. 引导加载程序加载操作系统内核。
  5. 操作系统内核加载桌面用户界面。

我有点迷茫了……

答案1

以下是典型 Linux 启动过程的 6 个高级阶段。

Linux 启动过程

1. BIOS

  • BIOS 代表基本输入/输出系统
  • 执行一些系统完整性检查
  • 搜索、加载并执行引导加载程序。
  • 它会在软盘、CD-ROM 或硬盘中查找引导加载程序。您可以在 BIOS 启动过程中按下某个键(通常是 F12 或 F2,但这取决于您的系统)来更改引导顺序。
  • 一旦检测到引导加载程序并将其加载到内存中,BIOS 就会将控制权交给它。

因此,简单来说,BIOS 会加载并执行 MBR 引导加载程序。

2. MBR

  • MBR 代表主引导记录。
  • 它位于可启动磁盘的第 1 个扇区。通常 /dev/hda,或/dev/sda
  • MBR 的大小小于 512 字节。它包含三个部分:1) 前 446 字节中的主引导加载程序信息 2) 接下来 64 字节中的分区表信息 3) 最后 2 字节中的 mbr 验证检查。
  • 它包含有关 GRUB(或旧系统中的 LILO)的信息。因此,简单来说,MBR 加载并执行 GRUB 引导加载程序。

3. GRUB

  • GRUB 是 Grand Unified Bootloader 的缩写。

  • 如果您的系统上安装了多个内核映像,您可以选择执行哪一个。

  • GRUB 显示启动画面,等待几秒钟,如果您不输入任何内容,它将加载 grub 配置文件中指定的默认内核映像。

  • GRUB 了解文件系统(较旧的 Linux 加载器 LILO 不了解文件系统)。

Grub 配置文件是

/boot/grub/grub.conf/etc/grub.conf是此链接)。以下是grub.confCentOS 的示例。

#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-194.el5PAE)
          root (hd0,0)
          kernel /boot/vmlinuz-2.6.18-194.el5PAE ro root=LABEL=/
          initrd /boot/initrd-2.6.18-194.el5PAE.img

从上面的信息中可以看出,它包含内核和 initrd 映像。因此,简单来说,GRUB 只是加载并执行内核和 initrd 映像。

4. 内核

  • 按照 grub.conf 中的“root=”指定的方式挂载根文件系统内核执行/sbin/init程序

    由于 init 是 Linux 内核执行的第一个程序,所以它的进程 ID (PID) 为 1。执行 aps -ef | grep init并检查 pid。initrd 代表初始 RAM 磁盘。

  • initrd被内核用作临时根文件系统,直到内核启动并挂载真正的根文件系统。它还包含在内部编译的必要驱动程序,可帮助内核访问硬盘分区和其他硬件。

5. 初始化

  • 查看/etc/inittab文件来决定 Linux 运行级别。

  • 以下是可用的运行级别

  • 单用户模式
  • 多用户,无 NFS
  • 完全多用户模式
  • 没用过
  • X11
  • 重启

    Init 识别默认的 initlevel/etc/inittab并使用它来加载所有适当的程序。

  • /etc/inittab在系统上执行“grep initdefault”来识别默认运行级别

    如果您想惹麻烦,可以将默认运行级别设置为 0 或 6。既然您知道 0 和 6 的含义,那么您可能不会这样做。通常,您会将默认运行级别设置为 3 或 5。

6. 运行级别程序

  • 当 Linux 系统启动时,您可能会看到各种服务启动。例如,它可能会显示starting sendmail …. OK。这些是运行级别程序,从您的运行级别定义的运行级别目录执行。

  • 根据您的默认初始化级别设置,系统将从以下目录之一执行程序。

    • 运行级别 0 –/etc/rc.d/rc0.d/
    • 运行级别 1 –/etc/rc.d/rc1.d/
    • 运行级别 2 –/etc/rc.d/rc2.d/
    • 运行级别 3 –/etc/rc.d/rc3.d/
    • 运行级别 4 –/etc/rc.d/rc4.d/
    • 运行级别 5 –/etc/rc.d/rc5.d/
    • 运行级别 6 –/etc/rc.d/rc6.d/
  • 请注意,这些目录下还有符号链接可供/etc直接使用。因此,/etc/rc0.d链接到 /etc/rc.d/rc0.d

  • 在这些/etc/rc.d/rc*.d/目录下,您会看到以 S 和 K 开头的程序。

  • 以 S 开头的程序在启动时使用。S 代表启动。

  • 以 K 开头的程序在关机时使用。K 代表终止。

  • 程序名称中 S 和 K 旁边有数字。这些是程序应启动或终止的序列号。

  • 例如,S12syslog 表示启动 syslog 守护进程,其序列号为 12。S80sendmail 表示启动 sendmail 守护进程,其序列号为 80。因此,syslog 程序会在 sendmail 之前启动。

更新:

许多现代 Linux 发行版取代了在里面systemd暴发户

系统化

systemd 是一些 Linux 发行版用来引导用户空间并随后管理所有进程的 init 系统,而不是 UNIX System V 或 Berkeley Software Distribution (BSD) init 系统。systemd 这个名称遵循了 Unix 命名守护进程的惯例,即在守护进程后面附加字母 d。它根据 GNU 宽通用公共许可证 (LGPL) 2.1 版或更高版本的条款作为免费开源软件发布。systemd 的主要目标之一是统一所有发行版中的基本 Linux 配置和服务行为。

截至 2015 年,许多 Linux 发行版已采用 systemd 作为其默认的 init 系统。systemd 的日益普及引起了争议,批评者认为该软件变得越来越复杂,违背了 Unix 哲学,而且由于其他各种软件(其中最著名的是 GNOME 3 桌面环境)对其的依赖,发行版被迫采用它。

暴发户

Upstart 是基于事件的传统 init 守护进程的替代品,后者是一些类 Unix 计算机操作系统在计算机启动时执行任务的方法。它是由 Canonical Ltd. 前雇员 Scott James Remnant 编写的。

传统的 init 进程最初只负责在开机后使计算机进入正常运行状态,或在关机前正常关闭服务。因此,该设计是严格同步的,会阻止将来的任务,直到当前任务完成为止。其任务也必须提前定义,因为它们仅限于此准备或清理功能。这使得它无法优雅地处理现代台式计算机上的各种非启动任务,包括:

  • 机器运行时添加或删除 USB 闪存驱动器和其他便携式存储/网络设备
  • 发现并扫描新的存储设备,无需锁定系统,尤其是当磁盘在扫描之前甚至无法通电时
  • 加载设备固件,这可能需要
    在检测到设备之后但在设备可用之前进行

Upstart 的事件驱动模型允许它在事件生成时异步响应事件。

希望对您有所帮助。有关更多详细信息,请访问极客们转自:golinuxhub

相关内容