如何重新安装GRUB2 EFI?


56

成功更新我的BIOS后,出现了问题,最后我在黑屏的左上角以闪烁的光标结束。没有错误,什么都没有。现在,BIOS仅列出了一个SATA: <disc name>引导选项来代替通常的UEFI ubuntu。我正在使用GPT分区方案。

我最终发现,有效的解决方案是正确重新安装grub-efi-amd64。那么,我该怎么做呢?

PS:实际上,我成功地自行重新安装了GRUB2 EFI,并将在此处发布我的答案,因为我无法找到关于此的任何完整操作方法。


我的双重启动遇到了麻烦:Windows 10 / PCLinuxOS笔记本电脑。我以某种方式丢失了grub2加载程序或功能。在尝试了上述许多错误之后,我偶然发现了Grub2 Boot Rescue iso,将其刻录到cd并留在驱动器中。每次都要经历引导过程,这有点乏味,但至少可以正常工作。然后,我找到了Boot Repair Disk iso并将其刻录到DVD。在这一点上,我的工作确实很不稳定,所以这次我重新格式化并重新安装了Windows 10和Mint Sonya的所有内容。然后启动引导修复磁盘并安装Grub2 ov
Keith Krehbiel

Answers:


87
  • 在UEFI模式下使用实时USB / CD引导计算机。我有两个引导选项,<flash_drive>UEFI: <flash_drive>,第二个需要公开efi变量,/sys/firmware/efi/以便efibootmgr以后不会失败。使用第一个选项启动会给我以下错误:

    Fatal: Couldn't open either sysfs or procfs directories for accessing EFI variables.
    Try 'modprobe efivars' as root.
    

    modprobe efivars 没有为我工作。

  • chroot进入损坏的系统(类似于ubuntu grub2帮助,但具有efi特异性):

    sudo mount /dev/sda2 /mnt #sda2 is the root partition
    sudo mount /dev/sda1 /mnt/boot/efi #sda1 is the efi partition
    for i in /dev /dev/pts /proc /sys; do sudo mount -B $i /mnt$i; done
    sudo cp /etc/resolv.conf /mnt/etc/ #makes the network available after chrooting
    modprobe efivars # make sure this is loaded
    sudo chroot /mnt
    
  • 根据您的Linux发行版,您现在可以做不同的事情。

    • 对于Ubuntu / Debian

      apt-get install --reinstall grub-efi-amd64
      

      或者:

      apt-get install --reinstall grub-efi
      update-grub
      

      以上应该给你一个g头,但不是一个可启动的

    • 对于Fedora(最多16个,可能适用于其他人):

      yum reinstall grub-efi
      

      在以下命令中,您必须将sdX替换为具有要从其引导的EFI分区的设备。在中,--part Y您必须Y 将EFI分区号替换为(如中的/dev/sdXY)。

      efibootmgr -c --disk /dev/sdX --part Y
      efibootmgr -v # verify a new record called Linux is there
      
  • 现在,按Ctrl + D退出chroot,卸载所有内容并重新启动:

    for i in /sys /proc /dev/pts /dev; do sudo umount /mnt$i; done
    sudo umount /mnt/boot/efi #please do this. Corrupted efi partitions are not nice
    sudo umount /mnt
    sudo reboot
    

您可能需要对此进行调整(不同的分区表,单独的/ boot分区等),它可能不是唯一的选择,但这对我来说很好。

grml是用于固定物体的合适的实时系统。关于如何设置可启动的USB设备,还有一本详尽的指南,其中Mac部分实际上是最有用的(只需创建FAT32分区,复制文件,重新启动,完成)。


4
杜德!非常感谢!我的Lenovo X220重置后不想再启动,这激活了我,因为它激活了最新的软件包更新,并且同时看到我进行了BIOS重置,因为这可以解决3G卡的连接问题。此后,无论出于何种原因引导都变得不可能。直到我使用了您的指南。顺便说一句,您复制resolv.conf的部分对我不起作用,因为它是/run/resolvconf...(在Ubuntu 12.04中)的符号链接,相反,我只是用来在chroot环境中mount --bind /run /mnt/run挂载整个/run目录。
nem75

