一段时间以来,我收到的关于安装和维护Linux的UEFI固件和EFI引导的请求量缓慢而稳定。由于我在最近的一篇关于在新笔记本电脑上安装Linux的帖子中发表了一个随意的评论,因此销量大增。
因此,在本文中,我将回顾并解释一些我认为是UEFI固件和Linux系统最重要的方面。我希望这篇文章比较简短,但是一旦我开始工作,您将一无所知...因此您可能想在开始阅读之前先喝杯咖啡。
首先,我在这里关注的UEFI固件的特定方面是引导顺序以及如何在Linux中使用它。UEFI(EFI)的功能远远不止这些,但是我在这里不做任何处理。
我要看的是引导顺序与以前的标准有何不同,以及如何为Linux安装配置和管理它。我可能在本文中互换使用“ EFI”和“ UEFI”这两个术语;通常,这当然是不正确的,但是就我所写的内容而言,它们或多或少是同一件事。
在EFI之前,几乎所有PC系统的标准启动过程都称为“ MBR”,用于主启动记录。今天,您可能会听说它被称为“传统启动”。此过程取决于使用磁盘上的第一个物理块来保存引导计算机所需的一些信息(因此称为“主引导记录”);具体来说,它包含可以找到实际引导加载程序的磁盘地址,以及定义磁盘布局的分区表。使用此信息,PC固件可以找到并执行引导加载程序,然后引导加载程序将启动计算机并运行操作系统。
这个系统有许多相当明显的弱点和缺点。最大的问题之一是,每个物理磁盘驱动器上只能有一个可引导对象(至少就固件引导而言)。另一个问题是,如果磁盘上的第一个扇区以某种方式损坏了,那么您将陷入严重麻烦。
随着时间的流逝,作为可扩展固件接口的一部分,开发了一种新的引导配置方法。EFI不在桌面上存储关键的引导配置信息,而是在桌面上使用专用的“ EFI引导分区”。这是一个完全正常的标准磁盘分区,与可用于保存操作系统或系统恢复数据的分区相同。
唯一的要求是将其格式化为FAT格式,并且应该设置引导分区和esp分区标志(esp代表EFI系统分区)。然后,引导所需的特定数据和程序将保留在此分区上的目录中,通常保留在命名为指示其用途的目录中。所以,如果你有Windows系统,你会发现通常称为目录“引导”和“微软” ,也许一个命名为硬件,如HP的制造商。如果您使用的是Linux系统,则将根据所使用的特定Linux发行版找到名为opensuse,debian,ubuntu或其他目录的目录。
到目前为止,从描述中应该显而易见的是,使用EFI引导配置,完全有可能在单个磁盘驱动器上具有多个引导对象。
在进一步介绍之前,我应该明确指出,如果您将Linux安装为PC上的唯一操作系统,则无需详细了解所有这些配置信息。安装程序应注意设置所有这一切,包括创建EFI引导分区(或使用现有的EFI引导分区),并进一步配置系统引导列表,以便您安装的任何系统都成为默认引导目标。
如果您要购买一台带有UEFI固件的全新计算机,并使用任何当前的主要Linux发行版本从头开始加载它,则所有这些都将被设置,配置和运行,就像您购买预先加载了新版计算机的计算机一样Windows(或使用Windows从头开始加载计算机时)。只有当您想要拥有多个可启动操作系统时,尤其是当您希望在同一台计算机上同时拥有Linux和Windows时,事情可能会变得更加复杂。
这种“多重引导”系统引起的问题通常与正确定义引导优先级列表有关。
当您购买一台装有Windows的新计算机时,此列表通常包括主磁盘上的Windows引导加载程序,然后可能包括其他一些外围设备,例如USB,网络接口等。在此类计算机上将Windows与Windows一起安装Linux时,安装程序会将必要的信息添加到EFI引导分区中,但是如果引导优先级列表未更改,则在安装后重新引导系统时,它将简单地再次引导Windows,并且您可能会认为安装无效。
有多种方法可以修改此引导优先级列表,但是确切地知道哪些可用以及它们是否工作或如何工作取决于您所使用的系统的固件,这会使事情变得非常混乱。UEFI固件的实现与PC制造商的数量几乎一样多,并且制造商在此固件的细节方面展现出了极大的创造力。
首先,在最简单的情况下,Linux附带有一个名为efibootmgr的软件实用程序,可用于修改,添加或删除启动优先级列表。如果该实用程序正常工作,并且所做的更改在系统上是永久的,那么您将没有其他问题要处理,并且在安装后它将启动Linux,您会很高兴。不幸的是,尽管有时候是这种情况,但事实并非如此。最常见的原因是软件实用程序所做的更改实际上并未由系统BIOS永久存储,因此,在重新引导计算机时,引导优先级列表将恢复为以前的状态,这通常意味着Windows将再次引导。
修改启动优先级列表的另一种常用方法是通过计算机BIOS配置程序。对于每个制造商,如何执行此操作的细节都不相同,但是一般过程大致相同。首先,您必须在系统开机(POST)时按BIOS配置键(通常为F2,但并非总是如此)。然后从BIOS配置菜单中选择Boot(引导)项,这将使您进入以优先顺序显示的引导目标列表。然后,您需要修改该列表;有时,可以通过通常的F5 / F6上/下键过程直接在该屏幕上完成此操作,有时您需要更深一层地进行操作。希望我可以提供更具体,详细的信息,
我已经看到了一些罕见的系统案例,其中这些方法都不起作用,或者至少它们似乎不是永久性的,并且系统不断恢复引导Windows的状态。同样,在这种情况下有两种处理方法。第一种是在POST(开机)过程中只需按下“启动选择”键。究竟是哪个键有所不同,我已经看到它是F12,F9,Esc,可能还有一个或两个。无论结果是哪个键,在POST期间单击它时,您都应该获得在EFI引导优先级列表中定义的可引导对象的列表,因此,假设您的Linux安装有效,您应该会在此处看到它。我知道有人对这种解决方案感到满意,他们会以这种方式使用计算机,并且每次想要引导Linux时都必须按boot select。
另一种方法是实际修改EFI引导分区中的文件,以使(不可更改的)Windows引导过程实际引导Linux。这涉及用Linux文件grubx64.efi覆盖Windows文件bootmgfw.efi。我已经这样做了,尤其是在EFI引导的初期,它可以工作,但是我强烈建议您尝试时要非常小心,并确保保留原始bootmgfw.efi文件的副本。最后,作为最后一个(令人沮丧的)警告,我还看到了至少在一段时间内似乎可以正常工作的系统,但是随后在某个不可预测的时刻,启动过程似乎注意到某些内容已更改,并且恢复了bootmgfw.efi。还原为原始状态-从而再次丢失Linux引导配置。叹。
因此,这就是EFI引导的基础以及如何配置它。但是可能存在一些重要的变化,并且需要注意一些警告。
在描述的开头,我说过,当您安装Linux时,它将在Windows或其他Linux发行版的任何现有配置旁边向现有EFI引导分区添加必要的引导信息。实际上,磁盘上可能有多个EFI引导分区,因此您可以选择创建一个新的(附加)EFI引导分区,并将其用于Linux安装。某些Linux发行版(特别是Fedora及其衍生版本)默认情况下会执行此操作,而其他发行版则为您提供了执行此操作的选项,如果不这样做,它们只会添加到第一个现有的EFI引导分区中。一些发行版(尤其是Ubuntu及其衍生版本)没有给您选择,它们只是安装到第一个EFI引导分区。除非...(继续阅读),否则可能没问题
正如我在开始时提到的那样,大多数Linux发行版在其EFI引导目录中使用唯一的名称(通常从发行版的名称派生)。不幸的是,并非所有人都这样做。特别是Linux Mint和其他一些Ubuntu派生版本仍将名称ubuntu用作引导目录。这不是问题,除非您尝试安装两个分发目录,并且两个分发目录都使用相同的名称。那么第二个安装将覆盖第一个安装,最终您将只能引导其中一个。在这种情况下,您基本上被迫对至少其中一个使用单独的EFI引导分区,这就是我对新HP笔记本电脑所做的工作,这使所有引起本文这篇文章的最新兴奋点都开始了。
最后要提到的是,过去几年中,用于创建EFI引导配置的Linux实用程序已经得到了很大的改进。它不再需要冗长而复杂的命令行选项序列来指定配置,它完全可以自行创建功能最小的配置。因此,如果发生某种情况并且您的启动数据被破坏或破坏,您可以在正确的位置通过简单地运行“ grub-install / dev / xxx”(或grub2-install,取决于发行版)来重新创建它,其中xxx将替换为您的主磁盘名称,通常是sda。
这涵盖了EFI引导的一般概述,以及如何配置(或哄骗)EFI引导使其适用于Linux / Windows双重引导(或多重引导)。请注意,我这里没有谈论的一件事是“启动修复”实用程序,该实用程序声称可以为您创建或修复这种配置。这样做有几个简单的原因;首先,我不喜欢它们,因为我不喜欢一般情况下可以为难题提供“魔术”的东西。第二,因为从帖子中可以看出,EFI引导配置的详细信息仍在更改,因此今天可用的“魔术实用程序”明天可能无法正常工作,或者只能用于一个发行版或双重引导的“魔术实用程序”可能无法正常工作。用于另一个发行版或用于多重引导(超过两个引导对象)。我认为,如果您花时间了解系统管理的深度,那么最好花一些时间去了解自己在做什么,以便您知道要更改什么,如何更改它以及在出现问题时如何修复它。叫我老式。
哦,最后一件事。还有一个名为rEFInd的实用程序包 这将帮助您设置和管理EFI引导配置。我已经使用了它,并且它可以工作(或者几年前我上次使用它时就可以了),因此,如果您在挣扎中又无法工作,那么值得尝试一下。我不认为它是“魔术工具”,因为您可以看到它所做的一切,并且随附的文档对此进行了说明。基本上,它会尝试将自身安装为第一个引导对象,然后列出计算机上所有其他可能的引导目标,并将其呈现给您选择。如果可行,那就很好-这实际上是学习所有工作原理的好方法-但我不相信这真的是必要的了。
我希望这些信息对某些人有用。我意识到它相当干燥和技术性,但这只是EFI引导的方式。如果我有任何重大错误,请随时发表评论和更正。显然还有更多可以说的话,但是我认为这已经足够了。我希望在这篇文章之后再继续,如果有足够的兴趣,它描述和讨论了在多引导EFI系统上设置Grub配置文件的特定方式。它不是标准的,需要维护一些工作,但是我认为它具有一些优点。