概述
创建仅支持UEFI引导的USB启动介质非常简单。只需将文件复制到格式为FAT32的USB驱动器中。就这样!
请记住,在安装或引导介质时:
- 您可能仍然需要明确地告诉计算机通过UEFI引导介质。
- 建议使用类似于Windows 8及更高版本预安装中的GPT分区表。
- 在创建分区表后不要忘记创建一个分区。
- 使用最新的AMD64(LTS)ISO镜像,因为这些镜像肯定包含UEFI引导加载程序。
目录
- 使用ISO方法复制文件
- 通过终端的示例
- 通过图形界面的示例
- 在Windows上的示例
- ISO回环方法(高级)
- 创建二进制文件
- 创建配置文件
- 添加持久性
- 检查完整性
- 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/
如果您的USB驱动器上只有一个分区,那么您已经完成了。否则,您需要将该分区标记为可引导,例如通过使用
parted
命令。
# parted /dev/sdX set 1 boot on
在这里,/dev/sdX
是你的USB驱动器,1
是应该用来引导的分区号。
1.2. 通过图形界面的示例
挂载.iso文件并将内容复制到USB驱动器上。在Nautilus中按下Ctrl+H以显示和复制隐藏文件。
![nautilus showing Disk Image Mounter in context menu when .iso-file is selected](https://istack.dev59.com/VLpz8.webp)
通过GParted添加引导标志。
![GParted showing how to manage partition flags](https://istack.dev59.com/UDfYw.webp)
1.3. Windows示例
1. 和上面一样,只需复制文件。
2. 按下
Windows/Super+
X,进入磁盘管理并检查分区是否标记为活动。在 Windows 8 之前的版本中,您可以按下
Windows/Super+
R 打开运行菜单,并打开
diskmgmt.msc
,这将打开磁盘管理。
2. ISO回环方法(高级)
与从ISO镜像提取内容不同,GRUB和GRUB2能够通过回环设备直接从ISO镜像引导。假设ISO镜像是UEFI可引导的,我们可以设置一个USB驱动器,其中包含多个具有不同操作系统的ISO,而不会在USB驱动器上弄乱。
如果你想引导 Windows ,你可能想看一下SARDU。我记得2005年左右我在使用它时,它支持 Windows PE 并且似乎已经更新以支持 USB 驱动器和 UEFI,但请记住该工具也支持传统引导。
我们需要什么?
- 对GRUB配置文件有非常基本的了解。
- 对UEFI引导和GRUB有非常基本的了解,因为我们将生成自己的GRUB引导加载程序镜像,并包含大量模块。
- 一个支持UEFI引导的ISO镜像、一个格式为FAT的USB驱动器和一台运行Linux的机器。
- 不需要UEFI安装Linux(可能是鸡生蛋或蛋生鸡的情况),在VirtualBox中使用传统的Linux虚拟机即可。
2.1. 创建二进制文件
在您的Ubuntu机器或虚拟机上,请确保安装了grub-efi-amd64-bin软件包(较新版本还提供了32位Intel架构的grub-efi-ia32-bin)。该软件包在其他发行版上可能有不同的名称,您可以比较软件包的文件列表以找到适合您发行版的正确软件包。
以下命令将生成GRUB镜像,这里是一个EFI二进制文件,每台具有UEFI固件的计算机都应该能够运行。
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
每个标准的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
}
}
重要的是标题为
从ISO文件引导Ubuntu 14.04.2 LTS
的配置块。您可以根据自己的喜好更改颜色和超时时间。我选择了
黑/浅洋红
,因为它看起来还有点像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
,不同语言的参数(例如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
我没有测试过绝对最大值是多少,应该在4094到4096 MB之间。如果您打算使用更多的空间,请使用分区。请注意,对(根)的每一次更改都是对覆盖文件系统的修改,甚至包括删除文件。
2.4. 检查完整性
为了验证USB驱动器上的Live ISO内容是否处于原始状态,请查看以下问题的答案:
2.5. UEFI安全启动
Windows 10机器将强制使用安全启动,我建议您查看Linux Foundation的PreLoader,以将安全启动功能添加到此设置中。这里有一些ASCII艺术示例,展示了附带的HashTool的菜单。
3. 2020年回顾
我写了这个答案已经超过5年了。它还能正常工作吗?对于Ubuntu来说,它运行良好。然而,最新的Windows 10镜像中的install.wim文件超过了FAT32的最大文件大小,而更大的镜像如RHEL 8也无法适应。昨天我尝试了Rufus,并注意到它也使用了GRUB和NTFS EFI模块来读取另一个NTFS分区,该分区存储了Windows安装文件。然而,它未能从该分区加载数据。此外,exFAT现在很常见。
Windows对没有分区表的驱动器要求很严格。试图将旧的SSD重新用作笨重的USB闪存驱动器在Windows上效果并不好。也许我需要阅读一些微软的文档,找出为什么要使它比在Linux上更加复杂的理由。
ChromeOS是一个不同的话题,我认为不可能按照我喜欢的方式创建恢复介质。当你不得不使用Windows并重新格式化整个驱动器来为你的Chromebook创建介质时,这是很麻烦的。
有趣的事情,希望我能找到时间修复其中的一些问题并学到更多新知识。
恭喜,我可以说你现在已经掌握了UEFI引导,不再需要担心了。
EFI
的文件夹中,就像几乎所有ESP设置一样?如果ISO有多个分区怎么办?如果我们正在使用UEFI,为什么要设置引导标志? - MelabFedora-KDE-Live-x86_64-38-1.6.iso
文件,并将其安装在U盘的第一个分区中。它显示了grub菜单,但之后屏幕左上角只显示一个下划线,什么都没有发生。电脑对Cntr-Alt-Del有响应,所以并没有卡住。 - Luis A. Florit