Gen*_*oso 69 partitioning boot grub2 dual-boot uefi
我想重新安装 GRUB 2,我找到了以下说明: 如何使用 Ubuntu Live CD 或 USB 修复、还原或重新安装 Grub 2。就我而言,引导加载程序安装在 EFI 分区中。如果我使用本指南中提供的命令,GRUB 会自动重新安装到 EFI 分区,还是会安装到安装 Ubuntu 的根分区?显然,我不希望这种情况发生。
cl-*_*box 118
以这种方式在 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
Run Code Online (Sandbox Code Playgroud)
注意:sdX= 磁盘 | sdXX= efi 分区 | sdXY= 系统分区
使用 GParted 识别分区,该工具包含在安装介质中。
运行命令后,GRUB 将安装在单独的 EFI 分区中。
小智 13
这是对我有用的唯一方法:(系统: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
Run Code Online (Sandbox Code Playgroud)
Nic*_*lás 10
在过去的几个月里,相关库发生了一些更新。
以下步骤对我很有用。他们从旧答案以及其他论坛中汲取了想法。
确保您使用 EFI 启动
efibootmgr -v
Run Code Online (Sandbox Code Playgroud)
运行 grub 安装
sudo mount /dev/nvme0n1p5 /mnt
sudo mount /dev/nvme0n1p1 /mnt/boot/efi
for i in /dev /dev/pts /proc /sys /sys/firmware/efi/efivars /run; do sudo mount -B $i /mnt$i; done
sudo chroot /mnt
grub-install --target=x86_64-efi /dev/nvme0n1
grub-install --recheck /dev/nvme0n1
# as a second attempt, you could also try (assuming _debian_ is your distro)
# grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=debian
# grub-mkconfig -o /boot/grub/grub.cfg
update-grub2
exit &&
sudo umount /mnt/sys &&
sudo umount /mnt/proc &&
sudo umount /mnt/dev/pts &&
sudo umount /mnt/dev &&
sudo umount /mnt
Run Code Online (Sandbox Code Playgroud)
确保将efibootmgr您的 Linux 列为条目
efibootmgr -v
Run Code Online (Sandbox Code Playgroud)
小智 7
这就是我在标准 x86_amd64 EFI 桌面上所做的,没有 chroot,假设您的硬盘驱动器上有一个包含 Ubuntu 的分区,并且可能是一个应该安装 GRUB 的 EFI 分区。
# boot on a live Ubuntu, I used 18.04 but more recent should work
# if you have currently no EFI partition (maybe it was deleted,
# or you are migrating to a new drive):
# sudo gparted
# - create a FAT 32 partition of around 100 MB on the disk of your choice
# (in general the one that host the Ubuntu partition). If you plan to
# move or resize some paritions, anticipate that (for instance by
# creating the EFI partition at the end of the free space).
# - set the flag esp on this partition (the flag boot will also be selected)
# now assuming that the Ubuntu partition is `/dev/sda2` and the (possibly new) EFI partition is `/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
sudo grub-install --target=x86_64-efi /dev/sda --efi-directory=/media/efi --boot-directory=/media/root/boot
Run Code Online (Sandbox Code Playgroud)
这应该给出:
为 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
小智 6
感谢@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
Run Code Online (Sandbox Code Playgroud)
注意:sdX = 磁盘 | sdXX = efi 分区 | sdXY = 启动分区 | sdXXX = 系统分区
小智 6
另外,如果从 Live CD 启动进行恢复,则可能会丢失该grub-efi-amd64-bin软件包,然后丢失以下行:
grub-install --target=x86_64-efi /dev/sdb
Run Code Online (Sandbox Code Playgroud)
失败并显示错误消息:
grub-install: error: /usr/lib/grub/x86_64-efi/modinfo.sh doesn't exist. Please specify --target or --directory.
Run Code Online (Sandbox Code Playgroud)
在这种情况下,请在以下位置之外运行chroot:
sudo apt get grub-efi-amd64-bin
Run Code Online (Sandbox Code Playgroud)
然后添加/usr/lib/grub/x86_64-efi到chroot坐骑。
顺便说一句,该/dev/sdb参数已过时并被忽略。
| 归档时间: |
|
| 查看次数: |
257408 次 |
| 最近记录: |