从BIOS到GRUB:解析Linux系统的引导过程 (linux系统引导过程)

Linux系统是一种开放源代码的操作系统,具有安全、稳定、高效等优点,适用于服务器、嵌入式系统、移动设备等多种场景。在Linux系统启动的过程中,引导过程显得尤为关键。从BIOS到GRUB,本文将解析Linux系统的引导过程,并阐述其中的具体细节。

一、BIOS

BIOS是计算机系统的固化程序,它主要负责计算机系统的启动和自检。当计算机电源打开时,BIOS首先进行自检,检测计算机的硬件是否正常,同时还会读取CMOS中的数据,包括系统日期/时间、I/O设置、初次启动标志等信息。若自检无误,BIOS会将控制权转交给启动介质。BIOS支持的启动介质有硬盘、软盘、光盘、USB等,其中硬盘是最常用的启动介质。

二、MBR

当BIOS将控制权转交给硬盘时,会读取硬盘的之一个扇区(0号柱面0号磁头第1个扇区),当作启动扇区。这个扇区通常被称为主引导记录(Master Boot Record,MBR)。MBR的结构包含引导程序和分区表。引导程序是一个小程序,通常占用446个字节。它的作用是寻找操作系统的引导程序,并将控制权交给引导程序。分区表则记录了硬盘的分区信息,其中每个分区的信息占用16字节。

三、引导程序

