野中です。

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 の仕様が違っ
ているようです。

どなたかお助けください。

--------
丸山 直昌 まるやま なおまさ
メールアドレス: m...@amogha.jp



Reply via email to