CentOS で試験 (3)
debian の initrd 使えば云々、が昨晩寝る前の結論。
で
色々試行錯誤中。
- 途中で停止していると思っていた
- quiet なパラメータ省略したら処理に時間がかかっているだけだった
- がしかし、結局 root partition がナニでプロンプト表示
- panic しない作りになっている模様 (これはこれでラッキー
- ちなみに sid では exec なキックに失敗したら panic している
- プロンプトから /dev の中を ls してみたら微妙
- /dev/VolGroup00 が無い
- lsmod なコマンドが無い
- /proc/modules 見てみたら lvm なドライバ (dm_*) がナニ
- scripts/local-top に lvm というスクリプトを発見
- scripts/init-top にコピーしてココの diff 手動盛り込み
- conf/modules に insmod したいドライバを列挙すれば良い模様
- dm_mod, dm_snapshot, dm_zero, dm_mirror を記述
- vgchange が bin に無い
- コピーして initrd.img を作成
- まだ root partition が mount されない
- /dev/VolGroup00 はある
- 無理矢理 mount したらできた
- init で mountroot を呼び出してますが何が呼び出されているか不明
- むりやり . /scripts/local を呼び出す
- 中で scripts/local-top を呼んでいる
- mv scripts/init-top/lvm scripts/local-top/lvm してみた
↑今ここ
つづき
上記を盛り込んでリトライ中ですが微妙な箇所で停止してます。debug 付けたら微妙なのかなぁ。カーネルパラメータから quiet を取り除くのみにしてリトライ。
がしかし
Begin: Waiting for root file system... ...
で止まる。状況としては同じっぽい。ここでやたらに時間がかかるんです。なんとかならんかなぁ。
で
プロンプトが出たので見てみたら /dev/VolGroup00 が無い。vgchange されてないのか。よく見たら lvm なスクリプトの中で modprobe しとるな。/etc/modules からエントリを消そうか。
ちなみに vgchange したら /dev/VolGroup00 が見えた。うーん。。。
とりあえず、/etc/modules からエントリを消してリトライしてみる事に。これで dm_* なモジュールが /proc/modules になかったらわしの理解が微妙という事になりますな。
続
なんだか気がついたら initrd なソレの size が 16MB くらいになってるし。
負けずに /boot にコピーして reboot 中。結構時間がかかってプロンプト出力。/proc/modules を見てみたら dm_* は無い。とほほなハマり方だなぁ。
えーと、ちょっと init の中身を修正する事に。
- オプションの root が /dev/VolGroup* だったら BOOT に local セット
- script/local は呼び出さない形
がしかし、_Waiting for root file system... ..._でだんまり。
待つの面倒なのでケツの二行は echo だけさせる方向にすべきか。そりゃええんですが dm_* が /proc/modules にありませんな。当たり前ですが /dev にもデバイスファイルは無い。ちなみにこんなカンジにしてます。
root=*) ROOT=${x#root=} case $ROOT in LABEL=*) ROOT="/dev/disk/by-label/${ROOT#LABEL=}" ;; UUID=*) ROOT="/dev/disk/by-uuid/${ROOT#UUID=}" ;; /dev/nfs) BOOT=nfs ;; /dev/VolGroup*) BOOT=local ;; esac ;;
仕方が無いので boot=local とかしてみる?
駄目
な模様。とりあえずケツの二行のアタマを echo にしといて local の中の mountroot に呼び出しが判別可能な echo を仕込む位しか手立てが無い。
とりあえず盛り込んで再度 reboot。henrich さんが twitter で qemu 云々との事。今からヤると絶対ハマるんで別途。
って以下な出力があるのを確認
Begin: Mounting root file system... ... Begin: Running /scripts/local-top ... Done. Begin: Waiting for root file system... ...
なんでこれを探さなかったのか、と小一時間 (ry
どこでコケてるのかが判明。scripts/local な模様。ええと /dev/VolGroup00/LogVol00 が無いので panic してるのか。しかも panic するまでに結構な秒数 wait してますな。
あら? この時点で modprobe されて vgchange されてないと駄目なのか。
# ってそうなってるのが前提なはずですよね。
続々
えーと、scripts/local-top/lvm にも echo でナニを盛り込んでました。ちょっと確認必要ですね。run_scripts な手続きの定義が以下。
run_scripts() { initdir=${1} get_prereqs reduce_prereqs call_scripts }