如何注册/转换恢复的Linux操作系统(BIOS)到EFI启动


1

首先让我解释一下我目前的设置。我最近擦洗了两个主驱动器并将它们转换为GUID。在主驱动器(我的情况下是sdb)上,我在/ dev / sdb1上创建了一个EFI启动分区(ESP)。我有其他分区,我已经完成了mint17.1的全新安装,很好地将自己设置为通过EFI然后GRUB2启动。因此,任何新安装都无需在ESP中使用efi引导程序进行注册。

现在只有我清楚地了解这个过程!几个小时的UEFI稍后阅读,我仍然没有一个简单清晰的程序图片,以及如何自己手动完成这项工作,最好的工具是什么?我被“UEFI / Grub2:我梦魇的故事”这样的帖子所激发。

所以问题:

在我的第二个驱动器的第一个分区(sda1)上,我已经恢复了一份   在我开始这条路之前安装了mint17(ubuntu14.04)。它是   设置启动遗产。如何将其转换为通过EFI启动   将它注册到引导装载程序(带有.efi的ESP中的文件夹)?

在另一个分区上安装工作意味着我可以进行任何我需要的更改,而无需从USB记忆棒启动。

以下是我认为我能找到的最有帮助的帖子

https://askubuntu.com/questions/510856/how-to-boot-load-the-kernel-using-efi-stub-efistub-loader

如何重新安装GRUB2 EFI?

最好的帮助将是一步一步的程序 。我最好的一般概念是如何编辑fstab加载efi分区,复制(核心)文件,chroot?到有问题的分区(OS)并运行grub2以使其与EFI文件夹一起做事情?听到我的失落会很有趣。 :)。

一个好的完整答案对社区非常有用,因为虽然我现在对UEFI启动了解很多,但“秘密”似乎仍然是如何使用工具来操纵它。我不能是唯一不确定的人吗?

其次,当我问,如何更改EFI启动菜单中的条目名称。我想也许就像在ESP中的EFI目录中更改目录名一样简单,但是......没有。所以必须有一些工具来操作那些我认为包含要在EFI菜单中使用的操作系统名称的.efi文件?

BTW我做了一个小分区(1gb)用作Grub链加载器。这是更好的解决方案吗?我不介意多重启动的EFI,如果我需要,我已经加载了一个菜单的refind。这篇帖子让我考虑到这一点并构建一个分区,以防我想尝试一下。 http://devil-detail.blogspot.com/2013/07/install-grub2-on-gpt-disk-dedicated-partition.html

是的魔鬼在细节中(请帮助一些)


不知道是谁投了我的问题,但这是一个很好的问题,即使罗德也没有明确回答实际细节。下面我已经用很多痛苦和时间回答了我自己的问题,所以如果你发现这篇文章很有用,请提出我的问题和答案。
DKebler

Answers:


2

首先,一些基础......

在BIOS或EFI下,启动计算机涉及两个关键的程序类:

  • 启动管理器 - 该程序提供菜单或以其他方式使用户能够选择要引导的OS。
  • 引导加载程序 - 该程序将OS内核加载到内存中并启动它运行。

某些程序,包括GRUB和您在BIOS下可能听说过的大多数其他Linux引导加载程序,实际上都执行这两个功能。因此,Linux用户在语言上略显草率,在引用任何类型的程序时都使用“引导加载程序”。但是,理解这种区别对EFI很重要,因为有些EFI程序只能实现一个功能而不能实现另一个功能。此外,EFI还提供内置的启动管理器。不幸的是,EFI规范对于内置启动管理器应该提供什么类型的用户界面的主题是静音的。结果是它在某些机器上几乎没用,在其他机器上很笨拙,而且在最好的机器上几乎不能容忍。

可以通过编辑EFI变量从OS控制内置EFI启动管理器。在Linux中,此任务由 efibootmgr 实用程序,这是一个典型的简单Linux命令行工具。因此,它不是非常用户友好。启动计算机时,通常按Esc或功能键访问启动管理器,但详细信息因机器而异。

