freebsd:migrate_freebsd_legacy_gpt_boot_to_uefi

差分

このページの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:
-====== Legacy/GPTブートのFreeBSD環境をUEFI/GPTブートに移行する ======+====== BIOS/GPTブートのFreeBSD ZFS環境をUEFI/GPTブートに移行する ======
  
-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/GPT/ZFSブート環境gptzfsbootを使ってGPTのストレージから古BIOSで起動する方法。UEFI非対応時代のRoot on ZFS環境で用いられてきた。+    * Legacy/GPT/ZFSブート環境 
 +      * 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/recvを使ってもよい。この辺の柔軟性がZFSの良いところ。 
 + 
 +各人工夫して、どうにかしてESPを確保されたし。
  
 <code> <code>
行 31: 行 35:
  
 <code> <code>
-> gpart show ada7+> gpart show ada0
 =>        34  1099999933  ada0  GPT  (525G) =>        34  1099999933  ada0  GPT  (525G)
           34                  - free -  (3.0K)           34                  - free -  (3.0K)
行 49: 行 53:
  
 <code> <code>
-512バイトセクタの場合+512バイトセクタの場合
 # newfs_msdos -F 32 -S 512 -c 4 ada0p1 # newfs_msdos -F 32 -S 512 -c 4 ada0p1
 /dev/ada0p1: 1044464 sectors in 261116 FAT32 clusters (2048 bytes/cluster) /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 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
 /dev/nvd0p1: 130812 sectors in 130812 FAT32 clusters (4096 bytes/cluster) /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 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 /boot/boot1.efi /tmp/esp/efi/boot/BOOTx64.efi $ cp /boot/boot1.efi /tmp/esp/efi/boot/BOOTx64.efi
 </code> </code>
 +
 +<note>FreeBSD 12.0-RELEASEでは、BOOTx64.efiとしてloader.efiが使われるようになった。今後boot1.efiはメンテされないようなので要注意。
 +
 +詳細→[[blog:2021:2021-01-09]]
 +
 +また、以下のスタートアップスクリプトも特に作る必要はない。あればUEFI Shellが起動した時に実行され、FreeBSDのブートローダが実行される程度のもの。
 +</note>
  
 起動用のUEFIスクリプトを書く。 起動用のUEFIスクリプトを書く。
  • freebsd/migrate_freebsd_legacy_gpt_boot_to_uefi.txt
  • 最終更新: 2021-05-26 10:14
  • by Decomo