差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
freebsd:migrate_freebsd_legacy_gpt_boot_to_uefi [2019-09-20 21:45] Decomo |
freebsd:migrate_freebsd_legacy_gpt_boot_to_uefi [2021-05-26 10:14] Decomo |
||
---|---|---|---|
行 1: | 行 1: | ||
- | ====== | + | ====== |
- | FreeBSD 9.0-BETA3の時にレガシーGPTブートでRoot on ZFS環境を作ってから早8年が過ぎた。その間、OSの更新しつつ使い続けてきたが、2019年にもなってLegacyブートもなかろうと思いUEFIブート環境に切り替えることにした。 | + | FreeBSD 9.0-BETA3の時にBIOS+GPTブートでRoot on ZFS環境を作ってから早8年が過ぎた。その間、OSの更新しつつ使い続けてきたが、2019年にもなってBIOSブート(以下Legacyブートと呼ぶ)もなかろうと思いUEFIブート環境に切り替えることにした。 |
- | 手動でFreeBSD UEFIブート環境をインストールしたり、bsdinstallで作ったUEFI環境と見比べたりして確立した方法なので、FreeBSDが想定する正しいUEFI環境になってる保証はない。ご利用はas-isでオナシャス。 | + | 本記事で解説する方法は、手動でFreeBSD UEFIブート環境をインストールしたり、その環境とFreeBSDインストーラが作る公式UEFI環境と比べたりして確立した方法なので、正しいUEFI環境になってる保証はない。ご利用はas-isでオナシャス。 |
===== 試した環境 ===== | ===== 試した環境 ===== | ||
* FreeBSD 12.0-RELEASE-p4 | * FreeBSD 12.0-RELEASE-p4 | ||
- | * Legacy/ | + | * Legacy/ |
+ | * gptzfsbootを使って旧来のBIOSからGPT形式ストレージのFreeBSDを起動する方法。UEFI非対応時代のRoot on ZFS環境で用いられてきた。 | ||
* ada0が起動ストレージ | * ada0が起動ストレージ | ||
+ | * | ||
* FreeBSD専用マシン | * FreeBSD専用マシン | ||
===== 手順 ===== | ===== 手順 ===== | ||
- | やることはESPを作ってEFI用のブートローダを置くだけだったりする。 | + | ディスク自体はすでにGPTで構成されているので、やることはEFIシステムパーティションを作ってUEFI用のブートローダを置くだけだったりする。 |
==== ESPの作成 ==== | ==== ESPの作成 ==== | ||
行 20: | 行 22: | ||
起動ストレージにESP((EFI System Partition))を作る。ここにUEFIブートローダを入れるわけだが、この確保が最大の難関。 | 起動ストレージにESP((EFI System Partition))を作る。ここにUEFIブートローダを入れるわけだが、この確保が最大の難関。 | ||
- | ディスクに空きがあればいいのだが、なければデバイスを交換する他ない。この際、新デバイスをミラー構成でプールに追加し、作業完了後に古いデバイスをdetachすればデータ同期の手間が省けて便利である。各人工夫して、どうにかしてESPを確保してくだしあ。 | + | ディスクに空きがあればいいが、なければデバイスを交換する他ない。この際、移行先デバイスをミラー構成でプールに追加し、作業完了後に古いデバイスをdetachすれば、ダウンタイムやデータ同期といった面倒なことを気にしなくていいので楽である。SATAが空いてなければUSB接続でもよいし、正攻法でzfs send/ |
+ | |||
+ | 各人工夫して、どうにかしてESPを確保されたし。 | ||
< | < | ||
行 31: | 行 35: | ||
< | < | ||
- | > gpart show ada7 | + | > gpart show ada0 |
=> 34 1099999933 | => 34 1099999933 | ||
34 | 34 | ||
行 49: | 行 53: | ||
< | < | ||
- | 512バイトセクタの場合 | + | ▼512バイトセクタの場合 |
# newfs_msdos -F 32 -S 512 -c 4 ada0p1 | # newfs_msdos -F 32 -S 512 -c 4 ada0p1 | ||
/ | / | ||
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 | 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セクタの場合 | + | ▼4kセクタの場合 |
- | sudo newfs_msdos -F 32 -S 4096 -c 1 nvd0p1 | + | # newfs_msdos -F 32 -S 4096 -c 1 nvd0p1 |
/ | / | ||
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 | 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 | ||
行 74: | 行 78: | ||
$ cp / | $ cp / | ||
</ | </ | ||
+ | |||
+ | < | ||
+ | |||
+ | 詳細→[[blog: | ||
+ | |||
+ | また、以下のスタートアップスクリプトも特に作る必要はない。あればUEFI Shellが起動した時に実行され、FreeBSDのブートローダが実行される程度のもの。 | ||
+ | </ | ||
起動用のUEFIスクリプトを書く。 | 起動用のUEFIスクリプトを書く。 |