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

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

过去一周我一直尝试在 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.

但我发现使用--no-vram安装 grub 时没有出现错误。我是 Linux 新手,想知道是什么导致了错误。

答案1

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

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

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

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

此外,如果主板被指示从可移动设备启动,而该设备在其 NVRAM 中没有启动项,则 UEFI 会为其定义一个默认路径,以尝试从该路径启动(请参阅3.5.1.1 可移动介质启动行为UEFI 规范)。相对于 ESP 根目录的路径\EFI\BOOT\BOOT{architecture}.EFI如下{architecture}

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

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

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

编辑:

我意识到这些都不能解释为什么你的主板不允许 GRUB 修改其条目。但希望这能解释为什么该开关有用。你提供的错误消息表明主板的所有启动条目都已填充,并且相当合理地,不适合决定要grub-install覆盖哪些启动条目。你可以尝试使用启动管理器显示您的启动项并删除一些您不需要的项。Rod Smith 的回答这个问题应该向你展示如何操作。

答案2

我到处寻找一个真正好的解释。到目前为止我能想到的最好的man grub-install解释是:

   --no-nvram
          don't update the `boot-device'/`Boot*' NVRAM variables. This option is only
          available on EFI and IEEE1275 targets.

谷歌搜索“NVRAM 变量”的定义第一次出现很奇怪维基解密因为中央情报局利用以下方式进行间谍活动:

NVRAM 变量解释

NVRAM 是非易失性 RAM,用于 EFI 中存储需要在启动期间保留的变量。许多 NVRAM 变量都是由架构定义的,为 NVRAM 设置无效选项可能会导致机器无法启动。

在启动过程中,多个驱动程序和应用程序可以依赖 NVRAM 值来帮助它们完成工作。下面是 UEFI 2.56 规范中的一张图表,显示了这种情况。

相关内容