从无盘启动看 Linux 启动原理

本文详细介绍了如何通过无盘启动方式运行Volumio系统,探讨了Linux启动原理,从BIOS和UEFI、PXE网络启动、MBR与GPT分区、引导加载程序到内核加载和init进程。作者在实践过程中解决了32位与64位兼容性、关机问题以及AirPlay服务配置等难题,提供了深入的Linux启动知识。
摘要由CSDN通过智能技术生成

作者:bobyzhang,腾讯 IEG 运营开发工程师

0. 故事的开始

0.1 为什么和做什么

最近家里买了对音响,我需要一个数字播放器。一凡研究后我看上了 volumio(https://volumio.org/) 这是一个基于 Debian 二次开发的 HIFI 播放器系统,可以运行下 x86 和树莓派上。

我打算让 volumio 运行在我 2009 年购买的老爷机笔记本上,也让它发挥一点余温热。正常操作是将 volumio 的系统镜像刷到 U 盘上,连接电脑后使用 U 盘启动系统即可。但是家里没有找到合适的 U 盘(穷~~),加上前段时间听了同事关于 linux 内核的分享,感慨自己对系统的理解不够。因此我决定使用无盘启动 volumio 顺便研究一下 linux 启动原理。

目标:无盘启动 volumio 系统

0.2 方案

正常 Linux 启动流程大体如下:

  1. BIOS 启动,完成自检,选择启动硬件

  2. 如果是磁盘系统读取 MBR

  3. 从 MBR 指示,找到 GRUB 所在分区,加载 GRUB 显示菜单

  4. 加载 Linux 内核到内存中

  5. 执行 INIT 程序

  6. 进入用户界面

由于我需要从网络启动,过程会变得复杂一些,主要变化如下

  • 在 MBR 引导前,需要执行一系列的 PXE 流程,目的是挂载 iscsi 磁盘。

  • 在加载 linux 内核后,由于之前 iPXE 固件已经退出,还需要再次挂载 iscsi 磁盘。

0.3 准备工作

无盘启动并不是说完全没有磁盘,只是客户端本身没有磁盘,我们需要在远端给机器提供一种文件存储和磁盘共享的方案。我这里选择的是 iscsi 共享,相比于 NFS 和 samba 共享,它更底层,对系统的兼容性更好。

iSCSI 利用了 TCP/IP 作为沟通的渠道。透过两部计算机之间利用 iSCSI 的协议来交换 SCSI 命令,让计算机可以透过高速的局域网集线来把 SAN 模拟成为本地的储存设备。

关于 iscsi 的配置不是本文重点,这里就不详细描述了,要完成 iscsi 磁盘的挂载需要接信息。

iscsi 服务器地址:我这里是 nas 服务的地址 192.168.3.5

target 名称:这个是服务端用来区分目标的,通常一个 target 服务一个客户端,并关联一块共享存储,例如:iqn.2005-10.org.freenas.ctl:yong-pc.volumio

initiator 名称:这个是客户端名称,用来告诉服务端谁来请求了。

1 BIOS 和 UEFI

准备工作做完,我们先来了解一下计算机的启动原理,这里就要说到 BIOS 和 UEFI,他们是计算机按下电源后最先被执行的程序。

1.1 BIOS (Basic Input/Output System)

上个世纪 70 年代初,"只读内存"(read-only memory,缩写为 ROM)发明,开机程序被刷入 ROM 芯片,计算机通电后,第一件事就是读取它。这块芯片里的程序叫做"基本输入输出系统"(Basic Input/Output System),简称为 BIOS。

BIOS 程序首先检查,计算机硬件能否满足运行的基本条件,这叫做"硬件自检"(Power-On Self-Test),缩写为 POST。硬件自检完成后,BIOS 把控制权转交给下一阶段的启动程序。

这时,BIOS 需要知道,"下一阶段的启动程序"具体存放在哪一个设备。也就是说,BIOS 需要有一个外部储存设备的排序,排在前面的设备就是优先转交控制权的设备。这种排序叫做"启动顺序"(Boot Sequence)。

1.2 UEFI (Unified Extensible Firmware Interface)

不知道大家是否发现,这些年已经很难看到 BIOS 的身影了。

ROM 的存储能力有限,BIOS 能驱动的硬件类型和数量大大受限。导致大量新硬件无法在 PC 启动时被加载。最明显就是你无法在 BIOS 时使用鼠标。此外 BIOS 的代码历史悠久难以维护。

在 2005 年年中时候,包括 BIOS 供应商、OS 供应商、系统制造商以及芯片生产公司在内的行业参与者统一建立了统一的 EFI 联盟(UEFI,Unified Extensible Firmware Interface)并在 2006 年一月发行了 UEFI 规范 2.0。

从此你可以愉快的在 PC 启动初期使用鼠标,甚至像苹果一样加载网络,实现联网下载并安装操作系统。

UEFI 的启动流程和 BIOS 的启动流程不同,由于我 2009 年购买的老爷机还是 BIOS 结构,这里不详细展开,简单提一下。

  • 系统开机 - 上电自检(Power On Self Test 或 POST)。

  • UEFI 固件被加载,并由它初始化启动要用的硬件。

  • 固件读取其引导管理器以确定从何处(比如,从哪个硬盘及分区)加载哪个 UEFI 应用。

  • 固件按照引导管理器中的启动项目,加载 UEFI 应用。

  • 已启动的 UEFI 应用还可以启动其他应用(对应于 UEFI shell 或 rEFInd 之类的引导管理器的情况)或者启动内核及 initramfs(对应于 GRUB 之类引导器的情况),这取决于 UEFI 应用的配置

2. PXE

回到我的 BIOS 老爷机,上电自检完成后 BIOS 按照设置的启动顺序应该交棒磁盘,但是 但是 但是 这个机器没有硬盘,也没有插入 U 盘,找不到任何启动设备的 BIOS 将控制权交给了网卡,BIOS 光荣退场进入了 PXE 阶段。

预启动执行环境(Preboot eXecution Environment&#x

  • 15
    点赞
  • 90
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值