我正在尝试将 GRUB 安装到 USB 作为引导加载程序,以便我可以启动通常无法启动到 NVMe 的系统。
最好使用安全的 UEFI 启动方式。
对于一个完全不了解 Linux 和 GRUB 的人来说,我已经花了超过 10 个小时进行概念形成和初步研究。
在完全支持 NVMe 启动且安装了完整 Linux 的镜像系统上,我创建了 GTP 闪存盘,格式化为 EFI 分区,并将 EFI 分区挂载到 /efi
user@user-PC:/$ sudo -s
[sudo] password for user:
root@user-PC:/# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 55.5M 1 loop /snap/core18/1988
loop1 7:1 0 219M 1 loop /snap/gnome-3-34-1804/66
loop2 7:2 0 64.8M 1 loop /snap/gtk-common-themes/1514
loop3 7:3 0 51M 1 loop /snap/snap-store/518
loop4 7:4 0 31.1M 1 loop /snap/snapd/11036
sda 8:0 1 3.6G 0 disk
├─sda1 8:1 1 256M 0 part ### This is the EFI partition, so Linux wont mount it
└─sda2 8:2 1 3.4G 0 part /media/user/DATA
sr0 11:0 1 1024M 0 rom
nvme0n1 259:0 0 238.5G 0 disk
├─nvme0n1p1 259:1 0 100M 0 part /boot/efi
├─nvme0n1p2 259:2 0 16M 0 part
├─nvme0n1p3 259:3 0 137.9G 0 part
├─nvme0n1p4 259:4 0 499M 0 part
└─nvme0n1p5 259:5 0 100G 0 part /
root@user-PC:/# mkfs.msdos -F 32 -n GRUB2EFI /dev/sda1
mkfs.fat 4.1 (2017-01-24)
root@user-PC:/# mount /dev/sda1 /efi
root@user-PC:/# mkdir -p /efi/etc/default
root@user-PC:/# cp -a /etc/grub.d /efi/etc
root@user-PC:/# cp /etc/default/grub /efi/etc/default
root@user-PC:/home/user# grub-install --target=x86_64-efi --uefi-secure-boot --efi-directory=/efi/boot --bootloader-id=GRUB --removable --verbose
Installing for x86_64-efi platform.
grub-install: info: adding `hd0' -> `/dev/nvme0n1' from device.map.
grub-install: info: adding `hd1' -> `/dev/sda' from device.map.
grub-install: error: failed to get canonical path of `/efi/boot'.
root@user-PC:/home/user#
请看最后一行。有哪位专家能解释一下吗?非常感谢,谢谢。
答案1
睡了一晚后,我考虑阅读更多参考资料并重新检查我的命令。
在我/boot
从grub-install
命令中删除后它起作用了:
grub-install --target=x86_64-efi --uefi-secure-boot --efi-directory=/efi --bootloader-id=GRUB --removable –verbose
这是 UEFI 启动。为了测试它,我插入了 USB,并在 BIOS 启动设置中禁用了来自 NVMe 的启动项。USB 中的绿灯闪烁,启动正常。在没有 USB 的情况下重新启动计算机,计算机(正确地)无法找到启动设备。
我要出去了,一旦我有机会恢复系统并重复该过程,我就会发布完整的命令历史记录(我已经备份了系统以反复测试它)