稍微换档,GRUB的设计与BIOS和EFI系统的工作方式大致相同。在BIOS下,GRUB将其自身的一部分安装到主引导记录(MBR),这是硬盘上的第一个扇区。 BIOS是硬编码的,用于在MBR中执行代码,因此GRUB在启动时控制计算机,显示菜单,加载内核或将引导过程重定向到存储在别处的另一个引导加载程序。在EFI下,过程有点不同:GRUB使用EFI的NVRAM注册自己(在安装时通过 efibootmgr,即使你没有自己输入命令)。然后,EFI的启动管理器启动GRUB,它会显示一个菜单并启动内核或重定向到另一个启动加载程序。

BIOS和EFI之间的另一个关键区别是BIOS引导加载程序全部或部分存储在MBR和磁盘的其他“隐藏”部分中。 EFI引导加载程序和引导管理器(除了内置的引导管理器)作为普通文件存储在ESP上。这使得EFI更容易管理 - 至少在理论上和一旦你理解它。

现在,所有这些理论都可以解决,我可以更直接地解决您的问题:大部分Linux不关心启动模式,因此将现有BIOS模式安装转换为以EFI模式启动需要安装EFI启动加载程序对于Linux。实际上有几个这样的程序可用。您直接或间接地提到了其中两个,但还有其他人:

  • GRUB 2 - 这是大多数发行版的默认设置,因此通常很容易进行全新安装。 OTOH,这是一个相当神秘,很难手动工作。在BIOS和EFI下,它几乎可以从任何地方读取内核。
  • GRUB遗产 - 这个引导加载程序在EFI下没有正式工作,但是Fedora发布了一个经过大量修补的版本。不再维护此变体。与GRUB 2一样,它可以从大多数Linux文件系统加载内核。
  • ELILO - 此引导加载程序是在用于BIOS的LILO引导加载程序之后建模的。如果你习惯了LILO,它很容易配置。它要求您的内核存储在ESP上。它不再被积极开发,但它仍然可以完成工作。
  • SYSLINUX - 此引导加载程序与ELILO大致类似,并且与同名的BIOS引导加载程序相关。与ELILO一样,它需要将您的内核存储在ESP中。
  • EFI存根加载程序 - Linux内核本身包含一个EFI引导加载程序,因此您可以使用EFI的内置引导管理器和直接向其注册的内核来引导系统。因此,以这种方式直接从EFI的启动管理器启动内核需要将内核存储在ESP(或至少在FAT分区上,或者有时在Mac上的HFS +上)。您链接的其中一个帖子是关于这样的配置,但是这种类型的设置并不常见,并且不是我推荐的,因为它不灵活。

除了这些引导加载程序之外,还有一些专用的EFI引导管理器可以帮助扩展您的选项:

  • gummiboot - 这个程序是一个简单的文本模式启动管理器,可以启动任何前面的启动加载器,包括一个Linux内核;但是,它只能将引导过程重定向到存储在其自己的分区上的程序,该分区通常是ESP。因此,要使用gummiboot直接启动内核(通过EFI存根支持),需要将内核存储在ESP中。
  • 改装 - 这个程序起源于Mac,并且在该平台上仍然很受欢迎,尽管rEFIt已被放弃多年。它可以将引导过程重定向到EFI可以读取的任何分区,而rEFIt包含一些EFI驱动程序,使EFI能够读取ext2 / 3fs或ReiserFS卷。不同寻常的是,rEFIt在启动时会主动扫描引导加载程序,这使它在多引导环境中非常适应。但是,它不是很擅长启动Linux内核,因为rEFIt无法为内核传递他们通常需要的自定义选项才能正常运行。
  • rEFInd - 这是我自己的rEFIt分支。它为ext4fs,Btrfs,NTFS,HFS +和ISO-9660添加了驱动程序;它可以将选项传递给Linux内核。因此,rEFInd与EFI存根加载器的组合在内核位置方面提供了GRUB的大部分灵活性。 rEFInd还保留了rEFIt对引导选项的主动扫描,这可以大大减少维护安装了多个Linux发行版的系统所涉及的毛发;当您在任何发行版中安装(或删除)新内核时,rEFInd会在您下次启动时获取更改。

