恢复EFI启动分区

恢复EFI启动分区

我三重启动 Ubuntu、Debian 和 Fedora。当我从 liveCD 安装 Fedora 时,我很兴奋并继续点击下一步,没有意识到我安装的不是 GPT,而是 LVM。

执行此操作后,我无法从硬盘启动。 EFI 菜单甚至没有将我的硬盘显示为启动选项(尽管它在硬件中检测到它)。

我目前有一个解决方法,其工作方式很奇怪,我使用 liveboot USB (Yumi) 并选择从硬盘驱动器运行 Linux,并且我可以在计算机上的发行版之间进行选择。但是我需要这个 USB 来引导到发行版。

我不确定如何恢复我的系统。

我的电脑安装了 Ubuntu,华硕 XC200(上网本)。我打电话给华硕技术支持,他们想重新成像..我不会轻易放弃。

我的/dev/sda1(fat32,带有启动标志)EFI上有一个 Ubuntu 目录(假设 Ubuntu 正在加载 GRUB> 链式加载 Debian)。

我该如何开始解决这个问题?人们需要什么信息?

(我没有 CD/DVD 播放器)

注意与efibootmgr:

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

当我跑步时,modprobeefivars 没有任何反应。


更新/到目前为止我尝试过的事情:


我尝试了下面发布的答案[1],[2] 目前,很好的研究,在大多数情况下我相信它们会起作用。然而,在我的情况下他们却没有。

当前工具

磁盘--

  • Kali 丢失了额外的闪存驱动器
  • &Debian
  • & Ubuntu 14.04
  • 仍然有 Yumi 和 Ubuntu 12.04。

最近采取的步骤(在以下答案之后):

  • 运行 Ubuntu
  • /dev/sda除FAT分区外已擦除(GPT/ESP)
  • 尝试安装 Ubuntu,但在我的 GPT 分区上使用 grub 和 EFI 时没有出现问题
  • fsck以防万一使用(很好)
  • 使用parted/gparted擦除所有分区,然后制作GPT和其他分区(在ESP上设置启动标志)
  • 再次尝试安装(没有成功,同样的错误)
  • 分区看起来很有趣,(缺少空间)...划伤了头
  • 擦除分区/为 LiveUSB 创建分区到硬盘
  • 用于dd写入LiveUSB /dev/sda4(相信这是数字)
  • 这个启动了,但需要我的 USB 就位,所以没用
  • 尝试使用gfdisk,让我重新启动丢失的会话
  • 分割我的 LiveUSB
  • 下载 Arch .iso,并将dd其复制到第二个 USB 分区 (LiveUSB)
  • 保持 Ubuntu LiveUSB 会话正常运行,完成部分安装(在实时会话中达到 Arch 的 chroot)
  • 工作正常时遇到问题
  • Ran Arch Live,完成安装(切换和分区的初始创建比在parted/gparted上效果更好)
  • 使用的指示syslinux(来自 Arch 安装指南)
  • 基本上将我所有的 efi 重写为全新的
  • 在 Arch 上运行良好
  • 不确定是否/如何回答我自己的问题

答案1

完全忘记grub——这只不过是一种干扰。它甚至不是靴子-装载机不再了;在 EFI 系统上,引导加载程序内置于固件中。grub只是一个引导-经理在这种情况下——而且几乎绝对是完全多余的。更重要的是 - 它可能是grub安装首先破坏了一切。

