如何添加 GRUB2 菜单项以在 USB 驱动器上启动已安装的 Ubuntu?

kir*_*iri 24 boot grub2 usb

我不是在问如何从 USB 启动 LiveCD。

我有 2 个 Ubuntu 安装,一个在我计算机的内部硬盘驱动器上,另一个在 USB 驱动器上。

有没有办法添加一个 GRUB2 菜单条目(到我内部硬盘驱动器上的 GRUB)来启动我安装到 USB 闪存驱动器的 Ubuntu 操作系统,并且在我升级 Linux 内核后,这个相同的菜单条目仍然有效在USB安装?

old*_*red 36

每次在外部升级内核时,您都可以运行它来更新内部驱动器上 grub 中的引导节。

sudo update-grub
Run Code Online (Sandbox Code Playgroud)

但是您也可以在 grub2 的 40_custom 中添加一个引导节来引导分区,而不是特定的内核。Ubuntu 在 / (root) 中安装链接以启动最近的安装。如有必要,请根据您的驱动器和分区调整以下示例。使用 grub 的引导驱动器始终为 hd0,但其他驱动器的 BIOS 报告顺序可能会有所不同。

编辑:

gksudo gedit /etc/grub.d/40_custom
Run Code Online (Sandbox Code Playgroud)

然后加:

menuentry "Install on sdb1" {
    set root=(hd1,1)
    linux /vmlinuz root=/dev/sdb1 ro quiet splash
    initrd /initrd.img
}
Run Code Online (Sandbox Code Playgroud)

虽然上述工作正常,但我发现插入闪存驱动器或任何其他 USB 设备时驱动器可能会发生变化。所以我正在转换为使用标签。

menuentry "Cosmic 18.10 on sdb12 test" {
    search --set=root --label cosmic_b --hint hd2,gpt12
    configfile /boot/grub/grub.cfg 
}
Run Code Online (Sandbox Code Playgroud)

  • 你应该如何确定应该用什么来代替 (hd1,1)?你从哪里得到这些数字,以便它们适合?我可能需要这个来直接设置一个不同的问题:http://askubuntu.com/questions/573502/ubuntu-installation-not-found-by-update-grub (4认同)
  • 第一个数字是 BIOS 报告的驱动器。但是引导驱动器始终是 hd0,因此驱动器顺序可以更改。然后第二个数字是分区号。如果从 sda 驱动器引导,则 sda3 是 hd0,3。但是如果你从sdb启动,那么它可能是hd1,3。有时你只需要尝试。 (4认同)
  • 有没有办法使用分区的 UUID 而不是 `/dev/sdb1`? (3认同)

kir*_*iri 13

我发现了如何使用驱动器的 UUID,如果您在启动时插入了多个驱动器,这将非常有用。感谢 oldfred 的注释/vmlinux/initrd.img符号链接。

将此添加到文件中/etc/grub.d/40_custom,替换UUID=XXXX-YYYY为分区 UUID(使用命令获取 UUID blkid

menuentry "Boot from USB Drive" {
    set root=UUID=XXXX-YYYY
    linux /vmlinuz root=UUID=XXXX-YYYY ro quiet splash
    initrd /initrd.img
}
Run Code Online (Sandbox Code Playgroud)

  • 这绝对不是上面问题的答案。你应该已经接受了 oldfred 的答复。 (9认同)
  • @kiri:复制别人的答案并因此而称赞自己被认为是不好的做法。是的,即使您添加了 UUID 部分。 (2认同)

wik*_*200 5

要从 Ubuntu Live USB 启动,菜单项/etc/grub.d/40_custom应如下所示(替换DRIVE_UUID为分区的 uuid):

menuentry "Boot from LIVE USB Drive" {
   search --set=root --fs-uuid DRIVE_UUID
   linux ($root)/casper/vmlinuz boot=casper quiet splash --
   initrd ($root)/casper/initrd.lz
}
Run Code Online (Sandbox Code Playgroud)

要应用更改,请运行:

sudo update-grub
Run Code Online (Sandbox Code Playgroud)