引导程序是操作系统的引导程序,它通常被放置在硬盘的之一个可引导分区(一般为C://)的起始扇区。在Linux系统中,引导程序通常为GRUB或LILO。接下来我们介绍GRUB的引导过程。

四、GRUB

GRUB(GRand Unified Bootloader)是一款功能强大的引导程序,它支持多种操作系统的启动,甚至可以在同一系统中引导多个不同内核的操作系统。GRUB的引导过程主要经过三个阶段:之一阶段、第二阶段和操作系统加载。

1.之一阶段

当BIOS将控制权交给MBR时,MBR中的引导程序会读取并加载之一阶段GRUB的core.img文件。core.img文件中包含的代码会根据系统内存情况加载第二阶段的代码。

2.第二阶段

第二阶段的代码位于/boot/grub目录下的stage2文件。这里面包含了一个文件系统驱动程序,以及一些基本的GRUB命令。此外,还有一张映像表,用于记录操作系统所在分区的位置及大小。在第二阶段,用户可以使用GRUB菜单选择要启动的操作系统。

3.操作系统加载

用户选择要启动的操作系统后,GRUB会将内核镜像加载到内存中,并将控制权交给内核。内核开始运行,并根据/boot/grub/grub.cfg文件或/boot/grub/menu.lst文件来加载系统所需的模块和驱动程序。这些模块通常包括文件系统、网络、声卡、显卡等。一旦内核和驱动程序加载完成,系统就开始运行了。

本文从BIOS到GRUB,介绍了Linux系统的引导过程。每个环节都非常重要,其中引导程序更是关键所在,它决定了系统的启动能否成功。对于想要深入了解Linux系统的人来说,掌握引导过程的细节是必不可少的。

相关问题拓展阅读:

Linux与Windows 10用grub引导教程

去年暑假的时候,写了一篇如何装 Linux 和 Windows 10 双系统的文章发在了上,我写这篇文章的原因是当初装双系统确实是折腾了许久,网上也找不到一篇详尽的教程。由于去年对于写教程还不是熟练,而这一年多的使用过程也遇到了一些问题,所以就准备「Refactoring」这篇文章。

在教程正式开始之前,先花一点时间说明 EFI 分区的组成和作用。

首先,在你装了 Windows 之后,Windows 在装机过程中会将硬盘划分出一个约 100m 大小的分区,称为 EFI 分区这个分区就是起引导作用的。在资源管理器中是看不到的这个分伍纯盯区的,可以在磁盘管理中看到,管理则需要借助 DG 工具 。便于说明,在装好了 Linux 之后,我将 EFI 挂载至 boot 分区截图:

可以看到,该分区包含 3 个文件夹(如果你没有装 Linux 的话,就只有两个),分别是 Boot、Microsoft 和 Manjaro,其中 Boot 文件夹就是 UEFI 引导所必需的文件。

我们继续打开 Microsoft/Boot 文件夹:

这些文件就是启动 Windows 10 所必需的,包含了语言包、字体等,BCD 包含了 Windows 引导开始以后的信息。其中,

bootm.efi 是 Windows 默认引导文件

以上是采用 UEFI 启动 Windows 10 的文件结构,也就是说,当你按下开机按钮的时候,首先 UEFI 找到 EFI 分区的 Boot 文件夹,然后加载 bootx64.efi 文件,读取文件信息,找到 EFI/Microsoft/Boot/bootm.efi ,按照 bootm.efi 的要求,加载所需的启动信息,启动 Windows 10。

在正式装系统之前,我们还需要做一些准备工作:

这个功能的作用是在于关机的时候不完全断电,类似将系统处于「休眠」状态,这样可以让开机更加迅速。但这也就导致了只能使用 Windows 系统。

在默认情况下,UEFI 固件只会加载那些被签名的引导程序。在缺少 Secure Boot 功能的传统 PC 机上,恶意的后门程序可以加载自身,进而摇身一变伪装成一个引导程序。这样的话,BIOS 就会在启动的时候加载后门程序,这样它就可以躲过操作系统,把自己隐藏得很深。

但是不得不说,这对我们安装 Linux 造成了很大的困扰,也是直接导致我们重启到 Windows 10 后进不去 Linux 的原因。

首先我们要关闭这个功能:进入 BIOS 找到 Secure Boot,选择腔和 disabled,这样就关闭了。当然,有些人进入 BIOS 会发现 Secure Boot 这个选项是灰色的(比如我的就是),这时你需要先给你的 BIOS 设一个密码,然后就能关 Secure Boot 了。

所有的准备都已经完成,这时就可以准备刻录 U 盘了,不推荐 UltraISO,经亲测,软碟通仅刻录 Ubuntu 能成功,其它绝大多数发行版都会失败。推荐「 Rufus 」和「 USBWriter 」,这两个软件都可以。

刻录完成后,重启按 f12 ,选择从 USB 设备启动,对于绝大多数发行版来说一路回车就行了,只需要注意一点:

在选择挂载 boot 位置的时候,一定要挂载在 efi 分区

,别的都不行。

重启之后,不出意外的话,你会直接进入 Windows 10,不要担心,这时 Linux 已经安装成功了,我们只需要将引导文件替换一下。

先用 DG 打开 EFI 分区,你会看到多了一个文件夹,名称取决于你安装的是哪一个发行版。我安装的是 Manjaro Linux,名称就是 Manjaro,打开之后会发现里面有一个名为 grubx64.efi 的文件,这就是启动 Linux 的引导文件裤扰。和 Windows 10 的 bootm.efi 类似,我们想要用 grubx64.efi 引导代替掉 bootm.efi,这样就可以用 GRUB 引导了。步骤:

至此,如果你安装的是除 Arch 之外绝大多数发行版,那么接下来就和你没有啥关系了,你已经成功了,好好享受吧!

开机之后会发现进入 GRUB 的引导了,通常会包含至少三个选项(以 Manjaro 举例):Manjaro、Manjaro 高级选项和 Windows Manager。这就代表你已经完美的解决了 Windows 和 Linux 双系统引导的问题。

这一点是我安装 Arch Llinux 的时候发现的,Arch Linux 安装过程是手动安装的,在编写 GRUB 的时候会扫描不到 Windows Manager 所在的分区(当然可能不是所有人都会遇到),所以在 GRUB 界面可能会看不到 Windows Manager 选项,导致进不去 Windows 10,这里就需要手动编辑 GRUB 信息,我们打开 /boot/grub/grub.cfg 文件,发现里面确实没有 Windows 10 的启动信息,在后面加上:

注意

这里的 $hints_string ,代表的是终端执行命令:

后的输出;

而 $fs_uuid 代表的是:

的输出。

然后保存。在终端执行命令: sudo grub-mkconfig -o /boot/grub/grub.cfg ,就 OK 了。

到此,Arch Linux 和 Windows 10 双系统也配置完毕了。

在使用这一年多的时间,遇到了以下的几个问题:

最后:祝使用愉快。

linux系统引导过程的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux系统引导过程,从BIOS到GRUB:解析Linux系统的引导过程,Linux与Windows 10用grub引导教程的信息别忘了在本站进行查找喔。


数据运维技术 » 从BIOS到GRUB:解析Linux系统的引导过程 (linux系统引导过程)