我有点不清楚你目前的设置是什么,但我得到的印象是你至少有两个Linux安装,包括至少一个以前在BIOS模式下启动的安装。如果是这样,您可能需要考虑使用rEFInd。如果它是作为默认启动程序安装的,它将主动扫描系统中的内核并在每次启动时创建一个菜单。您需要为包含内核的文件系统安装EFI文件系统驱动程序,但安装脚本可能会为您处理此详细信息。您可能还需要创建名为的配置文件 /boot/refind_linux.conf 对于每个分发;此文件包含静态引导选项。 (但这有时是不必要的;这取决于您的分区布局和特定于分发的需求。)如果在Linux下使用其安装脚本安装rEFInd, refind_linux.conf 将自动为该分发创建,但您可能需要为其他分发创建其等效项。 rEFInd文档包括 关于启动Linux的页面 这可以帮助你完成所有这些。

如果您不想使用rEFInd,您应该能够获得一个发行版的GRUB来获取其他安装的内核。如果您可以通过GRUB启动一个分发,则运行 update-grub (在Ubuntu或类似的发行版上)或 grub-mkconfig -o /boot/grub/grub.cfg 应该做的工作。 (但您可能需要更改输出路径; grub.cfg 可能存储在某些发行版的其他位置。)问题是,如果在第二个发行版上更新内核时,您需要启动第一个并重新构建GRUB配置文件以使GRUB识别新内核。另一种方法是安装GRUB两次,每次分发一次。然后,您可以使用EFI的启动管理器选择要启动的GRUB,或者为每个GRUB配置另一个GRUB的条目。

如您所见,您有很多选择。有关此主题的更多信息,请参阅 我的用于Linux的EFI启动加载器的Web页面。

我意识到这不是你想要的循序渐进的过程,但是理解事物的工作原理和你自己的精确设置的知识通常比任何类型的“食谱”程序都要好,特别是当程序是所以依赖于进入流程的配置细节。


罗德,你的网站是我已经花了几个小时阅读的网站。谢谢。我已经安装了rEFInd!所以我很高兴你选择帮助我。好的,现在我明白它会自动找到核心并将它们添加到菜单中。现在到了噩梦。我看到了副本
DKebler

1

经过一段时间的持久性后,我逐步提出了从BIOS-Legacy迁移到EFI bboting的可行解决方案,所以我现在回答我自己的问题。

这仅适用于启动unbuntu(或某种风格)的多个副本,并假设您从头开始使用新的或改变用途的驱动器,并且您的主板是相当新的(我的是2014年份)。如果您正在移动当前的bios / mbr安装而不是进行新安装,我建议使用qt-fsarchiver使用fsarchiver创建分区映像。这假设您当前安装的Linux是UEFI能力的。 ubunutu(和风味)的最新版本是UEFI能力的。

随着我的一步一步,我现在已经镜像和测试我的主要操作系统的副本安装在同一台机器上,所有这些都可以从refind加载!

一步步

  • 用一些linux的风格创建一个持久的UEFI USB记忆棒(见下面的注释)

  • 作为UEFI启动,包括输入您的cmos设置并确保您的设置将启动UEFI。您应该看到您的USB通常按制造商名称列出。最好只关闭任何传统的启动选项,这样你就可以肯定了。当它第一次启动时,它会将大多数OS文件移动到casper-rw分区并将其作为文件系统挂载。如果您在之前放置任何内容,则必须查看/ media文件夹才能找到它。

  • 从引导的棒使用Gparted

    一个。在你的主要驱动器上创建一个新的GPT分区表(擦洗驱动器!)

    湾现在为ESP制作分区,256mb或更多,格式化Fat32,将其标记为ESP。标记它是可引导的(它将标记为EFI可引导,因为它现在是GPT驱动器)

  • 安装rEFInd。 http://www.rodsbooks.com/refind/ 有三种方法(deb包,脚本或手册)我建议下载最新的bin.zip存档。解压缩并从unarchived refind目录中运行安装脚本。

sudo ./install.sh

它将找到并安装新的ESP / EFI分区。如果它抱怨没有正确运行efibootmgr你可能需要安装它。我做到了。然后只需重新运行安装脚本。

sudo apt-get install efibootmgr

