在 USB 闪存驱动器中以 efi 模式安装 grub2

在 USB 闪存驱动器中以 efi 模式安装 grub2

我有两个不同的操作系统,其中一个是 ubuntu。我用的是 PC,不是 Mac。我使用 Chimera 引导程序,但找不到 Ubuntu。因此,我想在闪存驱动器 USB 上以 EFI 模式安装 grub 2。这样,只要连接了 USB 闪存驱动器,我就可以加载 Ubuntu。

我遵循了本指南https://help.ubuntu.com/community/UEFIBooting替换“/dev/sda”

sudo efibootmgr --create --gpt --disk /dev/sda --part 1 --write-signature --label "GRUB2" --loader "\\EFI\\grub\\grub.efi"

使用 usb-pen 目录。然后,我复制了 Ubuntu 分区中存在的 grub.cfg 文件。结果?Grub2 加载,但当我选择菜单项时,grub2 找不到任何命令或磁盘。我该如何解决这个问题?

PS 这里有错误的照片(当我在 grub2 中选择 ubuntu 条目时)、usb 驱动器的内容和 grub.cfg 文件http://paste.ubuntu.com/7283661/

答案1

我意识到我回答这个问题有点晚了,但我想做一些类似于你的设置的事情,遇到了同样的问题。我终于找到了解决办法,想分享一下。

这看起来像是 grub-install 中的某种错误。在您的 USB 驱动器中,您有以下内容:

/EFI/thenameIgavetomygrub/grub.cfg

只需将该文件夹thenameIgavetomygrub及其所有内容(在您的情况下,它看起来像您将其称为“grub”)复制到 USB 驱动器上的同一个 EFI 文件夹中,然后将该副本重命名为“ubuntu”。

那么它应该可以工作。至少对我来说是这样的。

答案2

也许有些事情需要澄清。

一、启动菜单//似乎在主板上

引导菜单

A.红色框内的物品

efibootmgr由(或 或类似工具)创建

它们总是在这里,即使磁盘设备不存在。//
从设备启动不是必需的。(只需添加更多启动条目)

1. 零件布局

/dev/sda: PTUUID="79be6d7a-0332-4aae-95c6-5798b97db2d5" PTTYPE="gpt"
/dev/sda1: UUID="D18D-CD5C" TYPE="vfat" PARTLABEL="EFI system partition" PARTUUID="3545bf37-ae87-4741-8cdf-fc196833e869"
/dev/sda2: LABEL="u20" UUID="88c19248-455c-4446-b077-3f63b3123c5f" TYPE="ext4" PARTLABEL="Linux filesystem" PARTUUID="d481f035-fbe8-496c-b8be-11ff7b3cf4fe"
mount /dev/sda1 /mnt/efi/

/mnt/efi/
└── EFI
    └── BOOT
        ├── BOOTX64.CSV
        ├── BOOTX64.EFI
        ├── grub.cfg
        ├── grubx64.efi  // grub2 启动文件
        └── mmx64.efi    // 好像是 诊断模式

2.安装启动项:

efibootmgr -c -w -L 'u20_grubx64' -d /dev/sda -p 1 -l '\EFI\BOOT\grubx64.efi'

将获得菜单项:

Boot0007* u20_grubx64   HD(1,GPT,3545bf37-ae87-4741-8cdf-fc196833e869,0x8000,0x80000)/File(\EFI\BOOT\grubx64.efi)

B.绿色框内的物品

当真实磁盘连接时会自动显示。
如果磁盘未连接,它们将会消失。

//他们可以从相应的磁盘启动 grub2。



二. grub //在磁盘上

A. 内部 SSD 上的 grub。//ubuntu18 SSD 上的 grub

B. USB 磁盘上的 grub。//ubuntu20 USB 上的 grub

它们是通过包安装grub-installgrub2-common

1. 创建零件布局

gparted创建 gpt 分区。

  • 创建 sda1 部件,设置部件标志:esp,设置部件标签EFI system partition,格式化为fat32
  • 创建 sda2 部分,格式化ext4(如示例),//可能由 linux 操作系统安装,/boot里面有目录。
sda           8:0    0 465.8G  0 disk 
├─sda1        8:1    0   256M  0 part 
├─sda2        8:2    0    40G  0 part 
blkid /dev/sda*
/dev/sda1: UUID="D18D-CD5C" TYPE="vfat" PARTLABEL="EFI system partition" PARTUUID="3545bf37-ae87-4741-8cdf-fc196833e869"
/dev/sda2: LABEL="u20" UUID="88c19248-455c-4446-b077-3f63b3123c5f" TYPE="ext4" PARTLABEL="Linux filesystem" PARTUUID="d481f035-fbe8-496c-b8be-11ff7b3cf4fe"

2. 安装 grub2 efi

安装部件,等待安装

sudo mount /dev/sda2 /mnt/p2
sudo mount /dev/sda1 /mnt/p2/boot/efi/

安装

sudo grub-install --target=x86_64-efi --recheck --removable --efi-directory=/mnt/p2/boot/efi/ --boot-directory=/mnt/p2/boot /dev/sda1 
Installing for x86_64-efi platform.
Installation finished. No error reported.

这将在 USB 磁盘上安装 grub2 sda

sda1 中的那些文件/

/mnt/p2/boot/efi/
└── EFI
    └── BOOT
        ├── BOOTX64.CSV
        ├── BOOTX64.EFI
        ├── grub.cfg
        ├── grubx64.efi  // grub2 启动文件
        └── mmx64.efi    // 好像是 诊断模式

将显示为二.B图像,
并且可以从启动菜单项启动一.B一.A



sda2 中的内核/boot,由 ubuntu20 安装。

/mnt/p2/boot/
├── config-5.8.0-63-generic
├── efi
├── grub
│   ├── fonts
│   ├── gfxblacklist.txt
│   ├── grub.cfg
│   ├── grubenv
│   ├── locale
│   ├── unicode.pf2
│   └── x86_64-efi
├── initrd.img -> initrd.img-5.8.0-63-generic
├── initrd.img-5.8.0-63-generic
├── memtest86+.bin
├── memtest86+.elf
├── memtest86+_multiboot.bin
├── System.map-5.8.0-63-generic
├── vmlinuz -> vmlinuz-5.8.0-63-generic
├── vmlinuz-5.8.0-63-generic



以及总启动流程:

efi boot menu item=> grub2 on sda1=> kernel on sda2=>rootfs


也可以看看:

https://wiki.archlinux.org/title/Multiboot_USB_drive
https://wiki.archlinux.org/title/GRUB#Installation_2
https://wiki.archlinux.org/title/EFI_system_partition

https://unix.stackexchange.com/questions/18752/change-the-number-of-the-partition-from-sda1-to-sda2

相关内容