安装 grub 时“--no-nvram”有什么作用?

Pra*_*ari 4 grub2 dual-boot uefi grub-efi

过去一周我一直在尝试在 efi 分区中安装 grub,我得到了:

Could not prepare Boot variable: No space left on device
grub-install: error: efibootmgr failed to register the boot entry: Input/output error.
Run Code Online (Sandbox Code Playgroud)

但是我发现通过使用--no-vram我安装 grub 没有错误。我是 Linux 菜鸟,想知道是什么导致了错误。

Sam*_*mer 5

使用 BIOS,主板将物理设备的启动顺序存储在非易失性存储器 (NVRAM) 中,以便在重新启动后继续存在。这可确保当您在主板上打开机器时,仍会按照您(或工厂)配置的顺序启动设备。然后 BIOS 将尝试在每个设备的第一个逻辑块地址 (LBA)中执行MBR,直到其中一个工作。如果您在启动期间手动选择要引导的设备,它将按照您的要求执行并尝试从该设备的第一个 LBA 引导。

假设磁盘使用GPT格式化,当主板使用UEFI 引导时,MBR 不需要包含引导加载程序(或任何与此相关的内容)。相反,磁盘包含一个EFI 系统分区 (ESP),它本质上是一个FAT格式的分区,其中包含存储在文件中的引导加载程序代码。FAT 文件系统还可能包含引导加载程序所需的其他文件(例如,引导过程中启动画面使用的徽标和背景)。

对于 UEFI 主板上的 UEFI 引导,假定磁盘是系统的一部分,因此当您grub-install 时,安装过程的一部分应该是将一个条目放入主板的 NVRAM 中,其中包含 ESP 中引导加载程序的路径(请参阅部分通过简单文件协议3.5.1启动的的UEFI规范)。然后可以将此条目设置为默认值,或仅作为选项显示。有关 EFI 引导加载程序的更多信息,我强烈建议阅读 Rod Smith 的《管理 Linux 的 EFI 引导加载程序》

对于通常连接到主板(即 USB 硬盘)的设备,将此条目存储在主板的 NVRAM 中是没有意义的,因为在大多数引导期间该设备可能不在那里。我相信该--no-nvram选项告诉grub-installer不要为此目的修改主板的 NVRAM。

此外,如果指示主板从其 NVRAM 中没有启动项的可移动设备启动,UEFI 会为其定义默认路径以尝试启动(请参阅UEFI 规范的第3.5.1.1可移动媒体启动行为) . 相对于 ESP 根的路径\EFI\BOOT\BOOT{architecture}.EFI具有以下{architecture}s。

  • 32 位 ? IA32
  • x64 ? x64
  • 安腾架构? IA64
  • AArch32 架构? ARM
  • AArch64 架构? AA64

我相信该--removable选项会告诉grub-installer使用此路径,而不是它的首选路径,如果不修改主板的 NVRAM,则可能需要,否则在手动选择可移动设备后需要手动指定引导加载程序。

注意:我在上面说“相信”是因为我还没有测试过。

编辑:

我意识到这些都不能解释为什么您的主板不允许 GRUB 修改其条目。但希望这能解释为什么这种转换会有所帮助。您提供的错误消息表明主板的所有引导条目都已填充,并且非常合理grub-install地决定覆盖哪些引导条目是不合适的。您可以尝试使用efibootmgr来显示您的引导条目并删除一些您不需要的条目。罗德史密斯这个问题的回答应该告诉你如何。