最后,ESP / EFI仍将安装在boot / efi上,你需要复制在refind目录(同一个相对位置)的zip存档内找到的drivers_x64目录(我的是64位机器)。

  • 现在取下你的手杖并尝试重新启动。输入Cmos并查看refind现在是否是要引导的可用UEFI设备之一。我坚持后把它做到了第二位。这样当棒子从我开始从棍子开始,否则从硬盘ESP上的refind。

  • 现在你可以在另一个分区上安装一个(efi)操作系统,比如你刚刚制作的棒上的Mint。在此安装的/ boot目录中可能包含refind_linux.conf文件,该文件可以自定义。我选择重命名(删除它)。它不一定是必需的,如果配置错误可能会导致引导问题。我建议您选择清除分区标签作为refind拾取它们并在菜单中使用它们。它将避免必须自定义EFI / refind目录中的主refind.conf文件。我选择只取消注释/更改这些行。有关rEFIfind的所有内容,请参阅Rod的优秀文档。

    • scan_delay 5
    • 超时10
    • default_selection“你的分区标签”

笔记:

制作USB记忆棒

  • 使用4gb min stick

  • 使用gparted在棒上设置GPT表,创建一个2gb分区并将其格式化为fat32,将其标记为“boot”,设置引导标志(它将是EFI)

  • 使用“casper-rw”标签对其余ext4进行分区/格式化。

  • 安装一个efi能力iso(我用linux mint 17.1)和“boot”分区并复制iso的内容。

  • 在USB记忆棒上编辑boot / grub / grub.cfg,编辑第一个引导节并添加选项“persistent”,如下所示:

linux /casper/vmlinuz file=/cdrom/preseed/linuxmint.seed boot=casper iso-scan/filename=${iso_path} quiet splash persistent -- http://shallowsky.com/blog/linux/install/ubuntu-persistent-live-cd.html


虽然你已经安装了我,但我可能会将此文本与此帖子的URL一起剪切并粘贴到文本文件中并将其保存在那里。


关于Mint的一个令人恼火的事情是,如果没有在笔记本电脑上,它仍将加载笔记本电脑显示器,因此你无法“看到”任何东西。要修复此问题,请右键单击打开的终端或使用cntrl-alt-t。然后运行“肉桂设置”转到显示设置并关闭笔记本电脑显示屏并使主显示屏成为默认设置。


之后,一旦USB启动,我也安装qtfsarchiver,这样我就可以用GUI恢复我的fsarchiver档案。

如果将fsarchiver存档还原到分区,则需要在还原后(在gparted中)请求新的uuid并相应地编辑fstab以及删除/修复/ boot目录中的任何refind_linux.conf。


更新:从缺少的refind菜单中恢复

我想出了一个快速恢复(假设您准备好了USB闪存EFI可引导棒)。

注:如果您决定使用refind ppa来保持当前每次更新时都找到的电流,那么您将失去配置并因此启动。因此,我建议您在准备完成以下步骤时仅手动升级。


修复丢失的主板NVRAM设置(固件不再​​将REFIND列为可启动选项)

<user> ==您当前的登录用户

启动到USB记忆棒。创建一个恢复目录(在桌面上)并在其中打开一个终端。

  1. 将您的efi(esp)分区(sdxx)挂载到/ media // EFI / boot / efi并制作efi / esp分区的备份副本

sudo mount /dev/sdxx /media/<user>/EFI/boot/efi cp -R /media/<user>/EFI/boot/efi efi-copy-xx-xx-201x

  1. 检查你是否有最新的refind bin.zip。如果没有下载(从sourceforge并解压缩到你的refind引导恢复文件夹

  2. CD进入最新的refind提取目录并安装(.10之前的版本只使用install.sh)

sudo ./refind-install --root /media/<user>/EFI/boot/efi

如果它抱怨没有正确运行efibootmgr你可能需要安装它。我做到了。然后只需重新运行安装脚本。

sudo apt-get install efibootmgr

那应该是它。你现在应该删除usb闪存棒并重启,你的refind引导菜单应该回来了。


您好DKebler,因为您似乎找到了答案(您可以接受),您是否可以删除您的其他“答案”(看起来像评论/补充),因为答案部分仅用于答案。
bummi
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.