LinuxでUEFIのブート順序とかをいじる
Qiita記事に昇格しました
Linuxにはefibootmgrっていうコマンドがある。(Ubuntuで存在確認済み)
これはUEFIのブート一覧を表示することができ、順序とかの変更とかもできる。
一覧表示
efibootmgrって打つだけ。root権限はなくてもOK
code:console
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
Boot????*
?には数字が入る。この数字をIDとして扱う。
数字のあとに*が入っている場合は有効。入ってない場合は無効化されている。
BootCurrent
現在ブートしているID。
Timeout
ブートマネージャのユーザーの入力を受け付ける時間(あんま理解してない)
BootOrder
ブート順序。左から順に優先度が高い。
詳細表示
-v(--verbose)オプションでどのデバイスから、どのファイルを使うかなどの詳細が見れる。
root権限はなくてもOK
code:console
$ 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)
次回ブートする項目の設定
-n(--bootnext)オプションを使う。root権限が必要。以後同様。
code:console
# efibootmgr -n 0004
BootNext: 0004
BootCurrent: 0004
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
正常に設定できれば標準出力で設定項目が表示される。以後同様。
BootNextが追加されているのがわかる
すると次回起動時に指定したブート方法でOSを呼び出す。
解除するときは-N(--delete-bootnext)オプションを使う。
code:console
efibootmgr -N
項目を有効・無効にする
-b(--bootnum)オプションで対象のブート項目を選択してから、
-a(--active)や-A(--inactive)オプションを使う。
有効化
-a(--active)オプションを使う。
code:console
efibootmgr -b 0000 -a
無効化
-A(--inactive)オプションを使う。
code:console
efibootmgr -b 0007 -A
項目を追加
-c(--create)や-C(--create-only)オプションを使う。
-cオプションはブート順序も追加する。ブート順序の最初に追加される。
逆に-Cオプションはブート順序には追加しない。
※未検証。
-d: ディスクを指定
efiファイルが入っているディスクを指定。
-l(--label): 表示名
// WIP
項目を削除
-bオプションで選択してから、-B(--delete-bootnum)オプションを使う。
code:console
efibootmgr -b 0008 -B
重複している項目を削除
-D(--remove-dups)オプションで重複している項目を削除できる。
code:console
efibootmgr -D
ブート順序を変更
-o(--bootorder)で順序変更できる。カンマで指定。
code:console
efibootmgr -o 0002,0004,0003,0000
ブート順序を削除
-O(--delete-bootorder)オプションで削除できる。
code:console
efibootmgr -O
この状態での再起動はあまり望まれないと思われる(VirtualBoxのEFIだとブートの設定情報が削除されるかも?)