「EFI ブートスタブ」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(同期)
 
(3人の利用者による、間の6版が非表示)
1行目: 1行目:
 
[[Category:ブートローダー]]
 
[[Category:ブートローダー]]
  +
[[de:EFISTUB]]
 
[[en:EFISTUB]]
 
[[en:EFISTUB]]
 
[[es:EFISTUB]]
 
[[es:EFISTUB]]
[[ru:EFISTUB]]
+
[[fr:EFISTUB]]
  +
[[pt:EFISTUB]]
 
{{Related articles start}}
 
{{Related articles start}}
 
{{Related|Arch ブートプロセス}}
 
{{Related|Arch ブートプロセス}}
8行目: 10行目:
 
{{Related|Unified Extensible Firmware Interface}}
 
{{Related|Unified Extensible Firmware Interface}}
 
{{Related articles end}}
 
{{Related articles end}}
  +
'''EFI boot stub''' (別名:'''EFI stub''') は、EFI 実行ファイルであるカーネルのことを指します。つまり、UEFI から直接起動できるカーネルのことです。
Linux カーネルは EFISTUB ブートをサポートしており、[[EFI]] ファームウェアがカーネルを EFI 実行可能ファイルとしてロードできるようにします。このオプションは、Arch Linux カーネルではデフォルトで有効になっています。カーネルをコンパイルする場合は、カーネル構成で {{ic|1=CONFIG_EFI_STUB=y}}を設定することでアクティブにできます。詳細については、[https://www.kernel.org/doc/html/latest/admin-guide/efi-stub.html EFI BootStub] を参照してください。
 
   
  +
歴史的に、この記事や [[Debian:EFIStub|Debian Wiki]] では、この用語を一語で表現 (EFISTUB または EFIStub) としていました。
== EFISTUB の準備 ==
 
   
  +
Arch Linux のカーネルはデフォルトで EFI ブートスタブです。もし [[カーネル/伝統的なコンパイル方法#カーネルの設定|カーネルをコンパイル]] する場合は、{{ic|1=CONFIG_EFI_STUB=y}} を設定して有効化します。詳細については、[https://docs.kernel.org/admin-guide/efi-stub.html The EFI Boot Stub] を参照してください。
まず、[[EFI システムパーティション]] を作成し、そのマウント方法を選択する必要があります。ESP のマウントオプションは [[EFI システムパーティション#パーティションのマウント]] を見て下さい。
 
  +
  +
続行する前に、[[EFI システムパーティション]] を用意し、[[EFI システムパーティション#パーティションのマウント|どのようにマウントするか選択]] する必要があります。
   
 
{{Tip|
 
{{Tip|
* ESP を {{ic|/boot}} にマウントすると [[pacman]] EFI ファームウェアが読み込むカーネルを直接更新します。
+
* ESP(EFIシステムパーティション)を {{ic|/boot}} にマウントすれば、[[pacman]] UEFI が読み取るカーネルを直接更新します。
  +
* EFIブートスタブは [[ブートローダー]] を介して間接的に起動することも可能です:
* カーネルと initramfs があるパーティションにファイルシステムドライバがあるブートマネージャーを使えば、ESP からカーネルを外すことができます。
 
  +
** 複数のUEFIブートマネージャーが追加のオプションを提供したり、UEFIブートプロセスを簡略化したりすることができます。
  +
** これは、[[カーネルパラメータ]] を試したり、複数のカーネルや OS を使用したりする場合、またはマザーボードの UEFI ブートメニューが使いにくい場合に特に有用です。
  +
** カーネルと initramfs が存在するパーティションのファイルシステムドライバーを持つブートマネージャー(例: [[rEFInd]])を使用すれば、これらを ESP の外に置くことが可能です。
 
}}
 
}}
   
 
== EFISTUB の起動 ==
 
== EFISTUB の起動 ==
   
  +
{{Note|カーネル EFI ブートスタブに渡される initramfs のパスは、EFI システムパーティション(ESP)のルートからの相対パスであり、EFI 規格に従ってバックスラッシュを使用する必要があります。例えば、initramfs が {{ic|''esp''/EFI/arch/initramfs-linux.img}} にある場合、対応する UEFI 形式の行は {{ic|1=initrd=\EFI\arch\initramfs-linux.img}} となります。以下の例では、すべてが {{ic|''esp''/}} 以下にあると仮定します。}}
{{Tip|追加のオプションを提供したり、UEFI ブートのプロセスを簡素化したりできる UEFI ブートマネージャーがいくつかあります。特に [[カーネルパラメータ]] を試している場合や、複数のカーネル/オペレーティングシステムがある場合に。詳細については、[[Arch ブートプロセス#ブートローダー]] を参照してください。}}
 
 
{{Note|Linux カーネル EFISTUB initramfs のパスは EFI システムパーティションのルートからの相対パスで、(EFI 標準に従って)バックスラッシュを使用する必要がありま す。例えば、initramfs が {{ic|''esp''/EFI/arch/initramfs-linux.img}} にある場合、対応する UEFI フォーマットの行は {{ic|1=initrd=\EFI\arch\initramfs-linux.img}} でなければなりません。以下の例では、全ては {{ic|''esp''/}} の下にあると仮定しています。}}
 
   
 
=== UEFI を直接使う ===
 
=== UEFI を直接使う ===
36行目: 41行目:
 
==== efibootmgr ====
 
==== efibootmgr ====
   
カーネルをロードするブートエントリを ''efibootmgr'' で作成する
+
カーネルをロードする ''efibootmgr'' を使用してブートエントリを作成するには:
   
# efibootmgr --disk ''/dev/sdX'' --part ''Y'' --create --label "Arch Linux" --loader /vmlinuz-linux --unicode 'root=PARTUUID=''XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'' rw initrd=\initramfs-linux.img' --verbose
+
# efibootmgr --create --disk ''/dev/sdX'' --part ''Y'' --label "Arch Linux" --loader /vmlinuz-linux --unicode 'root=''block_device_identifier'' rw initrd=\initramfs-linux.img'
   
または、''efibootmgr'' ワップパーティション休止状態使用てブートトリ作成します
+
ここで{{ic|''/dev/sdX''}} は ESP(EFI シテムパーティション)が存在するドライブを、{{ic|''Y''}} はそパーティション番号ます。また、{{ic|1=root=}}のパラメーターにはLinuxのルートパーティションを指定します
   
  +
{{Note|サポートされているデバイス名の形式については [[カーネルパラメータ#パラメータ一覧|カーネルパラメータ]]、対応する値の取得方法については [[永続的なブロックデバイスの命名]]、および例については[[永続的なブロックデバイスの命名#カーネルパラメータ]] を参照してください。}}
# efibootmgr --disk ''/dev/sdX'' --part ''Y'' --create --label "Arch Linux" --loader /vmlinuz-linux --unicode 'root=PARTUUID=''XXXXXXXX-''. XXXX-XXXX-XXXX-XXXXXX'' resume=PARTUUID=''XXXXXX-XXXX-XXXX-XXXX'' rw initrd=Thinkinitramfs-linux. img' --verbose
 
   
  +
省略された場合、{{ic|/dev/sda}} の最初のパーティションが ESP として使用されます。
{{ic|''/dev/sdX''}} と {{ic|''Y''}} は ESP が存在するディスクとパーティションに置き換えてください。{{ic|1=root=}} パラメータを変更することで Linux のルートパーティションを指定できます (ディスクの UUID を使うこともできます)。{{ic|-u/--unicode}} 引数を(シングル)クオーテーションで囲っているのは[[カーネルパラメータ]]を指定するためであり、[[サスペンドとハイバネート#必要なカーネルパラメータ|ハイバネート]]や[[マイクロコード]]を使う場合はパラメータを追加する必要があります。
 
   
  +
引用符内の {{ic|-u}}/{{ic|--unicode}} 引数は、単なる [[カーネルパラメータ|カーネルパラメータ]] のリストであるため、必要に応じて追加のパラメーターを指定する必要があります(例: [[電源管理/サスペンドとハイバネート|ハイバネート先指定を initramfs に渡す]])
以下のコマンドを実行することで作成したエントリが問題ないか確認できます:
 
   
  +
LTS Linux カーネル、NVME ストレージ、特定のサブボリュームを備えた BTRFS ファイルシステム、およびスワップパーティションでの休止状態の例:
# efibootmgr -v
 
   
  +
# efibootmgr --create \
ブート順を設定する場合。
 
  +
--disk /dev/nvme0n1 --part 1 \
  +
--label "EFISTUB Arch" \
  +
--loader /vmlinuz-linux-lts \
  +
--unicode 'root=UUID=01a40dd8-28f0-4636-be1e-aeed60c98095 resume=UUID=2d877d5d-4ca1-4d46-a3d6-b6ee94cbbd78 rw rootflags=subvol=@ loglevel=3 quiet initrd=\initramfs-linux-lts.img'
   
  +
ブートエントリを使用してリストを取得したり、ブートの注文を設定したり、削除したりするには、[[efibootmgr]] を参照してください。
# efibootmgr --bootorder ''XXXX'',''XXXX'' --verbose
 
 
ここでの、''XXXX'' は各エントリに対して ''efibootmgr'' コマンドの出力に現れる番号です。
 
   
 
{{Tip|1=<nowiki/>
 
{{Tip|1=<nowiki/>
  +
* {{AUR|kesboot-git}} パッケージを使用すると、これを簡素化して自動化できます。このパッケージには、パッケージ操作中にEFI変数を追加および削除できる [[pacman フック]] も含まれています。
* https://github.com/de-arl/auto-UEFI-entry は、コマンドを作成するためのツールです。
 
  +
* https://github.com/de-arl/auto-UEFI-entry は、コマンドを作成するための Bash ヘルパーです。
* ブートエントリを作成するコマンドをシェルスクリプトに保存しておくと、カーネルパラメータを変更する際などに修正が容易になり便利です。その際、''efibootmgr'' が現在 [https://github.com/rhboot/efibootmgr/issues/49 は既存のエントリの編集をサポートしていない] ように、古いブートエントリの削除を自動化することを検討してください。
 
  +
* ブートエントリーを作成するコマンドをシェルスクリプトに保存しておくと、カーネルパラメーターを変更する場合などに簡単に修正できて便利です。この際、古いブートエントリーを削除する処理を自動化することを検討してください。現在のところ、''efibootmgr'' は [https://github.com/rhboot/efibootmgr/issues/49 既存のエントリーの編集をサポートしていません]
* [https://bbs.archlinux.org/viewtopic.php?pid=1090040#p1090040 The linux kernel with build in bootloader?] と題されたフォーラムへの投稿も参考になるかもしれません。
 
  +
* フォーラム投稿 [https://bbs.archlinux.org/viewtopic.php?pid=1090040#p1090040 The linux kernel with build in bootloader?] も参考になるかもしれません。
}}
 
  +
}}
   
 
==== bcfg ====
 
==== bcfg ====
117行目: 125行目:
 
}}
 
}}
   
{{Note|フック (変数 {{ic|INSTALL_HOOK}} と {{ic|REMOVE_HOOK}}) を使用すると、実行するたびに {{ic|CMDLINES}} 配列を上書きしますすべてのレコードの内容を。}}
+
{{Note|フック (変数 {{ic|INSTALL_HOOK}} と {{ic|REMOVE_HOOK}}) を使用すると、実行するたびに {{ic|CMDLINES}} 配列を上書きします(すべてのレコードの内容を。}}
   
 
次に、以下を実行します。
 
次に、以下を実行します。
151行目: 159行目:
 
この方法は、実際のハードウェアで遭遇する可能性のあるほぼすべての UEFI ファームウェアバージョンで機能します。最後の手段として使用できます。 '''スクリプトは1つの長い行である必要があります。''' 括弧内のセクションはオプションであり、ガイドとしてのみ提供されています。シェルスタイルの改行は、視覚的にわかりやすくするためのものです。 FAT ファイルシステムはバックスラッシュをパス区切り文字として使用します。この場合、バックスラッシュは initramfs が ESP パーティションのルートにあることを宣言します。 Intel マイクロコードのみが起動パラメータ行にロードされます。 AMD マイクロコードは、後で起動プロセス中にディスクから読み取られます。これはカーネルによって自動的に行われます。
 
この方法は、実際のハードウェアで遭遇する可能性のあるほぼすべての UEFI ファームウェアバージョンで機能します。最後の手段として使用できます。 '''スクリプトは1つの長い行である必要があります。''' 括弧内のセクションはオプションであり、ガイドとしてのみ提供されています。シェルスタイルの改行は、視覚的にわかりやすくするためのものです。 FAT ファイルシステムはバックスラッシュをパス区切り文字として使用します。この場合、バックスラッシュは initramfs が ESP パーティションのルートにあることを宣言します。 Intel マイクロコードのみが起動パラメータ行にロードされます。 AMD マイクロコードは、後で起動プロセス中にディスクから読み取られます。これはカーネルによって自動的に行われます。
   
== トラブルシューィング ==
+
== ヒンクニック ==
   
=== ブートエントリーがランダムに削除される ===
+
=== フォールバック RAM ディスクを使用したブートエントリ ===
   
  +
ブートマネージャなしで EFISTUB を使用する場合、カーネルコマンドラインはブート時に変更できません。例えば {{ic|initramfs-linux-fallback.img}} を使ったり、Intel マイクロコード無しで起動したりするような、少なくともある種のフォールバックの可能性を持つには、efibootmgr でさらなるブートエントリーを作成するだけです。
一部のマザーボードでは、NVRAM の空き容量不足のために、作成時にエラーを出さずにブートエントリを削除することがあります。これを防ぐには、''efibootmgr'' によって追加されるブートエントリの量をエントリ作成プロセスを最小にすることで減らし、[[Wikipedia:Unified Extensible Firmware Interface#CSM booting|Compatibility Support Module (CSM)]] による自動ドライブブートエントリを UEFI 設定から無効にして減らすとよいでしょう。[https://bbs.archlinux.org/viewtopic.php?pid=1608838#p1608838] を見て下さい。
 
  +
  +
== トラブルシューティング ==
   
 
=== EFISTUB はいくつかの Dell システムで動作しません ===
 
=== EFISTUB はいくつかの Dell システムで動作しません ===
162行目: 172行目:
   
 
Linux 5.10 からは、この挙動を修正する回避策が見つかっています (この [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4a568ce29d3f48df95919f82a80e4b9be7ea0dc1 commit ] を参照してください) Linux < 5.10 では、[https://github.com/RobertCsordas/arch-efiboot arch-efiboot] のような efi-packer を使うか、別のブートローダを使うことができます。
 
Linux 5.10 からは、この挙動を修正する回避策が見つかっています (この [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4a568ce29d3f48df95919f82a80e4b9be7ea0dc1 commit ] を参照してください) Linux < 5.10 では、[https://github.com/RobertCsordas/arch-efiboot arch-efiboot] のような efi-packer を使うか、別のブートローダを使うことができます。
  +
  +
=== ブートエントリーの変更が適用されない ===
  +
  +
Haswell 時代の Asus ボード([https://forums.archlinux.fr/viewtopic.php?t=19618 こちらのフォーラムを参照]) などの一部のマザーボードは、システムが起動しない限りブートエントリの変更に気づきません。更新された EFISTUB エントリをブートする前に、別の既存のブート エントリを使用してください。
   
 
== 参照 ==
 
== 参照 ==

2025年1月27日 (月) 02:43時点における最新版

関連記事

EFI boot stub (別名:EFI stub) は、EFI 実行ファイルであるカーネルのことを指します。つまり、UEFI から直接起動できるカーネルのことです。

歴史的に、この記事や Debian Wiki では、この用語を一語で表現 (EFISTUB または EFIStub) としていました。

Arch Linux のカーネルはデフォルトで EFI ブートスタブです。もし カーネルをコンパイル する場合は、CONFIG_EFI_STUB=y を設定して有効化します。詳細については、The EFI Boot Stub を参照してください。

続行する前に、EFI システムパーティション を用意し、どのようにマウントするか選択 する必要があります。

ヒント:
  • ESP(EFIシステムパーティション)を /boot にマウントすれば、pacman が UEFI が読み取るカーネルを直接更新します。
  • EFIブートスタブは ブートローダー を介して間接的に起動することも可能です:
    • 複数のUEFIブートマネージャーが追加のオプションを提供したり、UEFIブートプロセスを簡略化したりすることができます。
    • これは、カーネルパラメータ を試したり、複数のカーネルや OS を使用したりする場合、またはマザーボードの UEFI ブートメニューが使いにくい場合に特に有用です。
    • カーネルと initramfs が存在するパーティションのファイルシステムドライバーを持つブートマネージャー(例: rEFInd)を使用すれば、これらを ESP の外に置くことが可能です。

EFISTUB の起動

ノート: カーネル EFI ブートスタブに渡される initramfs のパスは、EFI システムパーティション(ESP)のルートからの相対パスであり、EFI 規格に従ってバックスラッシュを使用する必要があります。例えば、initramfs が esp/EFI/arch/initramfs-linux.img にある場合、対応する UEFI 形式の行は initrd=\EFI\arch\initramfs-linux.img となります。以下の例では、すべてが esp/ 以下にあると仮定します。

UEFI を直接使う

UEFI は GRUB のような中間ブートローダを必要としないように設計されています。あなたのマザーボードに優れた UEFI 実装があれば、UEFI ブートエントリーにカーネルパラメータを埋め込んで、マザーボードが直接 Arch を起動させることができます。 efibootmgr や UEFI Shell v2 を使ってマザーボードのブートエントリーを変更することができます。

ノート:
  • 古い UEFI の実装は Linux カーネルとの互換性に問題がある場合があります。もしあなたの UEFI にバグフィックスが施された新しいバージョンがあるのなら、メーカー推奨のツールでフラッシュすることを検討してください。
  • NVRAM のブートエントリから EFI バイナリにコマンドラインパラメータを渡さないファームウェアもあります[1] この場合、カーネルとパラメータを Unified カーネルイメージ に統合して、できた .efi ファイルでブートエントリを作成することが可能です。

efibootmgr

カーネルをロードする efibootmgr を使用してブートエントリを作成するには:

# efibootmgr --create --disk /dev/sdX --part Y --label "Arch Linux" --loader /vmlinuz-linux --unicode 'root=block_device_identifier rw initrd=\initramfs-linux.img'

ここで、/dev/sdX は ESP(EFI システムパーティション)が存在するドライブを、Y はそのパーティション番号を指します。また、root=のパラメーターにはLinuxのルートパーティションを指定します。

ノート: サポートされているデバイス名の形式については カーネルパラメータ、対応する値の取得方法については 永続的なブロックデバイスの命名、および例については永続的なブロックデバイスの命名#カーネルパラメータ を参照してください。

省略された場合、/dev/sda の最初のパーティションが ESP として使用されます。

引用符内の -u/--unicode 引数は、単なる カーネルパラメータ のリストであるため、必要に応じて追加のパラメーターを指定する必要があります(例: ハイバネート先指定を initramfs に渡す)

LTS Linux カーネル、NVME ストレージ、特定のサブボリュームを備えた BTRFS ファイルシステム、およびスワップパーティションでの休止状態の例:

# efibootmgr --create \
 --disk /dev/nvme0n1 --part 1 \
 --label "EFISTUB Arch" \
 --loader /vmlinuz-linux-lts \
 --unicode 'root=UUID=01a40dd8-28f0-4636-be1e-aeed60c98095 resume=UUID=2d877d5d-4ca1-4d46-a3d6-b6ee94cbbd78 rw rootflags=subvol=@ loglevel=3 quiet initrd=\initramfs-linux-lts.img'

ブートエントリを使用してリストを取得したり、ブートの注文を設定したり、削除したりするには、efibootmgr を参照してください。

ヒント:
  • kesboot-gitAUR パッケージを使用すると、これを簡素化して自動化できます。このパッケージには、パッケージ操作中にEFI変数を追加および削除できる pacman フック も含まれています。
  • https://github.com/de-arl/auto-UEFI-entry は、コマンドを作成するための Bash ヘルパーです。
  • ブートエントリーを作成するコマンドをシェルスクリプトに保存しておくと、カーネルパラメーターを変更する場合などに簡単に修正できて便利です。この際、古いブートエントリーを削除する処理を自動化することを検討してください。現在のところ、efibootmgr既存のエントリーの編集をサポートしていません
  • フォーラム投稿 The linux kernel with build in bootloader? も参考になるかもしれません。

bcfg

UEFI の実装によっては efibootmgr を使って NVRAM をうまく変更することが難しいものがあります。efibootmgr がうまくエントリを作成できない場合、UEFI シェル v2 で bcfg コマンドを使うことができます (例:Arch Linux live iso から)

まず、あなたの ESP が存在するデバイス番号を調べます。

Shell> map

この例では、デバイス番号として 1 を使用しています。ESP の中身を一覧表示する。

sshell> ls FS1:

現在のブートエントリーを表示するには

Shell> bcfg boot dump

カーネルのエントリを追加するには、以下を使用します。

Shell> bcfg boot add N とします。FS1:\vmlinuz-linux "Arch Linux"

ここで N はブートメニューに追加されるエントリの場所です。0 は最初のメニュー項目です。既に存在するメニュー項目は、破棄されることなくメニュー内で移動されます。

ESP 上にファイルを作成し、必要なカーネルオプションを追加します。

Shell> FS1:\options.txt を編集します。

ファイル内に、ブートラインを追加します。たとえば、以下のようになります。

root=/dev/sda2 ro initrd=initramfs-linux.img
ノート: ファイル内の行頭に余分なスペースを入れてください。行頭には byte order mark があり、ブート時にエラーの原因となるその隣の文字を潰してしまいます。

保存するには F2 を、終了するには F3 を押してください。

前のエントリにこれらのオプションを追加します。

Shell> bcfg boot -opt N FS1:\options.txt

追加する項目がある場合は、この作業を繰り返してください。

前に追加した項目を削除するには、次のようにします。

Shell> bcfg boot rm N

kesboot

kesboot-gitAUR パッケージのスクリプトを使って EFISTUB での作業を単純化・自動化することもできます。パッケージの操作中に EFI 変数を追加・削除するための pacman フック も含まれています。

まず、パッケージをインストールして、/etc/kesboot.conf ファイルを設定します。

/etc/kesboot.conf
CMDLINES=('linux' 'acpi=on'
          'linux-zen' 'iommu=off')
ノート: フック (変数 INSTALL_HOOKREMOVE_HOOK) を使用すると、実行するたびに CMDLINES 配列を上書きします(すべてのレコードの内容を。

次に、以下を実行します。

# kesboot -u

また、本パッケージには EFI ブートの初期設定用のプログラムも含まれています。ESPのマウント ディレクトリの後、以下を実行してください。

# /usr/lib/setup-efi-boot

UEFI Shell を使う

通常の UEFI アプリケーションと同じように UEFI Shell から EFISTUB カーネルを起動できます。その場合、通常のパラメータとして起動する EFISTUB カーネルファイルにカーネルパラメータを渡してください:

> fs0:
> /vmlinuz-linux root=PARTUUID=3518bb68-d01e-45c9-b973-0b5d918aae96 rw initrd=/initramfs-linux.img

毎回カーネルパラメータを全て指定したくない場合、UEFI システムパーティションに archlinux.nsh などのシェルスクリプトの実行コマンドを保存することができます。以下のコマンドで起動できるようになります:

> fs0:
> archlinux

startup.nsh スクリプトの使用

いくつかの UEFI 実装はコールドブート間で EFI 変数を保持せず (例:VirtualBox バージョン 6.1 以前)、UEFI ファームウェアインターフェースを通して設定したものは電源切断時に失われてしまいます。

UEFI Shell Specification 2.0 は ESP パーティションのルートにある startup.nsh というスクリプトが常に解釈され、任意の命令を含むことができると定めています; その中でブートローディングラインを設定することが可能です。ESP パーティションを /boot にマウントし、カーネルブートローディングラインを含む startup.nsh スクリプトを作成することを確認します。例えば

vmlinuz-linux rw root=/dev/sdX [rootfs=myfs] [rootflags=myrootflags] \
 [kernel.flag=foo] [mymodule.flag=bar] \
 [initrd=\intel-ucode.img] initrd=\initramfs-linux.img

この方法は、実際のハードウェアで遭遇する可能性のあるほぼすべての UEFI ファームウェアバージョンで機能します。最後の手段として使用できます。 スクリプトは1つの長い行である必要があります。 括弧内のセクションはオプションであり、ガイドとしてのみ提供されています。シェルスタイルの改行は、視覚的にわかりやすくするためのものです。 FAT ファイルシステムはバックスラッシュをパス区切り文字として使用します。この場合、バックスラッシュは initramfs が ESP パーティションのルートにあることを宣言します。 Intel マイクロコードのみが起動パラメータ行にロードされます。 AMD マイクロコードは、後で起動プロセス中にディスクから読み取られます。これはカーネルによって自動的に行われます。

ヒントとテクニック

フォールバック RAM ディスクを使用したブートエントリ

ブートマネージャなしで EFISTUB を使用する場合、カーネルコマンドラインはブート時に変更できません。例えば initramfs-linux-fallback.img を使ったり、Intel マイクロコード無しで起動したりするような、少なくともある種のフォールバックの可能性を持つには、efibootmgr でさらなるブートエントリーを作成するだけです。

トラブルシューティング

EFISTUB はいくつかの Dell システムで動作しません

いくつかの世代の Dell ファームウェアは、ブートローダに渡す引数を間違えており、そのため EFISTUB は通常起動不可能なシステムを意味する null コマンドラインをパースします (linux-efi thread を参照してください)

Linux 5.10 からは、この挙動を修正する回避策が見つかっています (この commit を参照してください) Linux < 5.10 では、arch-efiboot のような efi-packer を使うか、別のブートローダを使うことができます。

ブートエントリーの変更が適用されない

Haswell 時代の Asus ボード(こちらのフォーラムを参照) などの一部のマザーボードは、システムが起動しない限りブートエントリの変更に気づきません。更新された EFISTUB エントリをブートする前に、別の既存のブート エントリを使用してください。

参照