文書の過去の版を表示しています。
Legacy/GPTブートのFreeBSD環境をUEFI/GPTブートに移行する
FreeBSD 9.0-BETA3の時にレガシーGPTブートでRoot on ZFS環境を作ってから早8年が過ぎた。その間、OSの更新しつつ使い続けてきたが、2019年にもなってLegacyブートもなかろうと思いUEFIブート環境に切り替えることにした。
手動でFreeBSD UEFIブート環境をインストールしたり、bsdinstallで作ったUEFI環境と見比べたりして確立した方法なので、FreeBSDが想定する正しいUEFI環境になってる保証はない。ご利用はas-isでオナシャス。
試した環境
FreeBSD 12.0-RELEASE-p4
FreeBSD専用マシン
手順
ESPの作成
起動ストレージにESP1)を作る。ここにUEFIブートローダを入れるわけだが、この確保が最大の難関。
ディスクに空きがあればいいのだが、なければデバイスを交換する他ない。この際、新デバイスをミラー構成でプールに追加し、作業完了後に古いデバイスをdetachすればデータ同期の手間が省けて便利である。各人工夫して、どうにかしてESPを確保してくだしあ。
# gpart add -a 4k -t efi -s 200m ada0
容量はお好みで。参考までにFreeBSDのインストーラは200MBで作る模様。
自分の場合、UEFI移行を見据えて512MBで確保しておいたもの(ada0p1)があるので、それを使う。
> gpart show ada7
=> 34 1099999933 ada0 GPT (525G)
34 6 - free - (3.0K)
40 1048576 1 efi (512M)
1048616 1024 2 freebsd-boot (512K)
1049640 251658240 3 freebsd-zfs (120G)
252707880 8388608 4 freebsd-zfs (4.0G)
261096488 8388608 5 freebsd-zfs (4.0G)
269485096 8388608 6 freebsd-zfs (4.0G)
277873704 629145600 7 freebsd-zfs (300G)
907019304 125829120 8 freebsd-zfs (60G)
1032848424 41943040 9 freebsd-zfs (20G)
1074791464 25208503 - free - (12G)
ESPをFAT32で初期化。
# newfs_msdos -F 32 -S 512 -c 4 ada0p1
/dev/ada0p1: 1044464 sectors in 261116 FAT32 clusters (2048 bytes/cluster)
BytesPerSec=512 SecPerClust=4 ResSectors=32 FATs=2 Media=0xf0 SecPerTrack=63 Heads=16 HiddenSecs=0 HugeSectors=1048576 FATsecs=2040 RootCluster=2 FSInfo=1 Backup=2
UEFIブートローダの設置
作成したESPをマウントする。
$ mkdir /tmp/esp
# mount -t msdosfs /dev/ada0p1 /tmp/esp
UEFIのブートローダを置く。
$ mkdir -p /tmp/esp/efi/boot
$ cp /boot/boot1.efi /tmp/esp/efi/boot/BOOTx64.efi
起動用のUEFIスクリプトを書く。
$ echo 'BOOTx64.efi' >> /tmp/esp/efi/boot/startup.nsh
ESPの中が以下のような構造になっていればOK
$ cd /tmp/esp/
$ find .
.
./efi
./efi/boot
./efi/boot/bootx64.efi
./efi/boot/startup.nsh
ESPを必ずアンマウント
$ cd
# umount /tmp/esp
システムを再起動
# reboot
BIOSの変更
マシンのBIOSでブート環境をUEFIにする。マザボごとに設定箇所や項目名が異なるので頑張ってどうにかしてくだしあ。
BIOSの設定を保存し再起動するとUEFI環境でFreeBSDが立ち上がるハズ。