看起来像将 Ubuntu 安装到外部硬盘上UEFI 无法做到这一点,而 MBR 内部和外部之间没有太大区别。这是真的吗?还是仍然可能?
是否有可能将这两种启动方法结合起来?
答案1
事实上是可能的。
在我继续之前,这些说明适用于空白的 EFI 系统分区 (ESP),可能会覆盖现有文件,或者无法按预期工作。至少要备份!
添加不同平台所需的分区
平台:传统 PC、基于 UEFI 的 Windows 计算机、Apple 计算机
将 ESP 添加到具有 MBR 的现有安装
您需要从另一个安装或实时媒体中遵循这些说明。
安装
grub-efi-amd64-bin
软件包。这将仅安装所需的资源。它不会将您现有的 MBR 样式安装切换为 UEFI 并颠覆一切。缩小你的 Ubuntu 分区分区为 ESP 腾出空间。ESP 的建议大小范围为 100 MB 到 500 MB,但按照此处的说明创建的文件将不需要超过 2 到 5 MB 的空间。
注意:你的 ESP 位于磁盘的哪个位置并不重要,将 Ubuntu 分区从结尾应该快速而安全。一开始就收缩是不安全。但需要注意的是,您的 ESP 应该是主分区,而不是扩展分区或逻辑卷的一部分,分区号从 1 到 4 都可以,上面的数字表示 MBR 分区表上的扩展分区。
选择FAT32作为文件系统并设置启动标志。
挂载刚刚创建的 ESP 和缩小的根文件系统:
mkdir -p /mnt/esp mount $esp_device /mnt/esp mkdir -p /mnt/rootfs mount $root_device /mnt/rootfs
注意:将
$esp_device
和替换$root_device
为适当的设备例如/dev/sdb2
和/dev/sdb1
。挂载点/mnt/esp
并且/mnt/rootfs
只是为了配合这个答案的剩余部分而选择的例子。使用以下命令安装 GRUB 的 EFI 映像和最小配置文件:
grub-install --efi-directory /mnt/esp --boot-directory /mnt/rootfs/boot --target x86_64-efi --removable $device
请注意,例如
$device
整个设备/dev/sdb
,而不是分区。就是这样,我们已经完成了,但是让我尝试解释一些事情。
该参数
--target x86_64-efi
将确保 UEFI 映像和模块将安装到给定的路径。--removable
将把 UEFI 映像安装到\EFI\BOOT\BOOT{arch}.EFI
可移动媒体的硬编码路径,而不是特定于发行版的路径。您的grub.cfg
in应该适用于这两种启动方法,并且现在应该在 旁边存在/boot/grub/
一个名为 的新文件夹。x86_64-efi
i386-pc
为了完整性,这是针对不可移动媒体的命令,它写入并依赖于平台中的 NVRAM 条目:
grub-install --efi-directory /mnt/esp --boot-directory /mnt/rootfs/boot --target x86_64-efi --bootloader-id "Ubuntu" $device
正确的 UEFI 安装包含类似于下面的一行
/etc/fstab
,但是即使没有它,设置也可以运行,并且 UEFI 映像(类似于 MBR 引导加载程序)通常仅在操作系统安装期间写入/更新。UUID=1234-567F /boot/efi vfat defaults 0 1
将 ESP 或 GRUB-BBP 添加到使用 GPT 的安装中
添加ESP在 GPT 分区驱动器上进行传统安装与上述非常相似:
- 安装该
grub-efi-amd64-bin
包。 - 通过调整根分区的大小并设置标志,创建一个具有与上述说明类似的 FAT32 文件系统的分区
boot
。 - 挂载分区并运行
grub-install
包含参数的上述命令--removable
。
如果您只是想在另一台计算机上启动现有的 UEFI 安装,这也是有效的。
创建一个BIOS 可引导分区GRUB 的 (BBP) 有点不同:
安装该
grub-pc-bin
包。通过调整根分区的大小并设置标志,创建一个与上述说明类似的分区
bios_grub
。选择没有文件系统并且不进行格式化。/etc/default/grub
使用管理权限编辑配置文件并添加GRUB_DEVICE=/dev/sdb6
到末尾。替换/dev/sdb6
为 BBP 的实际设备名称。您可以使用命令行编辑器纳米让事情保持简单。使用以下命令将 GRUB MBR 映像安装到 BBP:
grub-install --boot-directory /mnt/test/boot/ --target i386-pc $device
您可能需要删除或注释掉该行
/etc/default/grub
并将其添加到实际安装中。
奖励:在使用 GPT 安装时为 Mac 添加一个分区
我发现我测试的这台新 Mac(Mac Mini A1347 EMC 2840)可以从标准 FAT32 ESP 启动,甚至可以从 MBR 启动!无论如何,我们开始吧:
安装
grub-efi-amd64-bin
、hfsprogs
和mactel-boot
(mactel-boot-logo
可选)软件包。您需要启用宇宙存储库(如何从命令行启用“Universe”存储库?)并添加当前Mactel 支持 PPA(看Mactel 支持社区团队请参阅下文以了解更多详情)来安装所有这些组件。通过调整根分区的大小,创建一个具有 HFS+ 文件系统的分区,方法与上述说明类似。这次我们需要多几兆字节的空间,因此如果之前只有 5 兆字节或更少,则将 ESP 的大小增加一倍。无需任何标志。
挂载分区:
mkdir -p /mnt/esp-mac mount $esp-mac_device /mnt/esp-mac mkdir -p /mnt/rootfs mount $root_device /mnt/rootfs
注意:我选择
$esp-mac_device
和/mnt/esp-mac
以避免冲突。运行
grub-install
包含--removable
参数的命令:grub-install --efi-directory /mnt/esp-mac --boot-directory /mnt/rootfs/boot --target x86_64-efi --removable $device
最后按照 Mac 期望的方式设置分区:
sudo hfs-bless /mnt/esp-mac/EFI/BOOT/bootx64.efi sudo cp -v /mnt/esp-mac/EFI/BOOT/bootx64.efi /mnt/esp-mac/System/Library/CoreServices/boot.efi sudo cp -v /mnt/esp-mac/EFI/BOOT/grub.cfg /mnt/esp-mac/System/Library/CoreServices/grub.cfg sudo cp -v /usr/share/mactel-boot/SystemVersion.plist /mnt/esp-mac/System/Library/CoreServices/SystemVersion.plist sudo cp -v /usr/share/mactel-boot-logo/ubuntu.icns /mnt/esp-mac/.VolumeIcon.icns echo "Dummy kernel for booting" | sudo tee /mnt/esp-mac/mach_kernel
要在 Mac 上从外部媒体启动 Ubuntu,你现在只需按下选项键 ⌥或Alt在 Windows 键盘上选择正确的磁盘。
关于分区标志、类型代码和 GUID
为了尽可能准确,启动标志对 GRUB 来说并不重要,默认情况下 GRUB 会搜索 UUID 来找到要从中启动的正确文件系统。在 GParted 中设置启动标志或 bios_grub 标志通常会为分区设置类型 (MBR) 或 GUID (GPT)。
设置正确的类型或 GUID 的好处除了可以正确工作之外,还在于这些分区将在文件管理器中隐藏。检查和更改类型和 GUID 的最简单方法是通过磁盘(gnome-disks
)。
或者,您可以使用 parted 或 gdisk:
- 0xef 是 MBR 中 ESP 的类型代码,用于 fdisk
- ef00 是 GPT 中 ESP 的缩写类型代码,用于 gdisk
- ef02 是 GPT 中 BBP 的缩写类型代码,用于 gdisk
维基百科上有GPT 的 GUID。
parted
根据命令行等效项手动的是parted $device set partition esp on
和parted $device set partition bios_grub on
。