我以对Fedora 16的经验和对grml的引用扩展了答案。如果您可以审查并接受修改,我们将很高兴。
乔纳斯·谢弗(JonasSchäfer)2012年

1
在Ubuntu(至少适用于12.04)上,update-grub不会将最新的grub2映像复制到您的EFI分区,它只会更新grub.cfg。因此更好的方法是apt-get install --reinstall grub-efi(或grub-efi-amd64),这也将在最后调用update-grub。
13年

3
昨天保存了我的媒体播放器。300个互联网点给您。
Stefano Borini 2013年

2
运行后,update-grub我的/boot/efi文件夹仍然是空的(我已经创建了这个新分区)。只有在运行grub-install实际文件之后,才会将文件写入那里。该指南对我有所帮助(德语):wiki.ubuntuusers.de/EFI_Problembehebung
Philippe Gerber

8

作为第一种方法的潜在简化,仅使用实时CD的grub,就可以直接引导到硬盘上的系统中。使用xubuntu 13.10实时CD在xubuntu 13.10上进行了测试。

确保在BIOS中禁用了安全启动。插入实时CD并通过UEFI引导它。将显示CD的GRUB菜单。按“ c”进入命令行。

configfile (hd0,gpt1)/EFI/ubuntu/grub.cfg

如果您具有其他EFI系统分区,请修改上面的grub命令。

从硬盘启动系统后,应该足以在EFI系统分区上重新安装grub并通过grub-install在固件中注册它。

sudo grub-install

不起作用 configfile (hd0,gpt1)/EFI/ubuntu/grub.cfg什么也没做。发出此命令后如何引导?
Autodidact 2015年

3
哇。我没想到它会那么容易!这是一个答案的地狱!我运行的sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi不是上面建议的命令(但是上面的命令也可以工作,我不知道)。之后,您可以再次访问Linux操作系统。然后运行sudo update-grub,一切都应该可启动。
Zorawar

@SandeepDatta:您的efi目录可能位于其他磁盘/分区上。我的在/ dev / sdb1上,所以我跑了:configfile (hd1,gpt1)/EFI/ubuntu/grub.cfg。引导LiveCD并运行sudo gparted以找到您的efi分区。
Zorawar

5

与Maxine一样,我在BIOS中发现UEFI设置遭到损坏,并且计算机无法启动。

就我而言,这是一个联想ThinkServer RD430与Linux Mint的Debian和它似乎什么我做关于更新grub或者改变服务器中的任何硬盘驱动器会导致它无法启动。我的操作系统是通过USB安装的linuxmint-201403-mate-dvd-64bit。(请参阅下文,了解可能导致UEFI无法正常工作的事件的完整说明)

在ThinkServer TS140上执行完全相同的步骤不会导致UEFI失去理智甚至一次。看着RD430驱动程序页面,我的履历是两个版本。我以前从来没有更新过主板上的BIOS,所以当有新版本可用时,我不是一个自动更新的人。更新BIOS之后,上面的Maxine答案奏效了,只是稍有改变...

# efibootmgr -c --disk /dev/sdX --part Y
# efibootmgr -v
BootCurrent: 0004
Timeout: 1 seconds
BootOrder: 0002,0000,0003,0001,0004
Boot0000* linuxmint HD(1,800,1f4000,829f6cc9-5b17-479c-b3ea-61e43faecbf7)File(\EFI\linuxmint\grubx64.efi)
Boot0001* LMDE Linux Mint Debian    HD(1,800,15d505800,934c598c-fe3c-fd43-84a1-fa38e4f72552)File(\EFI\linuxmint\grubx64.efi)
Boot0002* Linux HD(1,800,1f4000,829f6cc9-5b17-479c-b3ea-61e43faecbf7)File(\elilo.efi)
Boot0003* UEFI: Built-in EFI Shell  Vendor(5023b95c-db26-429b-a648-bd47664c8012,)AMBO
Boot0004* UEFI: VerbatimSTORE N GO 1.00 ACPI(a0341d0,0)PCI(1a,0)USB(1,0)USB(4,0)HD(1,80,1d70780,00000000)AMBO
mint / # 

