efibootmgrを使ってブート順番などを弄くろう


efibootmgrについてのコマンドを記述していることは多いですが、使い方についてはあまり触れられていないのが多いようなので、Qiitaに書いておくことにしました。

efibootmgrはLinux上でUEFIブートを表示・管理をするためのコマンドです。
ブート順番を変更したり、次回起動時のブートするOSを決めたりすることができます。

前提・免責

Ubuntu 20.04 LTS、UEFI環境にて動作を確認しています。

efibootmgrは特に記述がない限り、root権限が必要なコマンドです。

このコマンドはOSの起動などに大きく影響するコマンドです。
コマンドを実行する際は自己責任でお願いいたします。

ブートエントリ一覧などを見る

コマンドefibootmgrでブート一覧を見ることができます。

root権限がなくても見ることができます。

$ efibootmgr
BootCurrent: 0004
Timeout: 0 seconds
BootOrder: 0002,0004,0001,0003,0006,0007,0000
Boot0000* UiApp
Boot0001* UEFI VBOX CD-ROM VB5-1a2b3c4d 
Boot0002* Windows Boot Manager
Boot0003* EFI Internal Shell
Boot0004* ubuntu
Boot0006* UEFI VBOX HARDDISK VBdbe12ec1-fe7f2278 
Boot0007* UEFI VBOX HARDDISK VB309bc1ef-8386bd04 
Boot0008* bootmgfw.efi

-v(--verbose)オプションを付けると、詳細なブートエントリを表示します。
例として、どのデバイス、どのハードディスク、どのファイルのブートなのかが表示されます。

$ efibootmgr -v
BootCurrent: 0004
BootOrder: 0002,0004,0001,0003,0006,0007,0000
Boot0000* UiApp	FvVol(7cb8bdc9-f8eb-4f34-aaea-3ee4af6516a1)/FvFile(462caa21-7614-4503-836e-8ab6f4662331)
Boot0001  UEFI VBOX CD-ROM VB5-1a2b3c4d 	PciRoot(0x0)/Pci(0x1f,0x2)/Sata(5,65535,0)N.....YM....R,Y.
Boot0002* Windows Boot Manager	HD(1,GPT,b128ff07-7f2e-4112-bc45-83f138bf5eac,0x800,0x32000)/File(\EFI\Microsoft\Boot\bootmgfw.efi)WINDOWS.........x...B.C.D.O.B.J.E.C.T.=.{.9.d.e.a.8.6.2.c.-.5.c.d.d.-.4.e.7.0.-.a.c.c.1.-.f.3.2.b.3.4.4.d.4.7.9.5.}...d................
Boot0003* EFI Internal Shell	FvVol(7cb8bdc9-f8eb-4f34-aaea-3ee4af6516a1)/FvFile(7c04a583-9e3e-4f1c-ad65-e05268d0b4d1)
Boot0004* ubuntu	PciRoot(0x0)/Pci(0x1f,0x2)/Sata(1,65535,0)/HD(1,GPT,6a6ad87d-d217-444f-a37f-28141f6d96ab,0x800,0x5f000)/File(\EFI\ubuntu\shimx64.efi)
Boot0006  UEFI VBOX HARDDISK VBdbe12ec1-fe7f2278 	PciRoot(0x0)/Pci(0x1f,0x2)/Sata(0,65535,0)N.....YM....R,Y.
Boot0007  UEFI VBOX HARDDISK VB309bc1ef-8386bd04 	PciRoot(0x0)/Pci(0x1f,0x2)/Sata(1,65535,0)N.....YM....R,Y.
Boot0008* bootmgfw.efi	PciRoot(0x0)/Pci(0x1f,0x2)/Sata(0,65535,0)/HD(1,GPT,b128ff07-7f2e-4112-bc45-83f138bf5eac,0x800,0x32000)/File(\EFI\Microsoft\Boot\bootmgfw.efi)

BootCurrent

現在ブートしているシステムの番号(HEX値)です。

Timeout

ブートマネージャーのタイムアウト秒数です。

BootOrder

ブート順番です。左から順にブートされます。

Boot<番号(HEX値)>

ブートのエントリです。

番号のあとに*が付いている場合は有効なブートエントリです。
付いていない場合は無効なブートエントリとして扱われます。

次回ブートするエントリを設定する

-n(--bootnext)オプションを使用すると次回起動時のブートエントリを指定できます。

# efibootmgr -n <番号(HEX値)>

次回起動時のブートエントリの指定を解除する

-N(--delete-bootnext)オプションで次回起動時のブートエントリの指定解除をすることができます。

# efibootmgr -N

ブートエントリを有効にする

-b(--bootnum)オプションでブートエントリを指定して、-a(--active)オプションでブートエントリを有効化できます。

# efibootmgr -b <番号(HEX値)> -a

ブートエントリを無効にする

-b(--bootnum)オプションでブートエントリを指定して、-A(--inactive)オプションでブートエントリを無効化できます。

# efibootmgr -b <番号(HEX値)> -A

ブート順番を変更する

-o(--bootorder)オプションでブート順番を変更できます。番号はカンマ(,)で区切ります。

# efibootmgr -o <番号(HEX値)、カンマで区切り>

例:

# efibootmgr -o 0001,0002,0003

ブートエントリを追加する

-c(--create)オプションと以下のオプションでブートエントリを追加します。

ブートエントリを追加すると、ブート順番(ブートオーダー)に追加されます。

-L(--label)

ブートエントリの表示名を指定します。

-d(--disk)

ブートディスクを指定します。例えば、/dev/sdaなどを指定することができます。

-l(--loader)

efiファイルといったブートローダを指定します。

サンプル

以下のようにすると、ブートエントリを追加することができます。

# efibootmgr -c -L Linux -d /dev/sda -l '\EFI\ubuntu\shimx64.efi'

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

-b(--bootnum)オプションでブートエントリを指定して、-B(--delete-bootnum)オプションでブートエントリを削除します。

# efibootmgr -b <番号(HEX値)> -B

参考など

  • man efibootmgr(8)

この記事は自分が書いたScrapboxから作成しました。