This is Gentoo's testing wiki. It is a non-operational environment and its textual content is outdated.
Please visit our production wiki at https://wiki.gentoo.org
efibootmgr
efibootmgr は、システム上の UEFI ファームウェアを操作します。Linux (およびそのほかの EFI 対応 OS)の起動を可能にするためのブートエントリを作成したり管理したりするために EFI の設定を操作するツールとして、広く知られています。
sys-boot/efibootmgr は、ブートローダではありません。ブートローダとして動作するのはシステムの EFI ファームウェアそれ自体です。efibootmgrは、これを操作するためのツールです。efibootmgr を用いることで、ブートエントリを作成したり順序を変えたり編集したり削除したりすることが可能になります。
インストール
カーネル
CONFIG_EFI_VARS のサポートが有効になっている必要があります:
Firmware Drivers ---> EFI (Extensible Firmware Interface) Support ---> <*> EFI Variable Support via sysfs
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 (rw,nosuid,nodev,noexec,relatime)
(sysfs init スクリプトによってマウントされているべきなのですが)もしもマウントされていなかったら、次のコマンドでマウントすることが可能です。
root #
mount -t efivarfs efivarfs /sys/firmware/efi/efivars
OpenRC-0.28 news も参照。
前提条件
EFI システムパーティション(ESP)が存在しない場合は作成する必要があります。EFI System Partition を参照してください。
使い方
ブートエントリの一覧表示
現在のブートエントリのリストを表示させるには --verbose (-v)
オプションを使用します:
root #
efibootmgr -v
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 システムパーティション(ESP)のあるパーティション番号;--disk (-d)
EFI システムパーティション(ESP)のあるディスク名;--label (-L)
ブートエントリに使用したいラベル名;--loader (-l)
ブートする EFI イメージの置いてあるパス
EFI イメージのパスでは、/(スラッシュ)ではなく \(バックスラッシュ)を使用しなければなりません。
例えば:
root #
efibootmgr -c -d /dev/sda -p 2 -L "Gentoo" -l "\efi\boot\bootx64.efi"
必要に応じて、追加のカーネルをインストールして UEFI ファームウェアに登録しておくことができます。これは、より多くのカーネルをテストしたい場合やもう一つのオペレーションシステムとデュアルブートしたい場合に特に便利です。これらは通常、システムの初期化中の適切な時にキーボードのホットキーを押した後にブート選択ダイアログに表示されます。最後に追加したエントリが常に最も高いブート優先度を得るので、これがデフォルトになります。ホットキーの組み合わせがわからなければ、コンピューターの製造業者の公式ドキュメントを探してみてください。通常、この情報を探すのは難しいことではありません。
ブートエントリを削除する
エントリを削除するにはまず、そのエントリのID番号を見つけなければなりません。
例えば Gentoo のエントリが前記のようであれば("Boot0002" がID であれば)、efibootmgr に対して --bootnum (-b)
でID番号を指定し --delete-bootnum (-B)
でエントリの削除を命令します。
root #
efibootmgr -b 2 -B
削除
Unmerge
root #
emerge --ask --depclean sys-boot/efibootmgr
参考
- rEFInd — a boot manager for EFI and UEFI platforms
- EFI stub kernel では、Linux カーネルを EFI から直接ブートする設定方法を説明しています
- Alternative 2: efibootmgr Gentoo ハンドブックの記事