web-dev-qa-db-ja.com

GRUBのインストール中に「--no-nvram」は何をしますか?

過去1週間、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 noobであり、エラーの原因を知りたいです。

1
Pratik Patwari

BIOSを使用すると、マザーボードはブートする物理デバイスの順序を不揮発性メモリ(NVRAM)に保存するため、再起動後も存続します。これにより、マザーボードのマシンをオンにしても、構成済みの順序で(または工場で)デバイスがブートされます。 BIOSは次に、各デバイスの最初の [論理ブロックアドレス(LBA)[〜#〜] mbr [〜#〜] のいずれかを実行しようとします- 機能する 。起動時に手動で起動するデバイスを選択すると、代わりに、そのデバイスの最初のLBAから起動しようとします。

ディスクが [〜#〜] gpt [〜#〜] でフォーマットされていると仮定すると、マザーボードが EFIブート を使用する場合、MBRにブートローダーを含める必要はありません(またはそのことについては何でも)。代わりに、ディスクには EFIシステムパーティション(ESP) が含まれています。これは、本質的に [〜#〜] fat [〜#〜] -ファイルに格納されたブートローダーコードを含むフォーマットパーティションです。 FATファイルシステムには、ブートローダーが必要とする他のファイル(たとえば、起動プロセス中にスプラッシュスクリーンで使用されるロゴや背景)が含まれている場合もあります。

UEFIマザーボードでのUEFIブートでは、ディスクがシステムの一部であると想定されているため、 grub-install の場合、そのインストールプロセスの一部で、マザーボードのNVRAMにエントリが配置されているはずです。 ESP内のブートローダー(セクション3.5.1 EFI仕様 のSimple File Protocolによるブート)を参照)==を参照)。 EFIブートローダーの詳細については、Rod Smithの Managing EFI Boot Loaders for Linux を読むことを強くお勧めします。

マザーボード(つまり、USBハードディスク)に通常接続されていないデバイスの場合、このエントリをマザーボードのNVRAMに保存しても意味がありません。ほとんどの起動中にデバイスが存在しない可能性があります。 --no-nvramオプションはgrub-installerこの目的でマザーボードのNVRAMを変更しないでください。

さらに、マザーボードがNVRAMにブートエントリがないリムーバブルデバイスからブートするように指示された場合、UEFIは、ブートを試みるためのデフォルトパスを定義します(セクションを参照)3.5.1.1リムーバブルメディアUEFI仕様のブート動作)。 ESPのルートからの相対パスは\EFI\BOOT\BOOT{architecture}.EFI次の{architecture}s。

  • 32ビット→IA32
  • x64→x64
  • Itaniumアーキテクチャ→IA64
  • AArch32アーキテクチャ→ARM
  • AArch64アーキテクチャ→AA64

--removableオプションはgrub-installerマザーボードのNVRAMを変更しない場合は、優先パスではなくこのパスを使用する必要があります。そうでない場合、リムーバブルデバイスを手動で選択した後、ブートローダーを手動で指定する必要があります。

注:私はこれをテストしていないため、上記の「信じる」と言います。

編集:

マザーボードでGRUBがエントリの変更を許可しない理由はこれで説明できません。しかし、うまくいけば、そのスイッチが役立つ理由が説明されています。提供されたエラーメッセージは、マザーボードのすべてのブートエントリがが入力されており、かなり合理的に、grub-installどのブートエントリを上書きするかを決定します。 efibootmgr を使用してブートエントリを表示し、不要なものを削除してみてください。 Rod Smithの回答 から この質問 にその方法が表示されます。

0
Samuel Harmer

私は本当に良い説明を求めて高低を検索しました。私がこれまでに思いつくことができる最高のものは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変数"定義の最初のgoogle検索ヒットは奇妙な Wikileaks です。CIAがスパイに使用しているためです。

NVRAM変数の説明

NVRAMは不揮発性ですRAMこれはEFIで使用され、ブート間で持続する必要のある変数を格納します。これらのNVRAM変数の多くは構造的に定義されており、NVRAMに無効なオプションを設定すると、マシンが起動できません。

起動プロセス中、複数のドライバとアプリケーションは、NVRAM値に依存して、それらのジョブを実行できます。以下は、これが起こっていることを示すUEFI 2.56仕様の図です。

0