efibootmgr

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Efibootmgr and the translation is 100% complete.

efibootmgr は、UEFI ブートエントリを管理するためのツールです。

これは、ブートローダではありません。ブートマネージャとして動作するのはシステムの EFI ファームウェアそれ自体です。efibootmgr は、これを操作するためのツールです。efibootmgr を用いることで、ブートエントリを作成したり順序を変えたり削除したりすることが可能になります。

インストール

カーネル

CONFIG_EFIVAR_FS サポートを有効化する必要があります。

メモ
efivarfs を EFI ランタイムサービス抜きで使用することはできません。もしこれがデフォルトで無効化されている場合 (CONFIG_EFI_DISABLE_RUNTIME=y)、カーネルコマンドラインオプション efi=runtime によって有効化することもできます。

Emerge

sys-boot/efibootmgr には USE フラグがありませんから、ただ単にインストールすればよいです:

root #emerge --ask sys-boot/efibootmgr

設定

EFI 変数

efibootmgr が正しく動作するには、 EFI 変数ファイルシステムにアクセス可能になっていなければなりません。そのためには、システムが(ファームウェア(BIOS)の MBR モードではなく)EFI モードでブートされている必要があります。そうでないと EFI 変数へのアクセス自体が不可能です。システムが MBR モードになっていたら、再起動して、システムのファームウェアに EFI モードで起動するように指示する必要があります。大概は、ファームウェアの設定オプションを変えたり、システムのブートメニューで EFI ブートエントリを選んだりすることで解決します。

システムが EFI モードにあるとき、マウント済みの efivarfs が存在するか調べるには、以下のコマンドを実行してください:

root #mount | grep efivars
efivarfs on /sys/firmware/efi/efivars type efivarfs (ro,relatime)

これは sysfs init スクリプトで読み込み専用 (ro) としてマウントされているので、以下のコマンドを使用して、手動で読み書き可能 (rw) として再マウントする必要があります:

root #mount -o remount,rw -t efivarfs efivarfs /sys/firmware/efi/efivars

前提条件

EFI システムパーティション (ESP) が存在しない場合は作成する必要があります。EFI システムパーティションを参照してください。

使い方

ブートエントリの一覧表示

古いバージョンの efibootmgr を使用している場合は、オプション --verbose または -v が必要です:

root #efibootmgr
BootCurrent: 0002
Timeout: 3 seconds
BootOrder: 0003,0003,0002,0000,0004
Boot0000* CD/DVD Drive  BIOS(3,0,00)
Boot0001* Hard Drive    BIOS(2,0,00)
Boot0002* Gentoo        HD(1,800,61800,6d98f360-cb3e-4727-8fed-5ce0c040365d)File(\EFI\boot\bootx64.efi)
Boot0003* Hard Drive    BIOS(2,0,00)P0: ST1500DM003-9YN16G

ブートエントリを作成する

EFI のブートエントリを作成するには、efibootmgr に対していくつかのオプションを与えます:

  • --create または -c 新しいエントリの作成;
  • --part または -p EFI システムパーティションのあるパーティション番号;
  • --disk または -d EFI システムパーティションのあるディスク名;
  • --label または -L ブートエントリに使用したいラベル名;
  • --loader または -l ブートする EFI イメージの置いてあるパス
重要
EFI イメージのパスでは、/(スラッシュ)ではなく \(バックスラッシュ)を使用しなければなりません
重要
くわえて、ESP が既に他の OS によって作成済の場合は、/efi/EFI とは異なる名前が付いている場合があります。ESP が他の OS によって作成済の場合、EFI ブートエントリは、/efi の後に続くこのディレクトリ名で始めてください。

どのようにして UEFI エントリを作成すればよいか、以下にいくつかの例を示します。もしフォルダ構造が以下のようになっていれば:

root #tree /efi/ -L 3
/efi/
└── EFI
    ├── Grub
    │   └── grubx64.efi
    └── Gentoo
        └── bzImage.efi

ローダのパスは以下のようになるでしょう:

root #efibootmgr -c -L "Grub" -l '\EFI\Grub\grubx64.efi'
root #efibootmgr -c -L "Gentoo" -l '\EFI\Gentoo\bzImage.efi'

例えば:

root #efibootmgr -c -d /dev/sda -p 2 -L "Gentoo" -l '\efi\boot\bootx64.efi'

カーネルのコマンドラインに渡すパラメータを追加することもできます。すべての UEFI 実装でサポートされているとは限りません[1]が:

root #efibootmgr -c -d /dev/sda -p 2 -L "Gentoo" -l '\efi\boot\bootx64.efi' -u 'root=/dev/sda3 initrd=\efi\boot\initramfs.img quiet'

必要に応じて、追加のカーネルをインストールして UEFI ファームウェアに登録しておくことができます。これは、より多くのカーネルをテストしたい場合やもう一つのオペレーションシステムとデュアルブートしたい場合に特に便利です。これらは通常、システムの初期化中の適切な時にキーボードのホットキーを押した後にブート選択ダイアログに表示されます。最後に追加したエントリが常に最も高いブート優先度を得るので、これがデフォルトになります。ホットキーの組み合わせがわからなければ、コンピューターの製造業者の公式ドキュメントを探してみてください。通常、この情報を探すのは難しいことではありません。

ブートエントリを削除する

エントリを削除するにはまず、そのエントリのID番号を見つけなければなりません。

例えば Gentoo のエントリが前記のようであれば(Boot0002 がID であれば)、efibootmgr に対して --bootnum または -b でID番号を指定し --delete-bootnum または -B でエントリの削除を命令します。

root #efibootmgr -b 2 -B

リムーバブルメディア

リムーバブルメディア上の EFI ブートローダはブートエントリとして構成されないので、efibootmgr は必要ではありません。詳細については ESP 上のリムーバブルメディアブートパスを参照してください。

削除

Unmerge

root #emerge --ask --depclean --verbose sys-boot/efibootmgr

関連項目

参照

  1. 少なくとも Dell EFI ファームウェアでは、カーネル 5.10 で回避策が実装されました: https://lkml.org/lkml/2020/9/18/228