FreeBSD 14.0へアップグレードしたあとにブートローダを直す

2024年9月7日 初稿


事象

FreeBSD 14.0がリリースされたあとfreebsd-updateでバージョンアップグレードをすると、再起動後にカーネルが自動でブートされずずっと困っていました。

boot error

bootを実行すればブートするので深刻ではなかったのですがマシンの電源を落とす頻度は下がりました。

解決方法

本腰を入れて修正しようと思いたち、同じ事象を報告しているページを探しました。すると『Problem Upgrading from 13.3-RELEASE to 14.1-RELEASE: Lua Error Upon Booting Kernel』のコメントからFreeBSDのBugzilla『Unable to automatically boot after upgrading to 14.1-RELEASE』を見つけ、最終的には『FreeBSD upgrading the bootloader on UEFI boots』にて具体的なブートローダの更新手順を知ることができました。どうやらfreebsd-updateではブートローダの更新まではやってもらえず、手動で更新する必要があるとわかりました。

マウントすべきディスクパーティションを探す

はじめにgpart show -pあるいはefibootmgr -vでEFIパーティションを確認します。

gpart show -pを実行する場合、種類がefiとなっているパーティションを探します。以下の実行例ではada0p1が該当します。

gpart show -p
=>       40  976773088    ada0  GPT  (466G)
         40     409600  ada0p1  efi  (200M)
     409640       1024  ada0p2  freebsd-boot  (512K)
     410664        984          - free -  (492K)
     411648    4194304  ada0p3  freebsd-swap  (2.0G)
    4605952  972167168  ada0p4  freebsd-zfs  (464G)
  976773120          8          - free -  (4.0K)

efibootmgr -vを実行するにはroot権限が必要です。このコマンド出力では/EFI/BOOT/BOOTX64.EFIがどのパーティションに存在するかを確認すればいいです。以下の実行例ではada0p1が該当します。

efibootmgr -v
Boot to FW : false
BootCurrent: 0002
Timeout    : 1 seconds
BootOrder  : 0002, 0001, 0003, 0004, 0005
+Boot0002* UEFI OS HD(1,GPT,c531e91d-295f-11ea-aa96-04d9f58606dc,0x28,0x64000)/File(\EFI\BOOT\BOOTX64.EFI)
                      ada0p1:/EFI/BOOT/BOOTX64.EFI (null)
 Boot0001* Hard Drive BBS(HD,,0x0)
 Boot0003* UEFI:CD/DVD Drive BBS(0x81,,0x0)
 Boot0004* UEFI:Removable Device BBS(0x82,,0x0)
 Boot0005* UEFI:Network Device BBS(0x83,,0x0)

EFIパーティションはada0p1です。

EFIパーティションをマウントする

次にada0p1をマウントします。

mount -t msdosfs /dev/ada0p1 /mnt

新しいブートローダを配置する

マウント先のefi/bootディレクトリに新しいブートローダを配置します。ここでは念のため古いブートローダのバックアップをとっています。

cp /mnt/efi/boot/BOOTx64.efi{,.orig}
cp /boot/loader.efi /mnt/efi/boot/BOOTx64.efi

最後にEFIパーティションをアンマウントします。

umount /mnt

おわりに

ブートローダは手動で更新する必要があるのを知らず不便な思いをしていました。次にアップグレードするときはこの作業も忘れずにやるつもりです。