如何创建仅限 UEFI 的可启动 USB 实时媒体?

Liv*_*eBT 124 live-usb boot uefi

将 Ubuntu 安装到当前可用的 Windows 8 计算机上时,拥有可以双向启动的实时媒体可能是一个问题。

换句话说,创建仅限 UEFI 的可启动 USB 实时媒体的主要优势是:您知道它肯定是通过 UEFI 启动和安装的。

由于 Valve 已经在使用基于 Debian 的Steam 操作系统和 UNetbootin(Ubuntu 启动盘创建器的最高投票替代品)进行仅 UEFI 引导 USB 安装程序,它不兼容 UEFI,因此具有误导性,我认为我们应该有一个单独的主题创建仅限 UEFI 的可启动 USB 实时媒体。

Liv*_*eBT 148

概述

创建仅 UEFI 引导 USB 实时媒体非常简单。只需将文件复制到FAT32 格式的USB 驱动器即可。就是这样!

请记住,对于安装或启动媒体:

目录

  • 从 ISO 方法复制文件
    1. 通过终端示例
    2. 通过 GUI 的示例
    3. Windows 上的示例
  • ISO环回方法(高级)
    1. 创建二进制文件
    2. 创建配置文件
    3. 添加持久性
    4. 检查完整性
    5. UEFI 安全启动
  • 2020年回顾

1.从ISO方法复制文件

此方法也适用于包含 EFI 加载程序的其他安装媒体,例如 Windows。

1.1. 通过终端示例

如果604A-00EA您的 USB 驱动器已经p7zip安装,您可以执行以下操作:

$ 7z x ubuntu-12.04-desktop-amd64.iso -o/media/$USER/604A-00EA/
Run Code Online (Sandbox Code Playgroud)

如果此 USB 驱动器上只有一个分区,那么您就完成了,否则您需要将该分区标记为可引导,例如通过parted

# parted /dev/sdX set 1 boot on
Run Code Online (Sandbox Code Playgroud)

/dev/sdX您的 USB 驱动器和1应该用于启动的分区号在哪里。

1.2. 通过 GUI 的示例

  1. 挂载 .iso 文件并将内容复制到您的 USB 驱动器。在 Nautilus 中按Ctrl+ 也H可以显示和复制隐藏文件。

    选择 .iso 文件时,nautilus 在上下文菜单中显示磁盘映像安装程序

  2. 通过GParted添加引导标志。

    GParted 展示了如何管理分区标志

1.3. Windows 上的示例

  1. 和上面一样,只是复制文件。
  2. Windows/Super+ X,转到磁盘管理并检查分区是否标记为活动。在 Windows 8 之前的 Windows 版本上,按Windows/Super+R打开运行菜单并打开diskmgmt.msc,这将打开磁盘管理。

2. ISO环回方式(高级)

GRUB 和 GRUB2 已经能够通过回送设备直接从 ISO 映像引导,而不是从 ISO 映像中提取内容。鉴于 ISO 映像是 UEFI 可引导的,我们可以设置一个包含多个具有不同操作系统的 ISO 的 USB 驱动器,而不会在 USB 驱动器上造成混乱。

如果您也想启动 Windows,您可能需要查看SARDU。我记得在 2005 年左右将它与 Windows PE 一起使用,它似乎已更新为支持 USB 驱动器和 UEFI,但请记住,此工具还支持传统启动。

我们需要什么?

  • 非常基本的 GRUB 配置文件知识。
  • UEFI 引导和 GRUB 的基本知识,因为我们将生成包含大量模块的我们自己的 GRUB 引导加载程序映像。
  • 一个 UEFI 可引导 ISO 映像、一个 FAT 格式的 USB 驱动器和一台运行 Linux 的机器。
    • 不,我们不需要 Linux 的 UEFI 安装(这可能是鸡和蛋的情况),像 VirtualBox 中的传统 Linux VM 就可以了。

2.1. 创建二进制文件

在您的 Ubuntu 机器或 VM 上,确保安装了grub-efi-amd64-bin包(grub-efi-ia32-bin 也可用于较新版本的 32 位 Intel 架构)。该软件包在另一个发行版上可能具有不同的名称,您可以比较该软件包文件列表以在您的发行版上找到正确的软件包。

以下命令将生成 GRUB 映像,在这种情况下,每台具有 UEFI 固件的计算机都应该能够运行的 EFI 二进制文件:

grub-mkimage -o bootx64.efi -p /efi/boot -O x86_64-efi \
 fat iso9660 part_gpt part_msdos \
 normal boot linux configfile loopback chain \
 efifwsetup efi_gop efi_uga \
 ls search search_label search_fs_uuid search_fs_file \
 gfxterm gfxterm_background gfxterm_menu test all_video loadenv \
 exfat ext2 ntfs btrfs hfsplus udf
Run Code Online (Sandbox Code Playgroud)

每个标准UEFI 固件都应查找\EFI\BOOT\名为 的文件boot{arch}.efi,因此在 USB 驱动器上创建文件夹并将我们刚刚创建的映像复制到此位置。其他架构代替 x64 也是可能的,但让我们使用 x64/amd64 保持简单。

2.2. 创建配置文件

一个非常基本的grub.cfg配置文件示例,它应该放在同一个目录中,bootx64.efi如下所示:

set timeout=3
set color_highlight=black/light-magenta

