丸山です。

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]

Reply via email to