年金生活者 丸山です。
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]