Re: rEFInd - a UEFI boot selector
- In reply to: masa_a_amogha.jp ($B4];3D>>;(B): "rEFInd - a UEFI boot selector"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sun, 02 Oct 2022 08:31:45 UTC
On Sat, 24 Sep 2022 18:23:11 +0900
masa@amogha.jp (丸山直昌) wrote:
> 年金生活者 丸山です。
>
> Subject を変えて、私が抱えている問題を説明し、お知恵をお借りしたいと思い
> ます。絶滅危惧種の legacy BIOSのみのマシンのことは無視して、話を UEFI マ
> シンに限定したいと思います。
>
> 困っていることを手短に書くと
>
> https://efi.akeo.ie/downloads/efifs-1.9/x64/zfs_x64.efi
>
> を rEFInd のドライバとして使っても動かない
>
> という事です。ufs2_x64.efi の方は期待通りに動くのですが、、、。
>
> 以下ちょっと長くなりますが、誰にでもわかるように詳しく説明したいと思いま
> す。
>
> 欲しいのは gpt スキーム上にある複数の FreeBSD を選択的に起動する仕組みで
> す。いわゆる multi-bootの話の一環です。世の中には一つのディスク上に
> Windows, Linux, Ubunstu, Debian など、何種類ものOSを載せて、「どれでも起
> 動できる」と威張っている人がいますが、ここで話題にするのはそれとはちょっ
> と違っています。「複数の FreeBSD を選択的に起動する」というのは、複数の
> OSを、各OS一個ずつのパーティションがある中から選択的に起動することに比べ
> て意外なほど面倒なのです。
>
> https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=207940
> https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=229770
>
> などを見ると、野中さん、青木さん、Masachika ISHIZUKAさん等が長い年月に渡っ
> てこの問題に関心をお持ちのことがわかります。ですが、これら諸先輩方のよう
> にboot1.efi や loader.efi にパッチを当てるやり方は、私の手に余ります。と
> ても真似はできません。
>
> 私は長い間この問題への対処として仕方なく gnu grub2 を使っていましたが、
> 本当のところこの方法は気に入りません。その理由は別途説明したいと思います
> が、最近試しているrEFIndを使う方法について、わかったことを以下に少し説明
> したいと思います。rEFIndは FreeBSD外のソフトウェアなので恐縮ですが、、、。
>
> ESP の/EFI/BOOT/REFIND.CONF に
>
> menuentry "loader.efi of FreeBSD13.1" {
> loader /EFI/Boot/loader.efi
> icon /EFI/Boot/ICONS/os_freebsd.png
> options "rootdev=zfs:fbsd131/ROOT/default:"
> }
>
> のように options を指定するやり方は、先日のメールに書いた通り、何故か成
> 功しませんでした。
>
> https://www.ish.org/blog/?p=2271 には
>
> P.P.S. refind 0.12.0が不調な原因が判りました。optionsでloader.efiに
> parameterを渡す際に、最初のパラメータが正常に渡らないようです。optionsの
> 2番目以降のパラメータは正常に渡りますので、optionsの最初にdummyのパラメー
> タを追加すれば一応0.12.0も動きます。
>
> という話が書いてありますが、
>
> options "rootdev=zfs:fbsd131/ROOT/default: rootdev=zfs:fbsd131/ROOT/default:"
>
> と書いてもダメでした。
>
> 次に試したのは
>
> https://www.starlink.jp/freebsd/boot-from-another-fbsd-partition/
>
> にある volume を指定する方法です。私がやった実験の状況は以下の通りです。
>
> % gpart show ada0
> => 34 1953525101 ada0 GPT (932G)
> 34 1600 1 bios-boot (800K)
> 1634 414 2 freebsd-boot (207K)
> 2048 204800 3 efi (100M)
> 206848 6291456 4 freebsd-ufs (3.0G)
> 6498304 6291456 5 freebsd-zfs (3.0G)
> 12789760 6291456 6 freebsd-ufs (3.0G)
> (以下略)
>
> となっている状況で、 REFIND.CONF には
>
> menuentry "ufs2 driver test ada0p6" {
> volume 521461b8-3b05-11ed-9405-3417eb9e0b90
> loader /boot/loader.efi
> icon /boot/images/freebsd-logo-rev.png
> }
>
> というエントリを作っておきます。ここに volume の行にある長い数字の羅列は
> ada0p6 の rawuuid で、gpart list で調べることができます。
>
> 14. Name: ada0p6
> Mediasize: 3221225472 (3.0G)
> Sectorsize: 512
> Stripesize: 4096
> Stripeoffset: 0
> Mode: r1w1e1
> efimedia: HD(6,GPT,521461b8-3b05-11ed-9405-3417eb9e0b90,0xc32800,0x600000)
> rawuuid: 521461b8-3b05-11ed-9405-3417eb9e0b90
> rawtype: 516e7cb6-6ecf-11d6-8ff8-00022d09712b
> label: (null)
> length: 3221225472
> offset: 6548357120
> type: freebsd-ufs
> index: 6
> end: 19081215
> start: 12789760
>
> 更に、 ESP に /EFI/BOOT/drivers というディレクトリを作って、
>
> https://efi.akeo.ie/downloads/efifs-1.9/x64/
>
> から取ってきた ufs2_x64.efi を入れておきます。これで rEFInd を起動して選
> 択メニューから "ufs2 driver test ada0p6" を選びますと、ちゃんと「Welcome
> to FreeBSD」が表示されます。そこで メニューエントリ3を選んで
>
> OK show
>
> とやると、 currdev, loaddev ともに値が disk2p6: になっています(外付け
> USB disk を2台接続しているために disk2がada0)。rootdev はありません。こ
> の結果に私は小躍りしました。rEFInd は ada0p6 の /boot/loader.efi を起動
> しているわけで、OK bootとやるか、或いは「Welcome to FreeBSD」画面をその
> ままタイムアウトさせると ada0p6 からカーネルをロードしてスタートさせます。
> ada0p4にある /boot/loadef.efi が ada0p6にあるカーネルをロードするわけで
> ないのです。これにより、バージョンが異なる FreeBSD をいくつか持っている
> gptスキームのディスクで、loader.efi の挙動も含めて各バージョンの動きを再
> 現できることになります。
>
> しかし喜んだのもつかの間。 zfs のパーティションで同じことをしようと同じ
> サイトから zfs_x64.efi を持ってきて /EFI/BOOT/drivers に入れてみましたが、
> 成功しませんでした。
>
> 困った。
>
> --------
> 丸山 直昌 まるやま なおまさ
> メールアドレス: masa@amogha.jp
青木@名古屋です。
rEFIndは全く経験が無く、現在新たに調べて試してみる余力がないの
ですが、ご入用ならBug 207940のパッチ適用済のboot1.efiをお送り
しますよ。
最新の野中さんのパッチを適用したものは、`gpart list`で表示される
rawuuidを見て選択する形、
私のパッチ(アップロードしていませんが、野中さんのものに倣って
proto.cだけにパッチを当てれば良いように微修正したもの)は
インターフェース毎にUEFIファームウェアが何番のディスクと
認識しているかの番号とその中のパーティション番号との組合せから
選択する形です。
いずれも0がデフォルトで起動されるパーティションを受け入れる
場合で、それ以外は1~9とA~Zで計35個以内の候補から選択、
一旦停止してよく見たければスペースを押せばタイマーが停止
します。 何もしなければ10秒後に0を押したのと同様に起動します。
両方とも、stable/13でビルドし、loader.envが存在しない状態で
stable/13もmainも起動できます。
但し、
・最後にzpool upgradeを行ったのは、stable/13が作成された
直後(mainとstable/13のZFS関係のコードが100%一致している
状況)にmainとstable/13(stable/12から移行)双方のpoolを
upgrade。
・テストしたのは、stable/13のドライブはZFSのみ、mainのドライブは
UFSの後ろにZFSがあり、UFSの方はZFSのROOTFSをrootとして
マウントしようとするようにしてあるものの、あえてエラーに
なるよう古いままにしてある状態の環境です。
・NVMeのドライブは、FreeBSDのsrcに取り込まれているUEFI関係の
ヘッダが古いためNVMe(NVM Express namespace messaging
device path node)の定義が存在せず、私のものでは表示上
diskにフォールバックし、番号も通常とかけ離れた番号が出る。
・野中さんの方だと、どのrawuuidがどのドライブか覚えておく
必要がある。
ので、それでもよろしければ。
--
青木 知明 [Tomoaki AOKI] <junchoon@dec.sakura.ne.jp>