menuentry 'Boot Ubuntu 14.04.2 LTS from ISO' {
        set isofile="/efi/boot/ubuntu-14.04.2-desktop-amd64.iso"
        loopback loop $isofile
        linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile noprompt noeject quiet splash persistent --
        initrd (loop)/casper/initrd.lz
}
submenu 'Useful snippets' {
    menuentry 'Ubuntu' {
            chainloader /efi/ubuntu/grubx64.efi
    }
    menuentry 'Windows' {
            chainloader /efi/Microsoft/Boot/bootmgfw.efi
    }
    menuentry 'Firmware Setup' {
            fwsetup
    }
}
Run Code Online (Sandbox Code Playgroud)

重要的是带有标题的配置块Boot Ubuntu 14.04.2 LTS from ISO。您可以根据自己的喜好更改颜色和超时。我选择black/light-magenta它是因为它看起来仍然有点像 Ubuntu 风格,但在链式加载其他配置时很容易区分。您可以在Arch Wiki 中找到其他发行版的更多示例,如果您想了解更多,阅读GRUB 手册确实值得您花时间。

回到配置块,很明显 ISO 被引用为/efi/boot/ubuntu-14.04.2-desktop-amd64.iso,因此将您的 ISO 复制到\EFI\BOOT\ubuntu-14.04.2-desktop-amd64.iso在配置中替换为您的 ISO 的实际文件名。

loopback loop $isofile是一行,它将我们的 ISO 文件加载到一个环回设备,我们可以从中直接启动 Linux 内核。这是可能的,因为我们的 EFI GRUB 映像包含环回模块。(在确定哪些模块是合理包含的过程中需要进行一些试验和错误。您不应该看到任何错误消息,但它仍然不完美。)说到内核,您可以添加内核参数,例如toram不同语言的参数(example locale=de_DE bootkbd=de) 和示例中一样:persistent

2.3. 添加持久性

您可以按照以下所述添加分区:如何获取 live-USB 以使用分区进行持久化?或者您可以创建一个casper-rw文件并将其放在 USB 驱动器的根目录中。

dd if=/dev/zero of=casper-rw bs=1M count=4094
mkfs.ext4 -m 0 casper-rw
Run Code Online (Sandbox Code Playgroud)

我还没有测试过绝对最大值是多少,它应该在 4094 到 4096 MB 之间。如果您打算使用更多空间,请使用分区。请注意,对(root)的每次更改都是对覆盖文件系统的修改,甚至是删除文件。

2.4. 检查完整性

您应该查看以下问题的答案,以验证 USB 驱动器上的 Live ISO 内容是否处于原始状态:

2.5. UEFI 安全启动

安全启动将成为 Windows 10 机器的强制性要求,我建议您查看 Linux Foundation 的 PreLoader 以将安全启动功能添加到此设置中。以下是一些ASCII 艺术图,用于说明随附 HashTool 的菜单

三、2020年回顾

我在 5 年前写了这个答案。它仍然有效吗?它适用于 Ubuntu。但是,来自最新 Windows 10 映像的 install.wim 超过了 FAT32 最大文件大小,并且更大的映像(如 RHEL 8)也不适合。我昨天尝试了 Rufus,注意到它也使用 GRUB 和 NTFS EFI 模块来读取另一个存储 Windows 安装文件的 NTFS 分区。但是,它无法从该分区加载数据。exFAT 现在也很普遍。

Windows 对没有分区表的驱动器很挑剔。尝试将旧 SSD 重新用作笨重的 USB 拇指驱动器在 Windows 上效果不佳。也许我需要阅读一些 Microsoft 文档以找出使其比 Linux 更复杂的基本原理。

ChromeOS 是一个不同的话题,我认为不可能以我喜欢的方式创建恢复媒体。当您必须使用 Windows 并重新格式化整个驱动器来为 Chromebook 创建媒体时,这很麻烦。

有趣的东西,让我们希望我能抽出时间解决其中的一些问题并学习更多新东西。


恭喜,我想说你现在已经掌握了 UEFI 启动,不用再害怕了。

  • 在使用 GUI 方法时,我遇到了一些 [符号链接](https://askubuntu.com/questions/599516/symbolic-links-error-while-creating-ubuntu-uefi-bootable-usb) 错误。这是否相关?你能详细说明一下吗? (3认同)
  • 至少在 16.04 中,“复制所有文件”无法启动,因为 grub.cfg 内核行参数“file=/cdrom/preseed/ubuntu.seed”。没有这样的文件,可能与前面提到的缺少符号链接(ubuntu 到 .)有关。编辑 grub.cfg 以删除 file=... 并将其替换为“live-media-path=/casper/ignore_uuid” (2认同)

sud*_*dus 5

从 ISO 文件中提取到 FAT32

将 Ubuntu 64 位桌面 ISO 文件的内容提取到具有 FAT32 文件系统和引导标志的分区将完成这项工作:创建一个仅在 UEFI 模式下引导的实时驱动器。它在此处称为“从 ISO 方法复制文件”(在已接受的答案中)。

测试是否在 UEFI 或 BIOS 模式下运行

但是,如果它是在 UEFI 或 BIOS 模式下启动的,那么在正在运行的 Ubuntu 系统(实时和已安装)中进行测试很容易。运行这个命令行,

test -d /sys/firmware/efi && echo efi || echo bios
Run Code Online (Sandbox Code Playgroud)

这使得使用可在两种引导模式下使用的实时系统变得简单,这也是一个优势。

另请参阅以下链接以获取该方法的更详细说明和说明,

help.ubuntu.com/community/Installation/iso2usb

help.ubuntu.com/community/Installation/iso2usb/diy


归档时间:

查看次数:

501253 次

最近记录:

5 年,8 月 前