是否仍然可以使用UEFI将Ubuntu安装到外部硬盘驱动器?


Answers:


12

它实际上 是可能的

在继续之前,这些说明适用于空白的EFI系统分区(ESP),并且可能会覆盖现有文件,或者无法按预期工作。至少要备份!

添加不同平台所需的分区

平台:旧版PC,基于UEFI的Windows计算机,Apple计算机

使用MBR将ESP添加到现有安装中

您需要从其他安装或实时媒体中遵循这些说明。

  1. 安装grub-efi-amd64-bin软件包。这只会安装所需的资源。它不会将您现有的MBR样式的安装切换到UEFI,也不会颠倒。

  2. GParted中收缩Ubuntu分区,为ESP腾出空间。ESP的建议大小范围为100 MB到500 MB,但是按照此处的这些说明创建的文件所需的大小不会超过2到5兆字节。

    注意:ESP在磁盘上的位置无关紧要,并且从最后开始将Ubuntu分区缩小几兆字节应该是快速而安全的。开始收缩是不安全的。请注意,ESP应该是主分区,而不是扩展分区或逻辑卷的一部分,分区号从1到4很好,上面的数字表示MBR分区表上的扩展分区。

    选择FAT32作为文件系统并设置启动标志。

  3. 挂载刚创建的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,不是分区。

  4. 就是这样,我们已经完成了,但是让我尝试解释一些事情。

    该参数--target x86_64-efi将确保将UEFI映像和模块安装到给定路径。--removable会将UEFI映像安装到\EFI\BOOT\BOOT{arch}.EFI可移动媒体的硬编码路径,而不是分发特定路径。您的grub.cfgin /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引导加载程序)通常仅在OS安装期间写入/更新。

    UUID=1234-567F /boot/efi vfat defaults 0 1
    

使用GPT将ESP或GRUB-BBP添加到安装中

在GPT分区驱动器上的旧版安装中添加ESP与上述操作非常相似:

  1. 安装grub-efi-amd64-bin软件包。
  2. 通过调整根分区的大小并设置boot标志,使用类似于上述说明的FAT32文件系统创建分区。
  3. 挂载分区并grub-install从上方运行包含该--removable参数的命令。

如果您只想在另一台计算机上启动现有的UEFI安装,这也可以使用。

为GRUB 创建BIOS可引导分区(BBP)有点不同:

  1. 安装grub-pc-bin软件包。

  2. 通过调整根分区的大小并设置bios_grub标志来创建与上述说明类似的分区。选择没有文件系统,并使其保持未格式化状态。

  3. /etc/default/grub使用管理权限编辑配置文件,然后添加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)启动!无论如何,我们开始:

  1. 安装grub-efi-amd64-binhfsprogsmactel-bootmactel-boot-logo(可选)封装。您需要启用Universe存储库(如何从命令行启用“ Universe”存储库?)并添加当前的Mactel支持PPA(有关更多详细信息,请参阅Mactel支持社区团队)以安装所有它们。

  2. 通过调整根分区的大小,使用类似于上述说明的HFS +文件系统创建分区。这次,我们需要更多的空间,因此,如果以前只有5 MB或更少,则将ESP的大小增加一倍。不需要标志。

  3. 挂载分区:

    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,您现在只需要按Option键 AltWindows键盘,然后选择正确的磁盘即可。

    Mac Startup Manager显示卷和Ubuntu徽标

关于分区标志,类型代码和GUID

为了尽可能准确,启动标志对于GRUB并不重要,默认情况下,GRUB搜索UUID以找到正确的文件系统来启动。在GParted中设置启动标志或bios_grub标志通常会为分区设置类型(MBR)或GUID(GPT)。

设置正确的类型或GUID的好处是,除了具有正确的工作设置外,这些分区还将隐藏在文件管理器中。检查和更改类型和GUID的最简单方法是通过磁盘gnome-disks)。

屏幕快照,显示了gnome磁盘中的驱动器和分区

屏幕快照,显示了gnome磁盘中的“编辑分区”对话框

或者,您可以使用parted或gdisk:

  • 0xef是MBR中与fdisk一起使用的ESP的类型代码
  • ef00是GPT中与gdisk一起使用的ESP的缩写类型代码
  • ef02是与gdisk一起使用的GPT中BBP的缩写类型代码

维基百科上有大量的GPT GUID

parted根据手册中的命令行等效项是parted $device set partition esp onparted $device set partition bios_grub on


我没有记录细节。但是能够将我的闪存驱动器分区到gpt,创建一个efi分区并将efi启动文件复制到efi分区。grub-mkimage创建了一个grubx64.efi,它期望文件具有某些路径,因此我只是将安装过程中的文件结构复制到了/ boot / grub中,并将带有configfile条目的grub.cfg添加到了/ iso中的另一个grub.cfg中。循环挂载启动我的ISO的文件夹。使用make图像创建自己的grubx64.efi可能更正确,但是复制有效。
oldfred 2014年

我搜索了很多内容,试图找出“如何使用MBR将ESP添加到现有安装中”这一部分。我对此感到紧张,但是它在第一次尝试时就起作用了!好答案!
Mark E. Haase

我正在尝试使用将答案添加到具有MBR的现有安装中来将EFI引导功能添加到USB上的Ubuntu的完整BIOS / MRR安装中。我收到“错误:/boot/找不到文件”。将grub.cfg在ESP分区指向正确的UUID。有任何想法吗?我很乐意提出一个新问题。
user68186

@ user68186你能做到吗?
BRabbit17年

我可以从Mac的外部驱动器中安装Ubuntu。连接到Mac后,它可以正确引导到Ubuntu。但是,在启动设备中连接到Windows10计算机(xps 15 9560)时,不会出现外部硬盘驱动器。我的直觉是由于UEFI。有人可以确认我的预感是否正确以及该线程是否是我可能需要能够从Windows计算机启动的线程?
BRabbit17年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.