桂...@横浜です.

先日分かったのですが, ルートファイルシステムのブロックサイズを64kBにした場
合, ファイルシステムの読み込みに失敗してシステムのブートが出来ないようで
す.

最近SSDの価格が下がってきたこともあり, 次回はシステム領域のSSD化を考えて
SSDで性能が出る64kBブロック(UFSで設定可能な最大値)でルートファイルシステム
を作成し, 7-STABLE(3月前半ぐらいのi386)をインストールしました. インストー
ルしたディスクはHighPoint RR1740でRAID化したもので, これ自体は7.0のころに
正常にブートできた実績のあるものです.

で, インストール後にブートしてみると

Guessed BIOS device 0xffffffff not found by probes, defaulting to disk0:

can't load 'kernel'

と表示されてloaderプロンプトに落ちるという状態になりました. この現象は最近
7.1-STABLEなどで報告されているloaderの不具合と表面上は同じため, 当初は
loaderの不具合と思いました.

ところが以下のような対策を取っても問題は解決せず, 一時暗礁に乗り上げた恰好
になってしまいました.

1. 過去にブートに成功していた古いloaderおよびboot2に入れ替え
   →変化なし

2. loaderを使用せず, boot2の"boot:"プロンプトから/boot/kernel/kernelを直接
   起動
   →カーネル読み込みのくるくるプロンプトの途中で固まる

3. 正常に起動できるIDEディスクを接続し, loaderまで立ち上がったところから
   loaderプロンプトでrootdevおよびcurrdevを設定し直して(この場合, パーティ
   ション/スライスはlsdevで見える)起動
   →loaderがエラーを表示して停止. lsコマンドでファイルシステムを見ようと
     しただけでも停止

どうしようも無くなったところで, 正常に起動するディスクはUFSデフォルトの
16kBブロックでnewfsしていたことを思い出し, 16kBブロックでnewfsしなおして
インストールしなおしたところ, 全く問題無くブート出来てしまいました.
loaderもカーネルと同様に, 64kBブロックのUFSでは不完全な状態で読み込みが行
われ, パーティション/スライスが正常に読めないといった異常動作を起こしてい
たみたいです.

どうもブートプログラムの内, 64kBブロックのUFSの読み込み部分が怪しそうなの
で sys/boot/common/ufsread.c あたりをざっと読んでみたのですが, ぱっと見で
は最大ブロックサイズ(64kB)までは考慮した作りになっていそうな雰囲気です.

そこで質問なのですが, 標準のブロックサイズ以外のUFSでブートに成功したとい
う例は無いでしょうか? もしかしたら私の環境が原因かもしれませんし. あるいは
ソースの調べるポイントは他に無いでしょうか?

-- 
Katsurajima "Raven" Naoto(桂島 直人)
Family Emblem: Circle and Left 3 Clove-TOMOE(丸に左三つ丁子巴)
e-mail: ra...@katsurajima.jp

メールによる返信