在当前可用的 Windows 8 计算机上安装 Ubuntu 时,拥有可以双向启动的实时媒体可能会成为问题。
换句话说,创造仅限 UEFI可启动的 USB 实时媒体是:您知道它肯定是通过 UEFI 启动和安装的。
由于 Valve 已经在其基于 DebianSteam OS 和 UNetbootin(Ubuntu 启动盘创建器最受欢迎的替代品)不兼容 UEFI,因此具有误导性,我认为我们应该有一个单独的主题来创建仅限 UEFI 的可启动 USB 实时媒体。
答案1
概述
创建仅支持 UEFI 的 USB Live 启动介质非常简单。只需将文件复制到FAT32 格式USB驱动器。就是这样!
请记住,对于安装或启动媒体:
- 你可能仍然需要明确告诉你的电脑通过 UEFI 启动媒体。
- AGPT分区表就像在 Windows 8 和更高版本的预安装中建议的那样。
- 创建分区表后,不要忘记创建分区。
- 使用最新的AMD64(LTS)ISO,因为它们肯定包含 UEFI 引导加载程序。
目录
- 从 ISO 方法复制文件
- 通过终端的示例
- 通过 GUI 的示例
- 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. 通过 GUI 的示例
挂载 .iso 文件并将内容复制到 USB 驱动器。在 Nautilus 中按Ctrl+H可显示和复制隐藏文件。
通过添加启动标志分区。
1.3. Windows 上的示例
- 同上,只需复制文件。
- 按Windows/Super+ X,转到磁盘管理并检查分区是否标记为活动。在 Windows 8 之前的 Windows 版本中,按Windows/Super+R打开运行菜单并打开
diskmgmt.msc
,这将打开磁盘管理。
2. ISO 环回方法(高级)
GRUB 和 GRUB2 无需从 ISO 映像中提取内容,而是能够通过回送设备直接从 ISO 映像启动。鉴于 ISO 映像是 UEFI 可启动的,我们可以设置一个包含多个具有不同操作系统的 ISO 的 USB 驱动器,而不会在 USB 驱动器上造成混乱。
如果你也想启动 Windows,你可能需要看看萨尔杜。我记得在 2005 年左右将它与 Windows PE 一起使用,它似乎已更新为支持 USB 驱动器和 UEFI,但请记住,此工具还支持传统启动。
我们需要什么?
- 关于 GRUB 配置文件的基本知识。
- 关于 UEFI 启动和 GRUB 的基本知识,因为我们将生成包含大量模块的我们自己的 GRUB 引导加载程序映像。
- 一个 UEFI 可启动 ISO 映像、一个 FAT 格式的 USB 驱动器和一台运行 Linux 的机器。
- 不,我们不需要 UEFI 安装 Linux(这可能是一个先有鸡还是先有蛋的问题),像 VirtualBox 这样的传统 Linux VM 就可以了。
2.1. 创建二进制文件
在你的 Ubuntu 机器或虚拟机上确保软件包grub-efi-amd64-bin已安装(在较新版本中,grub-efi-ia32-bin 也适用于 32 位 Intel 架构)。该软件包在其他发行版上可能有不同的名称,您可以比较软件包的文件列表在你的发行版上找到正确的软件包。
以下命令将生成 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
}
}
重要的是带有标题的配置块Boot Ubuntu 14.04.2 LTS from ISO
。您可以根据自己的喜好更改颜色和超时。我之所以选择它,black/light-magenta
是因为它看起来仍然有点像 Ubuntu,但在链式加载其他配置时很容易区分。您可以在以下位置找到其他发行版的更多示例建筑维基并阅读GRUB 手册如果你想超越这一点,那真的值得你花时间。
回到配置块,显然 ISO 被引用为/efi/boot/ubuntu-14.04.2-desktop-amd64.iso
,因此将您的 ISO 复制到并在配置中用您的 ISO 的实际文件名\EFI\BOOT\
替换。ubuntu-14.04.2-desktop-amd64.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 之间。如果您打算使用更多空间,请使用分区。请注意,对 (root) 的每次更改都是对覆盖文件系统的修改,甚至删除文件也是如此。
2.4. 检查完整性
您应该查看以下问题的答案来验证 USB 驱动器上的 Live ISO 内容是否处于原始状态:
2.5. UEFI 安全启动
安全启动将成为 Windows 10 机器的强制性要求,我建议您查看 Linux 基金会的 PreLoader,以将安全启动功能添加到此设置中。以下是一些ASCII 艺术展示了随附的 HashTool 的菜单。
3. 2020年回顾
我 5 年前就写了这个答案。它现在还能用吗?它对 Ubuntu 很有效。但是,最新 Windows 10 映像中的 install.wim 超过了 FAT32 的最大文件大小,RHEL 8 等更大的映像也放不下。我昨天尝试了 Rufus,发现它也使用 GRUB 和 NTFS EFI 模块来读取另一个存储 Windows 安装文件的 NTFS 分区。但它无法从该分区加载数据。此外,exFAT 现在也很常见。
Windows 对于没有分区表的驱动器很挑剔。在 Windows 上,尝试将较旧的 SSD 重新用作大块 USB 拇指驱动器效果并不好。也许我需要阅读一些 Microsoft 文档,以找出使其比 Linux 更复杂一些的理由。
ChromeOS 是另一个话题,我认为无法按照我喜欢的方式创建恢复媒体。当您必须使用 Windows 并重新格式化整个驱动器来为 Chromebook 创建媒体时,这很麻烦。
有趣的东西,希望我能找到时间来解决其中的一些问题并学习更多新的东西。
恭喜你,我想说你现在已经掌握了 UEFI 启动,不必再害怕了。
答案2
从 ISO 文件提取到 FAT32
将 Ubuntu 64 位桌面 ISO 文件的内容提取到具有 FAT32 文件系统和启动标志的分区即可完成此任务:创建一个仅在 UEFI 模式下启动的实时驱动器。这里(在接受的答案中)称为“从 ISO 方法复制文件”。
测试是否在 UEFI 或 BIOS 模式下运行
但是,如果在 UEFI 或 BIOS 模式下启动,则在正在运行的 Ubuntu 系统(实时和已安装)中测试很容易。运行此命令行,
test -d /sys/firmware/efi && echo efi || echo bios
这使得使用可以在两种启动模式下使用的实时系统变得非常简单,这也是一个优势。
有关该方法的更详细解释和描述,另请参阅以下链接,
答案3
使用dd
对我来说是可行的,但出于某种原因,GUI 版本不起作用。因此,首先,您可能需要监控 dd 的进度,另一个选项是使用SIGUSR1 选项来触发dd
定期报告其进度,但这比更复杂pv
。
然后:
sudo dd if=path/to/image/file | pv | sudo dd of=/dev/device_you_want_to_use
(/dev/device_you_want_to_use
通常是/dev/sdb
,但请先检查df
!)