efibootmgr -c命令添加了两个条目00000002
Boot0002* Linux HD在引导顺序进入第一是不正确的
0000是正确的。

为了测试这一点,我尝试了引导而没有任何中断,这就是0002条目。不出所料,它没有用。因此,我重新启动服务器,按F12键,然后选择linuxmint。如所希望的那样,它确实引导至我的LMDE安装。

通过efibootmgr删除不需要的条目的方法是:

# efibootmgr -b 2 -B

我使用此命令删除了条目00010002。Option 0001来自我恢复操作系统的许多尝试中的最后一次。


UEFI笔记

如果您正在阅读本文,并且对UEFI感到沮丧,那么这里有一些注意事项和资源:
»引导至UEFI Shell类似于使用DOS Shell。
»英特尔为efi shell命令制作了PDF参考手册
» 我所见的Lenovo的UEFI_on_TS430文档是解释efi shell用法的唯一资源。
» 另一个UEFI Shell参考nPartition管理员指南
»您可以尝试通过导航到加载器并执行从efi shell引导至分区。
»UEFI希望磁盘具有GPT分区表,而不是msdos部件表。
»UEFI希望将磁盘上的第一个分区格式化为fat32或vfat。
»对于“常规”启动/EFI/boot,根目录中必须有一个目录bootx64.efi
»有些人将其grubx64.efi从安装位置复制到/EFI/boot/bootx64.efi该位置,这种作弊对他们有用。
»每次进行grub更改时,请efibootmgr -v在前后使用以确保重新启动正常。


我的RD430经验

在过去的一周中,我已经重新安装了OS 10次以上,以尝试解决此问题并设置服务器。我的配置是此RAID控制器在PCIe 2.0插槽中的SSD上,上面装有LMDE。带有6个3TB驱动器的第二个PCIe 3.0插槽中的AOC-S3008L-L8i RAID控制器(重新刷新为IT模式)。内存:12GB ECC(3x 4GB)

以下是我会导致系统无法启动的
更改:»更改S3008L-L8i pci插槽(不留SSD +卡)。
»禁用板载控制器的LSi软件raid bios提示
»将旧的HighPoint RocketRaid卡添加到开放的PCIe插槽中。
»进行更改/etc/default/grub,然后运行update-grub
也许还grub-install需要运行?


我对UEFi感到非常沮丧。我已经安装了带有BIOS的Linux,但是很难使其与UEFi一起工作并进行重新压缩
Suici Doga

3

我会投票赞成,但显然我在SuperUser上没有足够的代表。经过数天有效但无济于事的克隆战斗之后,我终于找到了解决方案,对此我感到很高兴。我认为这都与UEFI和某种“安全启动”机制有关。

我正在离线工作,因此无法选择apt-get。我所做的就是将Ubuntu桌面放在USB记忆棒上,然后将grub-efigrub-efi-amd64软件包添加到USB记忆棒的根目录(grub-efi_1.99〜rc1-13ubuntu3_amd64.deb和grub-efi-amd64_1.99〜rc1-13ubuntu3_amd64.deb Ubuntu 11.04-进行适当更改以适合发行版和体系结构),并将以下内容也放入USB记忆棒中的脚本中:

#! /bin/bash
sudo mount /dev/sda2 /mnt
sudo mount /dev/sda1 /mnt/boot/efi
dir=`dirname $0`
sudo cp $dir/grub-efi*.deb /mnt/tmp
for i in /dev /dev/pts /proc /sys; do sudo mount -B $i /mnt$i; done
sudo chroot /mnt /bin/sh -c "dpkg -i /tmp/grub-efi*.deb"
sudo shutdown -r now

启动Live USB记忆棒,打开一个终端,运行命令,这项工作很不错!唯一偶尔出现的问题是UEFI有时会降低到HDD下方的引导优先级顺序,此时您需要进入BIOS并更改引导顺序以停止尝试(并尝试失败)SATA: drive

