でびあんの initrd (8)
mountroot ですが、scripts/local のナニを以下に。
詳細なソレは微妙なんで、まずざっくり版を以下に。
- scripts/local-top 配下の処理
- ${ROOT} なデバイスファイルが無い場合の wait とエラー処理
- mount 主処理
- FSTYPE 設定
- scripts/local-premount 配下の処理
- roflag 設定
- ${FSTYPE} を modprobe
- no error checking らしい
- mount 処理
- 同様に no error checking らしい
- scripts/local-bottom 配下の処理
という形になっています。FSTYPE 設定において微妙な箇所あり。
# Get the root filesystem type if not set if [ -z "${ROOTFSTYPE}" ]; then eval $(fstype < ${ROOT}) else FSTYPE=${ROOTFSTYPE} fi if [ "$FSTYPE" = "unknown" ] && [ -x /lib/udev/vol_id ]; then FSTYPE=$(/lib/udev/vol_id -t ${ROOT}) [ -z "$FSTYPE" ] && FSTYPE="unknown" fi
${ROOTFSTYPE} が未設定の場合どうなるのだろうか。と。
むむ
微妙なのは ${ROOTFSTYPE} 未設定の場合の以下のソレ。
eval $(fstype < ${ROOT})
fstype は initramfs の中にある。ちなみに break=premount な環境では
/bin/sh: cannot open /dev/hda1: no such file
で、たしかにデバイスファイルはありません。break=mount あたりではどうか。
(initramfs) eval $(fstype < ${ROOT}) (initramfs)
げ。何がどうなのか意味不明。って FSTYPE を echo してみたら
(initramfs) echo $FSTYPE ext3 (initramfs)
成程ですか。ポイント高し。ってか微妙なコマンドだなぁ (わら
で
scripts 配下のナニを確認。まず最初の scripts/local-top 配下から
$ grep PREREQ scripts/local-top/* scripts/local-top/lvm:PREREQ="mdadm mdrun lvm2" scripts/local-top/lvm: echo "$PREREQ" scripts/local-top/mdrun:PREREQ="udev_helper" scripts/local-top/mdrun: echo "$PREREQ" scripts/local-top/udev_helper:PREREQ="" scripts/local-top/udev_helper: echo "$PREREQ" $
ええと
- lvm
- mdadm, mdrun, lvm2 に依存
- mdrun
- udev_helper に依存
- udev_helper
- 依存ナシ
とゆーコトで
- udev_helper
- mdrun
- lvm
の順で呼び出されるはず。
なかなか進まない
まず udev_helper から、とは言え主処理は以下
# If we're booting from IDE, it might not be a PCI controller, # but might be an old fashioned ISA controller; in which case # we need to load ide-generic. if [ ! -e "${ROOT}" -o "${ROOT}" = "/dev/root" ]; then modprobe -q ide-generic fi
- ${ROOT} が存在しない
- ${ROOT} の値が /dev/root
のどちらかだったら ide-generic が modprobe される。
mdrun
明日見ます。mdadm って何だ。それにしても眠い。