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>