您也可以使用dpkg-reconfigure代替dpkg -i,但这会询问几个引导加载程序问题。

[edit]我也没有足够的评论意见,所以我认为对回复的评论才是答复。


欢迎登机!实际上,您需要15分才能投票,50分才能发表评论(请参阅superuser.com/privileges),只是四处寻找可以回答的简单问题,您就可以了,这就是stackexchange表示感谢的方式:)注意脚本不会在关机之前不要卸载任何东西。很高兴它有所帮助。
Maxime R.

混乱更多是因为我在其他相关站点上也有访问权限。忘了我是这方面的新手。Linux通常会在关机时卸载,并且chroot完成后会返回命令,因此我认为这不会引起问题。我确实发现,如果您没有UEFI启动实时发行版,它也不会中止,但是测试是否sudo chroot /mnt /bin/sh -c "dpkg -i /tmp/grub-efi*.deb" && sudo shutdown -r now给出正确的行为并不是当务之急。
IBBoard'3

1

在Lenovo Yoga 2 Pro的32位Ubuntu 14.10上,我更改为UEFI引导,如下所示:

  • 创建文件夹

    sudo su
    mkdir /boot/efi
    
  • 将“ EFI系统”分区挂载到 /etc/fstab

    fdisk -l|grep EFI
    

    这表明: /dev/sda2 2050048 2582527 532480 260M EFI System

    echo "/dev/sda2 /boot/efi   vfat    defaults,sync   0   0">>/etc/fstab
    

    挂载该分区

    mount /boot/efi
    
  • 安装grub-efi-amd64-bin和卸载grub-efi-ia32-bin

    aptitude install grub-efi-amd64-bin grub-efi-ia32-bin_
    
    grub-install --target=x86_64-efi
    
  • 以efi模式重启Ubuntu

    update-grub
    
  • 如果测试靴子罚款,然后我安装grub-efi-amd64和卸载grub-pc grub-gfxpayload-lists

    aptitude install grub-efi-amd64 grub-pc_ grub-gfxpayload-lists_
    

当询问时,我选择不删除/ boot。


也许我把它弄复杂了,但这样做很好:

apt-get install --reinstall grub-efi
update-grub

0

此项更多地类似于准备您的计算机来重新安装efi项。这也是在内部介质(SSD,HDD)上安装系统之后创建应急磁盘的一种有效而简单的方法。

使用Linux Mint Tara(一种与Ubuntu Bionic Beaver密切相关的Linux变体),该方法使我的安装不方便,并使其在以后得以保存。出现这种情况是因为我希望具有持久性的实时USB,并且由于安装Unetbootin之类的实用程序进行持久性安装的时间与全新安装大致相同,因此我只是使用相同的实时发行版在USB上进行安装,用于将操作系统安装在内部SSD上。

当然,这都不是RAID或任何其他专门的设置,但是它确实需要在USB驱动器上准备好卷分区,并且需要使用发行版的可用方法在该USB上进行安装,从而避免了内部驱动器在单个磁盘上进行安装。分区的根(/)挂载。

这是新的grub安装与内部驱动器缠在一起的地方。当我重新引导至USB时,内部UEFI grub条目似乎已消失,在尝试使用BIOS菜单中的条目选择驱动器时仅留下grub菜单。

相反,从USB引导显示发行版的方法已生成了现成的grub菜单,其中包含/ dev / sda2的列表,该分区包含/ boot / efi挂载。在大多数主内部驱动器安装中,分区的grub名称为hd0,gpt1。

进入“高级”阶段,可以进行多个内核救援。从那里运行grub实用程序,然后正常启动。

从这一点开始,在以前无法访问的内部驱动器上运行OS,拔下USB,然后运行sudo grub-install

在没有USB的情况下重新启动时,您应该可以重新进入。此时,USB已配置为将内部驱动器启动到正常或救援模式,并且该驱动器具有其自己的菜单。

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.