丸山です。
loader.efi の挙動を理解するために行った「大袈裟な」実験の続きです。
実験3
ada0p4(ufs, 純正ロゴ)
ada0p5(zfs, 純正ロゴ)
ada0p6(ufs, 偽ロゴ)
ada0p7(zfs, 偽ロゴ)
をすべて復活させ、 ada0p4 の loader.conf の zfs_load="YES" を削除して
loader.efi を起動する。
3.0 何もせず、Welcome 画面でタイムアウトさせる
==> ada0p4上のシステムが起動
3.1 OK boot
==> ada0p4上のシステムが起動
以上二つの場合、システム起動後に kldstat で見ると zfs.ko は無い。
(ada0p4の /etc/rc.conf に zfs_enable="YES" は無い)
3.2 OK set currdev=zfs:zboot1/ROOT/default:
OK boot
==> 画面には大量のメッセージ、通常のシステム起動時に見られる dmesg
と同種のもの、が流れるが最終的に mountroot> プロンプトで止まる。
止まる前の10行ほどを見ると
Loader variables:
vfs.root.mountfrom=zfs:zboot1/ROOT/default
Manual root filesystem specification:
などが見える。mountroot> プロンプトに対して zfs:zboot1/ROOT/default
と入力すると
Trying to mount root from zfs:zboot1/ROOT/default []...
Mounting from zfs:zboot1/ROOT/default failed with error2: unknown file system
となって成功しない。
3.3 OK set currdev=disk2p6:
OK boot
==> ada0p6上のシステムが起動。システム起動後に kldstat で見ると zfs.ko は無い。
3.4 OK set currdev=zfs:zboot2/ROOT/default:
OK boot
==> 3.2と同様成功しない。
3.5 OK set currdev=zfs:fbsd131pc06/ROOT/default:
OK boot
==> 3.2と同様成功しない。
なお、3.2, 3.4, 3.5 で mountroot> プロンプトが出たところで、
ufs:/dev/ada0p4 と入力すると adap04 のシステムが起動する。
ada0p4 の /etc/rc.conf に zfs_enable="YES" を入れても 3.2 〜3.5 の結果
は 変わらない。3.0, 3.1 では kldstat で zfs.ko が表示される。
実験4
ada0p4 を削除し、
ada0p5 の loader.conf の zfs_load="YES" を削除
4.0 何もせず、Welcome 画面でタイムアウトさせる
==> 3.2と同様症状で成功しない。
4.1 OK boot
==> 3.2と同様症状で成功しない。
OK プロンプトから show コマンドで見ると、 loaddev と currdev の値は
zfs:zboot1/ROOT/default: となっている。rootdev という変数は見当たらない。
4.2 OK set currdev=disk2p6:
OK boot
==> ada0p6 のシステムが正常起動する。起動後に kldstat で見ると
zfs.ko は無い。
4.3 OK set currdev=zfs:zboot2/ROOT/default:
OK boot
==> 3.2と同様症状で成功しない。
4.4 OK set currdev=zfs:fbsd131pc06/ROOT/default:
OK boot
==> 3.2と同様症状で成功しない。
ada0p5 の /etc/rc.conf に zfs_enable="YES" を入れても 4.0 〜 4.4 の結
果は 変わらない。
注目すべきは 4.2, 4.3 あたりでしょう。
私は8月中にこのMLに書いた時点では勘違いしていたのですが、 mountroot> プロ
ンプトは loader.efi では無く、 kernel が出しているわけですよね。一連の実
験は loader.efi は zfs を読むことができることを示していますが、
loader.efi がカーネルをロードしたとき、そのカーネルが zfs を理解できて
ルートファイルシステムとしてマウントできるかどうかは、カーネルに付随して
zfs.ko がロードされているかどうかにかかっていて、それはloader.efi が読み
込んだ /boot/loader.conf に zfs_load="YES" があるかどうかによる、という
ことでしょう。カーネルが /etc/rc.conf を読み込むのはルートファイルシステ
ムのマウントが終わった後でしょうから、 /etc/rc.conf にzfs_enable="YES"
を入れても、 /boot/loader.conf に zfs_load="YES" 欠落していることの代用
にはならない、と考えるとすべての辻褄が合います。
--------
丸山 直昌 まるやま なおまさ
メールアドレス: [email protected]