这些是您需要的东西:

  1. FAT 格式的 GPT 分区类型EF00
  2. 位于该分区上的 UEFI 兼容系统内核(如linux内核)
  3. 保存到 UEFI 环境变量的系统内核的路径(通常Boot0000-{UUID},但这也取决于 的值BootOrder-{UUID}

严格来说,仅此而已。您只需使用gdisk命令efibootmgr行工具即可实现上述设置。

实际上,启动管理器有道理 - 但grub它是所有可用方法中最复杂的。正如其他地方推荐的那样,rEFInd它可能是其中最好的。

我之前写过一个分步教程,介绍如何分区、格式化和设置rEFInd启用 EFI 的系统分区这里这里这也是关于这个主题的另一个答案,您可能会在其中找到关于我在这里所做的断言的进一步解释。

答案2

当我重新安装 ESP 和 grub 时,我使用了 rEFInd:http://sourceforge.net/projects/refind/files/?source=navbar(闪存驱动器变体)启动到我的发行版。

启动后将 ESP 挂载到 /boot/efi

mount -t vfat /dev/yourESPdev /boot/efi

然后您应该能够使用此 EFI 目录重新安装 grub。

grub-install --efi-directory=/boot/efi

这应该会恢复 grub。如果您的 ESP 被删除并且您必须重新创建它,那么您将必须在 /etc/fstab 中更新它的 UUID。用于blkid列出您设备的 UUID。在 /etc/fstab 中更新设备的 UUID 后,运行update-grub.

您可能还需要为 grub 创建一个新的 efi 条目。使用类似以下内容的东西:

efibootmgr -c -d /dev/yourHD -p ESP_PartionNumber -L "Boot Title" -l '\\EFI\\DIST\\grubx64.efi' -u "root=/dev/yourRootFS"

其中 ESP_PartitionNumber 是硬盘上 ESP 的编号(/dev/sda1 为 1),DIST 是一个文件夹,其名称特定于您的发行版,除非您创建了它。该文件夹位于 /boot/efi/EFI 中。 Boot Title 就是您想要的 EFI 条目的标题。

我重新安装 ESP 已经有一段时间了,所以我无法再次测试这些命令。您可能需要更多参数,但我很确定这就是全部。

答案3

  • 取决于您启动的发行版:

    • 为了Ubuntu/Debian:

      apt-get install --reinstall grub-efi-amd64
      
      or alternatively: 
      apt-get install --reinstall grub-efi
      update-grub
      
      should the above give you a grub, but not a bootable one
      
    • 为了软呢帽(最多 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,请卸载所有内容并重新启动:

      对于 /sys /proc /dev/pts /dev 中的 i;执行 sudo umount /mnt$i;完成 sudo umount /mnt/boot/efi #请执行此操作。损坏的 efi 分区不好 sudo umount /mnt sudo restart

您可能需要根据您的需求进行调整

来源:

答案4

这在谷歌上排名很高,但所有其他答案似乎都只是部分完整,至少对于像我这样的人来说是这样。

我的电脑现在已经两次(而且还会有更多次,知道我的运气)失去了我的 Debian 8.2 安装的存在意识。这可能不知何故,是由我的 UEFI 固件中的错误和/或我使用了正式不存在的 SATA 插槽引起的...或者可能某些程序正在干扰分区,或者 SSD 本身值得怀疑...我不知道。

不管怎样,第一次,我太早地完成了所有设置 - 我只是完全重新安装。这解决了它。但确实有点大刀阔斧的感觉。

这一次,这不是一个选择。我在配置上投入了太多时间!

今天,我更多的诊断方法表明(至少这一次)原因不是——或者不是仅有的- 固件“忘记”了 EFI 分区的存在 - 但是说分区不知何故损坏了。再说一次,我无法解释这一点:它可能是一个劣质的固件,不相关的文件系统恐怖,或者完全是其他东西。我想我只需要处理它。

症状是:

  • 我的 UEFI 突然完全不知道debianEFI 启动分区的存在
  • 现在, handyefibootmgr将磁盘报告为旧的 BIOS 类型,而不是 EFI
  • 我不能像mount从那时/boot/efi起...
  • ...可信者fsck抱怨引导扇区与意图/备份不同以及损坏的根 FAT 节点(dat 行话)或其他东西
  • 总的来说,几乎所有东西都塞满了,这就是我所说的。

因此,这是我为解决此问题所做的完整且合理的列表(现在?):

  • 下载了令人兴奋的改装@http://refit.sourceforge.net/
  • 使用了高质量的 Win32 Disk Imager 又名“无名续集”@http://sourceforge.net/projects/win32diskimager/在借来的 PC 上将 rEFIT 写入 USB 笔式驱动器
  • 这带来了一个非常可喜的消息,我的/分区仍然完好无损
  • 启动所述分区
  • 重新格式化错误的 EFI 分区mkdosfs -F 32 /dev/sdXN- 替换为您自己的分区KNAME- 并在除短暂运行时情况之外的任何情况下避免使用它们,因为如果磁盘被打乱,它们会带来麻烦
  • 将 GRUB 重新安装到新格式化的分区经过grub-install /dev/sdXN
  • /etc/fstab从我复活的 EFI 分区重新启动 - 陷入救援模式,因为它仍然由旧的 UUID归档,导致systemd依赖项失败
  • 重写/etc/fstab以引用/dev/disk/by-id/ata-EVILCORP-C3PO-partN所有磁盘的类型路径- 因为 (A)KNAME有风险,并且 (B) 如果你突然需要重新格式化,UUID 会发生变化,就像可怜的我一样......
  • 神奇地恢复了正常可启动 Debian 的功能。目前。

正如他们所说,“直到下一次”——也许是字面上的意思。也许这会帮助那些在借来的故障电脑上疯狂搜索谷歌的其他迷失的灵魂。

相关内容