ソースの表示以前のリビジョンバックリンク全て展開する/折り畳む文書の先頭へ Share via Share via... Twitter LinkedIn Facebook Pinterest Telegram WhatsApp Yammer Reddit Teams最近の変更Send via e-Mail印刷パーマリンク × 目次 BIOS/GPTブートのFreeBSD ZFS環境をUEFI/GPTブートに移行する 試した環境 手順 ESPの作成 UEFIブートローダの設置 BIOSの変更 BIOS/GPTブートのFreeBSD ZFS環境をUEFI/GPTブートに移行する FreeBSD 9.0-BETA3の時にBIOS+GPTブートでRoot on ZFS環境を作ってから早8年が過ぎた。その間、OSの更新しつつ使い続けてきたが、2019年にもなってBIOSブート(以下Legacyブートと呼ぶ)もなかろうと思いUEFIブート環境に切り替えることにした。 本記事で解説する方法は、手動でFreeBSD UEFIブート環境をインストールしたり、その環境とFreeBSDインストーラが作る公式UEFI環境と比べたりして確立した方法なので、正しいUEFI環境になってる保証はない。ご利用はas-isでオナシャス。 試した環境 FreeBSD 12.0-RELEASE-p4 Legacy/GPT/ZFSブート環境 gptzfsbootを使って旧来のBIOSからGPT形式ストレージのFreeBSDを起動する方法。UEFI非対応時代のRoot on ZFS環境で用いられてきた。 ada0が起動ストレージ FreeBSD専用マシン 手順 ディスク自体はすでにGPTで構成されているので、やることはEFIシステムパーティションを作ってUEFI用のブートローダを置くだけだったりする。 ESPの作成 起動ストレージにESP1)を作る。ここにUEFIブートローダを入れるわけだが、この確保が最大の難関。 ディスクに空きがあればいいが、なければデバイスを交換する他ない。この際、移行先デバイスをミラー構成でプールに追加し、作業完了後に古いデバイスをdetachすれば、ダウンタイムやデータ同期といった面倒なことを気にしなくていいので楽である。SATAが空いてなければUSB接続でもよいし、正攻法でzfs send/recvを使ってもよい。この辺の柔軟性がZFSの良いところ。 各人工夫して、どうにかしてESPを確保されたし。 # gpart add -a 4k -t efi -s 200m ada0 容量はお好みで。参考までにFreeBSDのインストーラは200MBで作る模様。 自分の場合、UEFI移行を見据えて512MBで確保しておいたもの(ada0p1)があるので、それを使う。 > gpart show ada0 => 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で初期化。 ▼512バイトセクタの場合 # 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 ▼4kセクタの場合 # newfs_msdos -F 32 -S 4096 -c 1 nvd0p1 /dev/nvd0p1: 130812 sectors in 130812 FAT32 clusters (4096 bytes/cluster) BytesPerSec=4096 SecPerClust=1 ResSectors=4 FATs=2 Media=0xf0 SecPerTrack=63 Heads=255 HiddenSecs=0 HugeSectors=131072 FATsecs=128 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 FreeBSD 12.0-RELEASEでは、BOOTx64.efiとしてloader.efiが使われるようになった。今後boot1.efiはメンテされないようなので要注意。 詳細→loader.efiで任意のパーティションのFreeBSDをブートする また、以下のスタートアップスクリプトも特に作る必要はない。あればUEFI Shellが起動した時に実行され、FreeBSDのブートローダが実行される程度のもの。 起動用の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が立ち上がるハズ。 上図のような「FreeBSD EFI boot block」といったブート画面が出てれば多分OK。 1) EFI System Partition freebsd/migrate_freebsd_legacy_gpt_boot_to_uefi.txt 最終更新: 2021-05-26 10:14by Decomo