Re: loader.efi of 13.1
- In reply to: masa_a_amogha.jp ($B4];3D>>;(B): "Re: loader.efi of 13.1"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 01 Sep 2022 23:50:39 UTC
青木@名古屋です。 ドキュメント化されていないのですが、loader.envで対処できそうな 気配です。 下記の記事を見つけました。 https://nofu.jp/wiki/blog/2021/2021-01-09 上記が現状も正確なら、loader promptでの作業からすると、 ESPのefi/boot/freebsd/loader.env に rootdev=zfs:NEWPOOLNAME/ROOT/default: を入力しておけばいけそうです。 もしかすると、efi/boot/freebsd/loader.efiをefibootmgrで 登録してデフォルトで起動するようにしているのではなく loader.efiをefi/boot/bootx64.efiにコピーしている場合、 efi/boot/loader.efiでないと駄目な可能性もあります。 ※loader.envという設定ファイルがあり得ることは boot1.efiのデバッグに協力していた際に気づいては いましたが、loader.confとの棲み分けや設定できる 内容までは把握していませんでした。 もしかしてですが、既にこのファイルを作ってあり(デフォルト では存在しません)、rootdevにada0p8のUFSが指定してあると いうことはありませんか? もしそうであれば、loader.efiの lua対応(従来のforthと排他)は12系からだったと思いますので、 この10.3のUFSを見に行ってエラーになっていた可能性が高いです。 ※loader.efiのサーチ順が標準のboot1.efiと同じなら、UFSの 10.3が優先されることは【デフォルトでは】あり得ません。 悪さするとしたらada0p12のpoolです。 が、既にloader.envが あってada0p8のUFSを使うように設定されていればその限りでは なくなります。 On Fri, 02 Sep 2022 01:05:51 +0900 masa@amogha.jp (丸山直昌) wrote: > 丸山です。 > > その後少し試してみて、様子がわかってきたので報告します。 > > まず混乱を防ぐため、内臓ディスクの NEWPOOLNAME/ROOT/default の中の > /boot/zfs/zpool.cache は消しておきました。/boot/etc/zpool.cache もありま > せん。(初めから無かったような気がするのですが、思い違いか?) > > で、今朝(9月1日)以下の実験をしてみたところ、内臓ディスクの NEWPOOLNAME > の zfs にある 13.1が起動できました。 > > (9/1実験)インストール済みディスクを外付けとして接続してパソコンを起動し、 > 「Welcome to FreeBSD」が表示されたところ(画面右には例の角が二つ出た赤い > 頭のFreeBSDロゴが表示された状態)でスペースキーでも押してboot の進行を止 > めて > > 3. Escape to loader prompt > > を選ぶと、 loader プロンプトの OK が出ます。この状態から > > OK set currdev=zfs:NEWPOOLNAME/ROOT/default: > OK boot > > これで起動できます。 > > ここでもし set currdev をやらずに単に boot とすれば、勿論外付けになって > いるインストール済みディスクの方の 13.1が起動します。以下簡単のため、こ > の OKプロンプトの状況をloader.efi の「正常状態」と呼ぶことにします。 > > 一方、先日31日の当初ポストに書いた状況で現れた OK プロンプトの状況を「異 > 常状態」ということにします。 > > 同じように 13.1 の /boot/loader.efi を efi/boot/bootx64.efi として起動し > ているのに、このように正常状態と異常状態が現れるのは何故なのでしょうか。 > > 一応異常状態が発生する状況を再掲しておきます。 > > >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 > > この異常状態に至る過程で「Welcome to FreeBSD」画面は現れません。どのキー > に触れることも無しに、OK プロンプト状態になります。それぞれの状態でshow > コマンドを使って変数の状態を見てみます。画面に出ることをコピーペーストで > きないので、関係ありそうな部分を手動入力してお伝えするしかありまんが、以 > 下のようになっています。 > > (正常状態での show コマンドの出力の一部) > bootenv_autolist=YES > bootenvs[0]=zfs:zroot/ROOT/default > bootenvs_count=1 > currdev=zfs:zroot/ROOT/default: > loaddev=zfs:zroot/ROOT/default: > zfs_be_active=zfs:zroot/ROOT/default > zfs_be_currpage=1 > zfs_be_root=zroot/ROOT > > (異常状態での show コマンドの出力の一部) > currdev=disk0p8: > loaddev=disk0p8: > > ここまで書いて私は重要な事を皆さんにお伝えしていなかったことに気が付きま > した。 > > # gpart show ada0 > => 34 1000215149 ada0 GPT (477G) > 34 1600 1 bios-boot (800K) > 1634 414 2 freebsd-boot (207K) > 2048 921600 3 !de94bba4-06d1-4d40-a16a-bfd50179d6ac (450M) > 923648 204800 4 efi (100M) > 1128448 32768 5 ms-reserved (16M) > 1161216 195081904 6 ms-basic-data (93G) > 196243120 336 - free - (168K) > 196243456 1685504 7 !de94bba4-06d1-4d40-a16a-bfd50179d6ac (823M) > 197928960 4096 - free - (2.0M) > 197933056 10485760 8 freebsd-ufs (5.0G) > 208418816 10485760 9 freebsd-ufs (5.0G) > 218904576 16777216 10 freebsd-swap (8.0G) > 235681792 83886080 11 freebsd-ufs (40G) > 319567872 83886080 12 freebsd-zfs (40G) > 403453952 83886080 13 freebsd-zfs (40G) > 487340032 83886080 14 freebsd-ufs (40G) > 571226112 83886080 15 freebsd-ufs (40G) > 655112192 345102991 16 ms-basic-data (165G) > > であって、 ada0p8 には UEFIブート可能な FreeBSD10.3を入れてあったのでし > た。で実際「異常状態」から > > OK boot > > とやると、その10.3が起動できました。また「正常状態」から > > OK set currdev=disk1p8: > OK boot > > とやるとやはり ada0p8の10.3が起動できました。(正常状態は外付けUSBディス > クから起動しているので、外付け(da0)が disk0, 内臓(ada0)が disk1 となって > いる。) > > 以上の結果から、私は以下のように推理します。 > > いずれの状態でも、 OK プロンプトが出る前(正常状態の場合「Welcome to > FreeBSD」が出る前)までに「どこか」から「何か」を読み込んでいる。「どこか」 > は正常状態の場合は zfs:zroot/ROOT/default: 、異常状態の場合にはada0p8 の > ufs で、このために loader.efi の挙動に違いが生じる。内臓ディスクから起動 > した場合でもloader.efi が 「何か」を ada0p8 ではなく、 ada0p13 にある > zfs:NEWPOOLNAME/ROOT/default の方から読み込んでくれれば問題解決できるだ > ろう。 > > 解決法ですが、「正常状態」の showコマンドで表示される > > bootenvs[0]=zfs:zroot/ROOT/default > bootenvs_count=1 > > が気になります。ひょっとして /efi/freebsd/loader.env に何か書いておくと > > bootenvs[0]=zfs:NEWPOOLNAME/ROOT/default > > に設定できて「何か」をこっちから読んでくれるのでないかな?と期待したくな > ります。 > > loader.efi も loader.conf もドキュメント化されていないので、最早コードを > 読んで解読するしかなさそうですが、私の手には余ります。 > > 何かわかったらお知らせください。 > > -------- > 丸山 直昌 まるやま なおまさ > メールアドレス: masa@amogha.jp > -- 青木 知明 [Tomoaki AOKI] <junchoon@dec.sakura.ne.jp>