Home
Packages
Forums
Wiki
GitLab
Security
AUR
Download
コンテンツにスキップ
メインメニュー
メインメニュー
サイドバーに移動
非表示
案内
メインページ
目次
コミュニティに貢献
最近の出来事
おまかせ表示
特別ページ
交流
ヘルプ
貢献
最近の更新
最近の議論
新しいページ
統計
リクエスト
ArchWiki
検索
検索
表示
アカウント作成
ログイン
個人用ツール
アカウント作成
ログイン
EFI ブートスタブのソースを表示
ページ
議論
日本語
閲覧
ソースを閲覧
履歴を表示
ツール
ツール
サイドバーに移動
非表示
操作
閲覧
ソースを閲覧
履歴を表示
全般
リンク元
関連ページの更新状況
ページ情報
表示
サイドバーに移動
非表示
←
EFI ブートスタブ
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループに属する利用者のみが実行できます:
登録利用者
。
このページのソースの閲覧やコピーができます。
[[Category:ブートローダー]] [[de:EFISTUB]] [[en:EFISTUB]] [[es:EFISTUB]] [[fr:EFISTUB]] [[pt:EFISTUB]] {{Related articles start}} {{Related|Arch ブートプロセス}} {{Related|ブートローダー}} {{Related|Unified Extensible Firmware Interface}} {{Related articles end}} '''EFI boot stub''' (別名:'''EFI stub''') は、EFI 実行ファイルであるカーネルのことを指します。つまり、UEFI から直接起動できるカーネルのことです。 歴史的に、この記事や [[Debian:EFIStub|Debian Wiki]] では、この用語を一語で表現 (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 システムパーティション]] を用意し、[[EFI システムパーティション#パーティションのマウント|どのようにマウントするか選択]] する必要があります。 {{Tip| * ESP(EFIシステムパーティション)を {{ic|/boot}} にマウントすれば、[[pacman]] が UEFI が読み取るカーネルを直接更新します。 * EFIブートスタブは [[ブートローダー]] を介して間接的に起動することも可能です: ** 複数のUEFIブートマネージャーが追加のオプションを提供したり、UEFIブートプロセスを簡略化したりすることができます。 ** これは、[[カーネルパラメータ]] を試したり、複数のカーネルや OS を使用したりする場合、またはマザーボードの UEFI ブートメニューが使いにくい場合に特に有用です。 ** カーネルと initramfs が存在するパーティションのファイルシステムドライバーを持つブートマネージャー(例: [[rEFInd]])を使用すれば、これらを ESP の外に置くことが可能です。 }} == EFISTUB の準備 == まず、[[EFI システムパーティション]] を作成し、そのマウント方法を選択する必要があります。ESP のマウントオプションは [[EFI システムパーティション#パーティションのマウント]] を見て下さい。 {{Tip| * ESP を {{ic|/boot}} にマウントすると [[pacman]] は EFI ファームウェアが読み込むカーネルを直接更新します。 * カーネルと initramfs があるパーティションにファイルシステムドライバがあるブートマネージャーを使えば、ESP からカーネルを外すことができます。 }} == EFISTUB の起動 == {{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 は [[GRUB]] のような中間ブートローダを必要としないように設計されています。あなたのマザーボードに優れた UEFI 実装があれば、UEFI ブートエントリーにカーネルパラメータを埋め込んで、マザーボードが直接 Arch を起動させることができます。 [[efibootmgr]] や UEFI Shell v2 を使ってマザーボードのブートエントリーを変更することができます。 {{Note|1=<nowiki/> * 古い UEFI の実装は Linux カーネルとの互換性に問題がある場合があります。もしあなたの UEFI にバグフィックスが施された新しいバージョンがあるのなら、メーカー推奨のツールでフラッシュすることを検討してください。 * NVRAM のブートエントリから EFI バイナリにコマンドラインパラメータを渡さないファームウェアもあります[https://bbs.archlinux.org/viewtopic.php?id=178154] この場合、カーネルとパラメータを [[Unified カーネルイメージ]] に統合して、できた ''.efi'' ファイルでブートエントリを作成することが可能です。 }} ==== 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'' とスワップパーティションでの休止状態を使用してブートエントリを作成します # efibootmgr --disk ''/dev/sdX'' --part ''Y'' --create --label "Arch Linux" --loader /vmlinuz-linux --unicode 'root=PARTUUID=''XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'' resume=PARTUUID=''XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'' rw initrd=\initramfs-linux.img' --verbose {{ic|''/dev/sdX''}} と {{ic|''Y''}} は ESP が存在するディスクとパーティションに置き換えてください。{{ic|1=root=}} パラメータを変更することで Linux のルートパーティションを指定できます (ディスクの UUID を使うこともできます)。{{ic|-u/--unicode}} 引数を(シングル)クオーテーションで囲っているのは[[カーネルパラメータ]]を指定するためであり、[[サスペンドとハイバネート#必要なカーネルパラメータ|ハイバネート]]や[[マイクロコード]]を使う場合はパラメータを追加する必要があります。 以下のコマンドを実行することで作成したエントリが問題ないか確認できます: # efibootmgr -v ブート順を設定する場合。 # efibootmgr --bootorder ''XXXX'',''XXXX'' --verbose ここでの、''XXXX'' は各エントリに対して ''efibootmgr'' コマンドの出力に現れる番号です。 {{Tip|1=<nowiki/> * https://github.com/de-arl/auto-UEFI-entry は、コマンドを作成するためのツールです。 * ブートエントリを作成するコマンドをシェルスクリプトに保存しておくと、カーネルパラメータを変更する際などに修正が容易になり便利です。その際、''efibootmgr'' が現在 [https://github.com/rhboot/efibootmgr/issues/49 は既存のエントリの編集をサポートしていない] ように、古いブートエントリの削除を自動化することを検討してください。 * [https://bbs.archlinux.org/viewtopic.php?pid=1090040#p1090040 The linux kernel with build in bootloader?] と題されたフォーラムへの投稿も参考になるかもしれません。 }} ==== bcfg ==== UEFI の実装によっては ''efibootmgr'' を使って NVRAM をうまく変更することが難しいものがあります。''efibootmgr'' がうまくエントリを作成できない場合、UEFI シェル v2 で [[UEFI#bcfg|bcfg]] コマンドを使うことができます (例:[https://archlinux.org/download/ Arch Linux live iso] から) まず、あなたの [[ESP]] が存在するデバイス番号を調べます。 Shell> map この例では、デバイス番号として {{ic|1}} を使用しています。[[ESP]] の中身を一覧表示する。 sshell> ls FS1: 現在のブートエントリーを表示するには Shell> bcfg boot dump カーネルのエントリを追加するには、以下を使用します。 Shell> bcfg boot add ''N'' とします。FS1:\vmlinuz-linux "Arch Linux" ここで {{ic|''N''}} はブートメニューに追加されるエントリの場所です。0 は最初のメニュー項目です。既に存在するメニュー項目は、破棄されることなくメニュー内で移動されます。 ESP 上にファイルを作成し、必要なカーネルオプションを追加します。 Shell> FS1:\options.txt を編集します。 ファイル内に、ブートラインを追加します。たとえば、以下のようになります。 root=/dev/sda2 ro initrd=initramfs-linux.img {{Note|ファイル内の行頭に余分なスペースを入れてください。行頭には [[Wikipedia:Byte order mark|byte order mark]] があり、ブート時にエラーの原因となるその隣の文字を潰してしまいます。}} 保存するには {{ic|F2}} を、終了するには {{ic|F3}} を押してください。 前のエントリにこれらのオプションを追加します。 Shell> bcfg boot -opt ''N'' FS1:\options.txt 追加する項目がある場合は、この作業を繰り返してください。 前に追加した項目を削除するには、次のようにします。 Shell> bcfg boot rm ''N'' ==== kesboot ==== {{AUR|kesboot-git}} パッケージのスクリプトを使って EFISTUB での作業を単純化・自動化することもできます。パッケージの操作中に EFI 変数を追加・削除するための [[pacman フック]] も含まれています。 まず、パッケージをインストールして、{{ic|/etc/kesboot.conf}} ファイルを設定します。 {{hc|/etc/kesboot.conf|2= CMDLINES=('linux' 'acpi=on' 'linux-zen' 'iommu=off') }} {{Note|フック (変数 {{ic|INSTALL_HOOK}} と {{ic|REMOVE_HOOK}}) を使用すると、実行するたびに {{ic|CMDLINES}} 配列を上書きします(すべてのレコードの内容を。}} 次に、以下を実行します。 # kesboot -u また、本パッケージには EFI ブートの初期設定用のプログラムも含まれています。[[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 システムパーティションに {{ic|archlinux.nsh}} などのシェルスクリプトの実行コマンドを保存することができます。以下のコマンドで起動できるようになります: > fs0: > archlinux ==== startup.nsh スクリプトの使用 ==== いくつかの UEFI 実装はコールドブート間で EFI 変数を保持せず (例:[[VirtualBox]] バージョン 6.1 以前)、UEFI ファームウェアインターフェースを通して設定したものは電源切断時に失われてしまいます。 [https://www.uefi.org/sites/default/files/resources/UEFI_Shell_Spec_2_0.pdf UEFI Shell Specification 2.0] は ESP パーティションのルートにある {{ic|startup.nsh}} というスクリプトが常に解釈され、任意の命令を含むことができると定めています; その中でブートローディングラインを設定することが可能です。ESP パーティションを {{ic|/boot}} にマウントし、カーネルブートローディングラインを含む {{ic|startup.nsh}} スクリプトを作成することを確認します。例えば vmlinuz-linux rw root=/dev/sd''X'' [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 を使用する場合、カーネルコマンドラインはブート時に変更できません。例えば {{ic|initramfs-linux-fallback.img}} を使ったり、Intel マイクロコード無しで起動したりするような、少なくともある種のフォールバックの可能性を持つには、efibootmgr でさらなるブートエントリーを作成するだけです。 == トラブルシューティング == === EFISTUB はいくつかの Dell システムで動作しません === いくつかの世代の Dell ファームウェアは、ブートローダに渡す引数を間違えており、そのため EFISTUB は通常起動不可能なシステムを意味する null コマンドラインをパースします ([https://lore.kernel.org/linux-efi/20200907170021.GA2284449@rani.riverdale.lan/ linux-efi thread] を参照してください) 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 エントリをブートする前に、別の既存のブート エントリを使用してください。 == 参照 == * [https://www.kernel.org/doc/html/latest/admin-guide/efi-stub.html EFISTUB の Linux カーネルドキュメント] * [https://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commitdiff;h=291f36325f9f252bd76ef5f603995f37e453fc60;hp=55839d515495e766605d7aaabd9c2758370a8d27 Linux カーネル EFISTUB Git コミット] * [https://www.rodsbooks.com/efi-bootloaders/efistub.html Rod Smith の EFISTUB 記事]
このページで使用されているテンプレート:
テンプレート:AUR
(
ソースを閲覧
)
テンプレート:Hc
(
ソースを閲覧
)
テンプレート:Ic
(
ソースを閲覧
)
テンプレート:META Related articles start
(
ソースを閲覧
)
テンプレート:Note
(
ソースを閲覧
)
テンプレート:Related
(
ソースを閲覧
)
テンプレート:Related articles end
(
ソースを閲覧
)
テンプレート:Related articles start
(
ソースを閲覧
)
テンプレート:Tip
(
ソースを閲覧
)
EFI ブートスタブ
に戻る。
検索
検索
EFI ブートスタブのソースを表示
話題を追加