Re: loader.efi of 13.1

From: Naomichi Nonaka <nao_at_enuenu.org>
Date: Wed, 31 Aug 2022 07:36:34 UTC
野中です。

13.Xまでのbootの手順は

EFIファーム->EFIパーティションのboot1.efi
->FreeBSDパーティションの/boot/loader.efi
->FreeBSDパーティションのkernel

という順番で実行され、loader.luaはboot1.efiがloader.efiに渡します。

なので
 >    /boot/loader.efi を ada0 の efi パーティションの
 >      EFI/Boot/bootx64.efi にコピー
ではなく、
 >    /boot/boot1.efi を ada0 の efi パーティションの
 >      EFI/Boot/bootx64.efi にコピー
が正しいです。

boot1.efiは将来的に廃止予定とされていますが、13.Xではまだ現役です。

On 2022/08/31 14:39, 丸山直昌 wrote:
> 丸山@年金生活者 です。
> 
> そろそろ古い FreeBSDを卒業して、13.1あたりに移住しようと思い、インストー
> ルを試してみたのですが、loader.efi の使い方で躓いていて、思うようなレ
> イアウトで内臓ディスクにインストールできずにいます。私が直面している状
> 況を誰にでも実験可能な形で説明するために、次のような「練習問題」を考え
> てみます。
> 
> FreeBSD 13.1 の loader.efi の使い方の練習問題
>    既にどこかにインストールしてある13.1のパーティション(amd, zfs on
>    UEFIマシン)を別のディスクにコピーして boot可能にするにはどうしたら良
>    いか。
> 
> 具体的には以下のような手順でやってみました。
> 
> 1. FreeBSD-13.1-RELEASE-amd64-dvd1.iso をdd でコピーした外付け USB ディ
>    スク(/dev/da0、つまりは「イントールメディア」)で起動し、中身が空の
>    USB ディスク(/dev/da1)に FreeBSD13.1amdを zfs でインストールする。
>    これは簡単で、
> 
> # gpart show da1
> =>      40  78140080  da1  GPT  (37G)
>          40    532480    1  efi  (260M)
>      532520      1024    2  freebsd-boot  (512K)
>      533544       984       - free -  (492K)
>      534528   4194304    3  freebsd-swap  (2.0G)
>     4728832  73410560    4  freebsd-zfs  (35G)
>    78139392       728       - free -  (364K)
> 
> のようになる。この USB ディスクを以下「インストール済みディスク」と呼
> ぶことにします。
> 
> 2.  インストール済みディスクのみを外付けデバイスとして接続してパソコン
>    を起動すると、勿論起動する。/dev/da0 となる。
> 
> 3. 内臓ディスク(ada0, gptスキーム)の空きパーティション(私の場合
>    ada0p13)を type freebsd-zfs にして、そこにda0p4のzrootをコピーする。
> 
>    zpool create NEWPOOLNAME ada0p13
>    zfs send -R zroot@SNAPSHOT | zfs recv -F NEWPOOLNAME
> 
> 4. (ada0からのbootの準備)
>    zpool set bootfs=NEWPOOLNAME/ROOT/default NEWPOOLNAME
>    (安全のため) ada0 の efi パーティション(私の場合 ada0p4)の
>      EFI/Boot/bootx64.efi を退避
>    /boot/loader.efi を ada0 の efi パーティションの
>      EFI/Boot/bootx64.efi にコピー
>    zpool export NEWPOOLNAME
>    halt -p
> 
> 以上の準備の元、すべての外付けデバイスを外して、内臓ディスクから起動してみます。
> 
> Consoles: EFI console
>      Reading loader vars from /efi/freebsd/loadef.env
> Setting currdev disk0p4:
> FreeBSD/amd64 EFI loader, Revision 1.1
> 
>     Command line arguments:
>     Image base: 0xd0998000
>     EFI version: 2.31
> 
> 等と表示されます。続いてさらに画面半分ほどのメッセージが表示された後、
> 
> ERROR: cannot open /boot/lua/loader.lua: no such file or directory.
> 
> Type '?' for a list of commands,'help' for more detailed help.
> OK
> 
> となって止まります。ここで
> 
> OK lsdev
> 
> とやると ada0p12(古い FreeBSDで作った zfs) と ada0p13(今回作った
> FreeBSD13.1の zfs) にある zfs のプール名は zfs devices として正しく表
> 示されます。ここで Google 検索で見つけた
> 
> 	https://www.ish.org/blog/?p=968
> 
> を手がかりに以下のようにしてみました。
> 
> OK set currdev=zfs:NEWPOOLNAME/ROOT/default:
> OK unload
> OK boot
> 
> すると、何やら起動作業と思われる動作が進行し、画面には色々表示されるの
> ですが、
> 
> mountroot>
> 
> で止まってしまいます。不思議なことに、 mountroot> プロンプトの少し前に
> 以下のように表示されているのに mount できていません。
> 
> Loader variables:
>    vfs.root.mountfrom=zfs:NEWPOOLNAME/default
> 
> ここの最後にコロン(:)が無いのも不思議です。仕方ないので
> 
> mountroot> zfs:NEWPOOLNAME/ROOT/default:
> 
> とやってみますが、うまくゆきません。お手上げです。
> 
> なお、上の OK プロンプトのところで上記 ish.org のブログに書いてある
> 
>    free-module-options
> や
>    start
> 
> は unknown commandとなるので、 12.x と 13.1 では loader.efi の仕様が違っ
> ているようです。
> 
> どなたかお助けください。
> 
> --------
> 丸山 直昌 まるやま なおまさ
> メールアドレス: masa@amogha.jp
>