我想重新安装 GRUB 2,我发现了以下说明: 如何使用 Ubuntu Live CD 或 USB 修复、恢复或重新安装 Grub 2。在我的例子中,引导加载程序安装在 EFI 分区中。如果我使用本指南中提供的命令,GRUB 会自动重新安装到 EFI 分区,还是会安装到安装 Ubuntu 的根分区中?显然,我不希望发生这种情况。
答案1
以这种方式在 EFI 模式下将 GRUB 引导加载程序重新安装到您的 Ubuntu 安装中...
从 Ubuntu 安装介质启动并选择“无需安装即可试用 Ubuntu”。
(以 EFI 模式启动安装介质,选择前面带有 UEFI 的 Ubuntu 条目。)
进入 Live 桌面后,打开终端并执行以下命令:
sudo mount /dev/sdXY /mnt
sudo mount /dev/sdXX /mnt/boot/efi
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
sudo chroot /mnt
grub-install /dev/sdX
update-grub
exit
注意:如果 grub-install 命令报告错误,则表示找不到 efivars。请在 chroot 环境中尝试以下操作(感谢 @michael_dunn - 此步骤在 Ubuntu 22.10 中是必需的):
mount -t efivarfs none /sys/firmware/efi/efivars
然后再次执行grub-install
命令:grub-install /dev/sdX
为了避免可能出现的意外问题,请随后正确卸载文件系统。
sudo umount /dev/sdXX
sudo umount /dev/sdXY
注意:sdX
= 磁盘 | sdXX
= efi 分区 | sdXY
= 系统分区
要识别分区,请使用 GParted,该工具包含在安装介质中。
运行命令后,GRUB 将安装在单独的 EFI 分区中。
答案2
这是对我唯一有用的方法:(系统:sdb8,启动:sdb6,efi:sdb2)
sudo mount /dev/sdb8 /mnt
sudo mount /dev/sdb6 /mnt/boot
sudo mount /dev/sdb2 /mnt/boot/efi
sudo mount --bind /dev /mnt/dev &&
sudo mount --bind /dev/pts /mnt/dev/pts &&
sudo mount --bind /proc /mnt/proc &&
sudo mount --bind /sys /mnt/sys
sudo chroot /mnt
grub-install --target=x86_64-efi /dev/sdb
grub-install --recheck /dev/sdb
exit &&
sudo umount /mnt/sys &&
sudo umount /mnt/proc &&
sudo umount /mnt/dev/pts &&
sudo umount /mnt/dev &&
sudo umount /mnt
答案3
这是我在标准 x86_amd64 EFI 桌面上执行的操作,无需 chrooting,假设您的硬盘上有一个包含 Ubuntu 的分区,并且可能有一个应该安装 GRUB 的 EFI 分区。
在实时 Ubuntu 上启动,我使用的是 18.04,但更新的版本应该也可以
如果您当前没有 EFI 分区(可能已被删除,或者您正在迁移到新驱动器):
sudo gparted
在您选择的磁盘上创建一个大约 100 MB 的 FAT 32 分区(通常是托管 Ubuntu 分区的磁盘)。如果您计划移动或调整某些分区的大小,请提前做好准备(例如,在可用空间的末尾创建 EFI 分区)。
在此分区上设置标志 esp(标志 boot 也将被选择)
如果目录 /sys/firmware/efi/efivars 为空,则运行:
mount -t efivarfs none /sys/firmware/efi/efivars
此后不应再为空
现在假设 Ubuntu 分区是/dev/sda2
,而(可能是新的)EFI 分区是/dev/sda1
sudo apt install grub-efi
sudo mkdir /media/root && sudo mount /dev/sda2 /media/root
sudo mkdir /media/efi && sudo mount /dev/sda1 /media/efi
如果您使用安全启动,请在下面的 grub-install 命令中添加参数 --uefi-secure-boot
sudo grub-install --target=x86_64-efi /dev/sda --efi-directory=/media/efi --boot-directory=/media/root/boot
这应该给出:
为 x86_64-efi 平台安装。
安装完成。没有报告错误。
然后重启,你就大功告成了。你可能需要告诉 BIOS 要使用哪个驱动器,要使用哪个 EFI 分区,或者要使用哪个 EFI 二进制文件。
如果您创建了新的 EFI 分区,则可能必须将其添加到分区/etc/fstab
才能update-grub
正常工作。
了解更多信息 :https://wiki.archlinux.org/index.php/Multiboot_USB_drive#Hybrid_UEFI_GPT_+_BIOS_GPT/MBR_boot
来源如何填充/sys/firmware/efi/efivars
(否则 grub-install 会发出警告warning: EFI variables are not supported on this system
:)
来源了解如何使其与安全启动一起工作。
答案4
感谢@cl-netbox 的指导!
在我升级(Linux Mint 18.2 Sonya 到 18.3 Sylvia)后,我的系统无法启动,所以我按照上面的说明操作,但仍然没有成功。然而,我注意到我的机器的 /boot 位于一个单独的分区中(可能是因为我使用的是 LVM),所以我稍作修改的过程是:
sudo mount /dev/sdXXX /mnt
sudo mount /dev/sdXY /mnt/boot
sudo mount /dev/sdXX /mnt/boot/efi
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
sudo chroot /mnt
grub-install /dev/sdX
update-grub
注意:sdX = 磁盘 | sdXX = efi 分区 | sdXY = 启动分区 | sdXXX = 系统分区