FreeBSD 14.0へアップグレードしたあとにブートローダを直す
2024年9月7日 初稿
事象
FreeBSD 14.0がリリースされたあとfreebsd-update
でバージョンアップグレードをすると、再起動後にカーネルが自動でブートされずずっと困っていました。
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
おわりに
ブートローダは手動で更新する必要があるのを知らず不便な思いをしていました。次にアップグレードするときはこの作業も忘れずにやるつもりです。