所以我想从头开始为我的个人 Linux 制作一个可启动 USB。但我找不到任何有关如何执行此操作的指南。那么哪些文件是绝对必需的,哪些部分是可选的,我不知道该怎么做。
答案1
如果您的目标是可启动 USB,那么第一个可选的事情就是将其称为国际标准化组织首先。
通常,带有后缀的磁盘映像文件.iso
表示该映像文件使用 ISO-9660(或可能是 UDF)文件系统,并且旨在刻录到光学介质(CD、DVD 或蓝光)上。
使用任何其他格式的磁盘映像在技术上应该被称为其他名称;.bin
、.img
或.dmg
是它们的常见后缀。
从 USB 启动时,USB 磁盘本质上与硬盘相同,因此要使 USB 介质可启动,您应该执行与硬盘启动完全相同的操作。
第一件必要的事情是满足预期系统固件的启动要求,以便您的 USB 介质能够被识别为可启动。
在传统 BIOS 系统上,这意味着第一个 512 字节块(= 块 #0)的最后两个字节应为 0x55 0xAA,将其标识为有效的主引导记录(简称 MBR)。另外 64 个字节通常由 MBR 分区表占用(但自定义引导加载程序可能会忽略该要求)。剩余的 446 字节将包含将由固件加载和执行的 16 位 x86 机器代码程序。当我们谈论启动 Linux 时,这 446 字节将是一个文件的第一部分。引导装载程序。
446 字节的机器代码仅够加载引导加载程序的其他部分,因此任何现代引导加载程序将占用的不仅仅是 MBR 中的 446 字节。在为 BIOS 式引导准备的 USB 介质上,您可以使用i386-pc
GRUB、SYSLINUX、旧 LILO 版本或您认为适合您用途的任何其他引导加载程序。之后的一切都取决于您选择使用哪个引导加载程序。
在以 UEFI 方式启动的现代 64 位 x86 系统上,从可移动媒体启动的要求是:
- 它应该包含一个具有 FAT32 文件系统的分区
- 在该文件系统中,应该有一个位于 path 的引导加载程序文件
\EFI\BOOT\BOOTX64.EFI
,使用 Microsoft PE+ 二进制格式。对于其他硬件架构,文件名会有所不同。 - 如果启用了安全引导,则引导加载程序文件必须使用固件识别为有效的安全引导证书进行签名,或者引导加载程序文件的 SHA256 哈希值必须在固件中显式列入白名单。 (还有某些其他要求和限制,我建议您首先让 USB 在禁用安全启动的情况下工作,然后再尝试使其符合安全启动要求。)
最简单的是,UEFI 引导加载程序就是:单个*.efi
文件。它可能需要自己的配置文件,或者配置可能嵌入到引导加载程序二进制文件中。
一旦您可以运行引导加载程序,引导 Linux 的下一步就是指定一个内核文件并且通常initramfs 文件。如果你能保证你的 Linux 根文件系统可以被内核中内置的文件系统驱动程序访问,那么从技术上讲,你可以省略 initramfs 文件……但通常使用 initramfs 文件会让处理不同的系统配置变得更加容易,这很好如果您希望将 USB 从一个系统移动到另一个系统,这一点很重要。
如果您的目标只是运行一个特定的 Linux 实用程序,您可以将其(以及它可能需要的任何数据文件)打包到 initramfs 文件中,然后配置 initramfs 引导进程以直接从 initramfs 运行它,而无需实际安装任何其他实用程序文件系统。一些实用程序,例如磁盘擦除工具 DBAN 和旧版本的磁盘工具 GParted Live 和 Clonezilla Live 基本上都是这样(如果我没记错的话,现代版本可能会加载额外的 squashfs 映像)。一些硬件厂商甚至发布了以这种方式打包的基于Linux的固件升级工具。
在引导加载程序成功加载内核文件和 initramfs 文件(如果使用)后,它将把控制权转移给 Linux 内核,然后引导加载程序的工作就会完成。从那时起,一切都由 Linux 内核和 initramfs 文件的内容控制。