如何将GRUB重新安装到EFI分区?


32

我想重新安装GRUB 2,并且找到了以下指示信息: 如何使用Ubuntu Live CD或USB修复,还原或重新安装Grub 2。就我而言,引导加载程序安装在EFI分区中。如果我使用本指南中提供的命令,GRUB会自动重新安装到EFI分区,还是将其安装到已安装Ubuntu的根分区中?显然,我不希望这种情况发生。


3
提供的链接中的说明仅对在旧BIOS模式下重新安装GRUB有效,在您的情况下将不起作用。要将GRUB以EFI BIOS模式重新安装到Ubuntu安装中,请阅读我的回答。:)
cl-netbox

非常感谢你!:)我有一些问题:在UEFI系统中安装Ubuntu时,我在BIOS中找到了两个条目。有没有办法可以使用unic ubuntu?如果是MBR分区表(因此没有EFI或任何其他引导分区),我可以使用相同的命令,除了:sudo mount / dev / sd ** / mnt / boot / efi吗?
Generoso

您可以尝试使用以下命令删除第二个Ubuntu条目:sudo efibootmgr(列出所有条目)| sudo efi bootmgr -b <条目号> -B ....并以旧版BIOS模式重新安装GRUB,请执行以下命令:sudo mount / dev / sd ** / mnt | sudo grub-install --boot-directory = / mnt / boot / dev / sd *(* =磁盘| ** =系统分区)!:)
cl-netbox

完美:)无论如何,拥有UEFI系统以及EFI分区,是否有办法避免在执行新的Windows安装时覆盖grub?
Generoso

好吧,Microsoft除了自己的产品外,不关心其他任何事情,因此您可以在不损害Windows的情况下安装Linux系统-不幸的是,情况并非如此-因此,在安装Windows之后再安装Windows Ubuntu,您必须随后还原GRUB引导加载程序。:)
cl-netbox

Answers:


54

以此方式以EFI模式将GRUB引导加载程序重新安装到Ubuntu安装中...

从Ubuntu安装介质启动,然后选择“尝试不安装Ubuntu”。
(以EFI模式启动安装介质,选择前面带有UEFI的Ubuntu条目。)

进入Live桌面后,打开终端并执行以下命令:

sudo mount /dev/sdXXX /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  

注意:sdX=磁盘| sdXX= efi分区| sdXXX=系统分区

要使用GParted识别分区,该工具将包含在安装介质中。
运行命令后,GRUB将安装在单独的EFI分区中。


+1,但是为什么不从Ubuntu本身安装呢?

1
@MarkYisri:非常感谢!:)因为这是重新安装GRUB引导加载程序而不破坏事物的最安全方法,并且在系统无法正常启动的情况下...是唯一的方法!:)
cl-netbox

1
在此解决方案中,“ grub-install”如何知道应该以EFI模式安装?
user334639 '17

3
重要的是要以正确的引导模式引导安装介质,如果要重新安装,grub-efi则必须以UEFI模式引导,如果要重新安装,grub-pc则必须以旧模式引导。
mook765

1
这对我grub-install /dev/sdXX有用,除了一个更改:我做了,即不是磁盘,而是使用EFI分区来安装grub,它起作用了。
鸭道奇队

3

这是唯一对我有效的方法:(系统: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

怎么--recheck办?手册说delete device map if it already exists
MrCalvin

如果我将引导入口称为默认值,例如--bootloader-id=Ubuntu_02引导失败。它只是在grub控制台中启动...任何解决方案?
MrCalvin

是。似乎grub-install --recheck是必要的。它修复了我无法使用的USB HDD EFI。
solsTiCe

2

感谢@ 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 = disk | sdXX = efi分区| sdXY =引导分区| sdXXX =系统分区


我有一个正在运行的Ubuntu Bionic系统,不小心在其上执行rm -Rf / boot / efi!我的系统仍在运行,因此我尝试使用最后两个命令(grub-install / dev / mapper / ubuntu--vg-root和update-grub)。重新启动,一切正常。ew,谢谢:)
Roel Van de Paar,

2

另外,如果从实时CD启动以进行恢复,则可能会丢失grub-efi-amd64-bin软件包,然后输入

"grub-install --target=x86_64-efi /dev/sdb" 

失败并显示错误消息:“ grub-install:错误:/usr/lib/grub/x86_64-efi/modinfo.sh不存在。请指定--target或--directory。”

在这种情况下,请在chroot之外运行

sudo apt get grub-efi-amd64-bin

然后将/ usr / lib / grub / x86_64-efi添加到chroot挂载。

BTW“ / dev / sdb”参数已过时,将被忽略。


0

除了ci-netbox答案。
如果您的pendrive操作系统版本与磁盘上安装的版本不匹配,则grub-install可能难以识别正确的grub安装:

$ sudo chroot /mnt
# grub-install /dev/sdX
grub-install: error: /usr/lib/grub/i386-pc/modinfo.sh doesn't exist. 
Please specify --target or --directory.

尝试手动识别要使用的安装

# ls /usr/lib/grub/
grub-mkconfig_lib  x86_64-efi  x86_64-efi-signed

然后重新启动grub-install:

# grub-install --target=x86_64-efi /dev/sdX 
Installing for x86_64-efi platform.
Installation finished. No error reported.

0

如果您碰巧丢失了EFI分区,则很容易找回它。您可以使用fdiskparted创建类型为“ EFI分区(1)”的新GPT分区,并将其格式化为:

sudo mkfs.msdos /dev/sdX

然后挂载它,您可以按照运行:

sudo grub-install /dev/sdX

和其他解决方案一样。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.