是否仍然可以使用UEFI将Ubuntu安装到外部硬盘?
看起来UEFI无法将Ubuntu安装到外部硬盘 ,与MBR一样,外部和内部之间没有太大区别。 这是真的还是仍然可能?
甚至可以结合两种启动方法吗?
它实际上是可能的 。
在继续之前,这些说明适用于空白EFI系统分区(ESP),可能会覆盖现有文件,或者无法按预期工作。 至少做备份!
为不同平台添加所需的分区
平台:Legacy PC,基于UEFI的Windows计算机,Apple计算机
使用MBR将ESP添加到现有安装
您需要按照其他安装或实时媒体的说明进行操作。
-
安装
grub-efi-amd64-bin
软件包。 这只会安装所需的资源。 它不会将您现有的MBR样式安装切换到UEFI并将事情颠倒过来。 -
在GParted中缩小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
替换$esp_device
适当的设备,例如/dev/sdb2
和/dev/sdb1
。 mountpoints/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映像安装到--removable
编码路径\EFI\BOOT\BOOT{arch}.EFI
用于可移动媒体,而不是特定于分发的路径。/boot/grub/
grub.cfg
应该与两种启动方法一起使用,现在i386-pc
旁边应该存在一个名为x86_64-efi
的新文件夹。为了完整性,这是用于写入和依赖平台中NVRAM条目的不可移动介质的命令:
grub-install --efi-directory /mnt/esp --boot-directory /mnt/rootfs/boot --target x86_64-efi --bootloader-id "Ubuntu" $device
正确的UEFI安装包括类似于下面
/etc/fstab
的一行,但是设置function没有,并且UEFI映像(类似于MBR引导加载程序)通常仅在OS安装期间写入/更新。UUID=1234-567F /boot/efi vfat defaults 0 1
使用GPT将ESP或GRUB-BBP添加到安装中
将ESP添加到GPT分区驱动器上的旧安装非常类似于上面的:
- 安装
grub-efi-amd64-bin
软件包。 - 通过调整根分区的大小并设置
boot
标志,创建一个FAT32文件系统的分区,类似于上面的说明。 - 挂载分区并从上面运行包含
--removable
参数的grub-install
命令。
如果您只想在另一台计算机上启动现有的UEFI安装,这也可以使用。
为GRUB创建BIOS可引导分区 (BBP)有点不同:
-
安装
grub-pc-bin
包。 -
通过调整根分区大小并设置
bios_grub
标志,创建类似于上述说明的分区。 选择无文件系统并保持未格式化。 -
使用管理权限编辑配置文件
/etc/default/grub
,并在GRUB_DEVICE=/dev/sdb6
添加GRUB_DEVICE=/dev/sdb6
。 将/dev/sdb6
替换为BBP的实际设备名称。 您可以使用命令行编辑器nano来保持简单。使用以下命令将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存储库( 如何从命令行启用“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
来避免冲突。运行包含
--removable
参数的grub-install
命令: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,您现在只需要在Windows键盘上按选项键 ⌥或Alt ,然后选择正确的磁盘。
关于分区标志,类型代码和GUID
为了尽可能准确,引导标志对GRUB并不重要,默认情况下,GRUB会搜索UUID以找到要从中引导的正确文件系统。 在GParted中设置引导标志或bios_grub标志通常会为分区设置类型(MBR)或GUID(GPT)。
除了具有正确工作的设置之外,设置正确类型或GUID的好处是这些分区将隐藏在文件管理器中。 检查和更改类型和GUID的最简单方法是通过磁盘 ( gnome-disks
)。
或者你可以使用parted或gdisk:
- 0xef是MBR中用于fdisk的ESP的类型代码
- ef00是GPT中用于gdisk的ESP的缩写类型代码
- ef02是GPT中BBP的缩写类型代码,用于gdisk
维基百科有一个很大的GPT GUID列表。
根据手册 parted $device set partition esp on
命令行等价物被parted $device set partition esp on
和parted $device set partition bios_grub on
。