年金生活者 丸山です。

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 に入れてみましたが、
成功しませんでした。

困った。

--------
丸山 直昌 まるやま なおまさ
メールアドレス: [email protected]

Reply via email to