我有两个不同的操作系统,其中一个是 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
B. USB 磁盘上的 grub。//ubuntu20
它们是通过包安装grub-install
的grub2-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