把Ubuntu装入硬盘在任意一台支持UEFI的设备上启动的方法与失败原因分析

本文记录了怎样在不会打Grub命令, 不会写grub.cfg的情况下, 在移动硬盘中安装一个可以在任何支持UEFI的电脑上启动的Ubuntu.

分析

Ubuntu的安装程序是有Bug的, “选择安装启动引导器的设备”这一选项是假的, 把系统装入移动设备之后, 理论上在另一台电脑上是没有Grub的, 应该把引导程序都安装在移动硬盘里面. 但由于这个Bug, 就算选择了安装在移动硬盘, 引导程序最终还是装到了主机硬盘上. 这一点可以通过安装之后查看ESP分区, 里面没有Ubuntu的引导文件来验证. 这是最主要的困难.

这个Bug之前没发现, 是因为在机房环境中, 所有主机上都安装了Ubuntu系统, 都有Grub程序, 开机时选择了从移动硬盘启动, 失败后自动跳转到主机上的Grub程序, 在Legacy传统启动模式下, 只要通过set root 和 set prefix两条命令重设系统路径, 就可以利用主机上的Grub启动移动硬盘里的操作系统. 但这个问题在UEFI启动模式下或者纯Windows环境下就会暴露出来, 没有正确的引导程序, 要么出现Grub rescue, 要么根本启动不了. 实际上正确的启动应该是: BIOS->移动硬盘Grub->加载内核.

大佬可以直接手动把Grub安装到移动硬盘, 并手写配置文件. 下面的方法适用于不熟悉Grub命令, 不知道怎么写Grub配置的菜鸡(比如我), 用到一个常用于修复系统引导的工具.

方法

首先手动分出ESP分区, 这个操作在已经安装好的操作系统中进行, Linux下可用GParted, Windows下可用系统磁盘管理器. 记得打上boot, esp的标识, 这样BIOS才知道这个移动硬盘是可引导的.

之后执行正常的Ubuntu安装程序, 把系统安装到移动硬盘中.

下一步最关键. 大佬可以直接手动安装Grub, 我用的是boot-repair工具. 这个工具本来是用于引导文件损坏时的修复, 这里我们用它来全自动把引导程序装入移动硬盘并且自动生成配置.

使用下列命令安装boot-repair, 一般是安装在Ubuntu安装盘里面的try Ubuntu without install那个环境来修复引导, 但这里我们也可以直接找一个正常使用的系统来做这个操作.

sudo apt-add-repository ppa:yannubuntu/boot-repair
sudo apt update
sudo apt install boot-repair
通过boot-repair命令启动这个程序, 展开”高级选项”

“Grub位置”选项卡中, 默认的操作系统选择你的移动硬盘安装Ubuntu的根分区, 勾选单独的/boot/efi分区, 这样才能装入移动硬盘而不是装在主机里面.

“其它选项”里面把启动标志置于移动硬盘的ESP分区.

点应用开始安装.

这样我们不打一条Grub命令不写一行grub.cfg配置就得到了一个完整包含全套UEFI引导程序和Ubuntu系统的移动硬盘, 可以在任何资瓷UEFI的电脑上直接启动. (变换USB接口可能还要在Grub rescue里面重设路径, 但一般移动硬盘都会被识别为hd0, 插上之后不用操作Grub就可用)

 

赞(0)

评论 3

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    最好的解决办法就是先进去然后sudo grub-install /dev/sda(你要装grub的硬盘,不要写分区),非常有效

    winlere 4个月前 (07-27) 这家伙可能用了美佬的代理 谷歌浏览器 Ubuntu Linux 回复
    • @winlere OrzOrz 我试过不知道为什么不行.可能是因为我单独分了ESP, 网上的教程都是Legacy启动下的教程. 我觉得用引导修复工具不容易出锅, 有图形界面不会误操作. 我之前用parted终端手动操作把SSD的分区表搞废了, 幸好当时SSD已经挂载, 赶快备份文件, 再次插上就读不了盘了…

      cgazn 4个月前 (07-28) 这家伙可能用了美佬的代理 谷歌浏览器 Linux 回复
  2. #2

    我想翻 wALL 去一个外网 O (adasdas d ) J ,怎么办

    winlere 4个月前 (07-28) 这家伙可能用了美佬的代理 谷歌浏览器 Ubuntu Linux 回复