・initramfs
年明けくらいから initramfs 回りをあれこれいじって,何とか initramfs 上 で SCSI や RAID 用のモジュールを組み込んで起動できるようになったので備忘録用のメモ.
今までインストーラを作る時は,
あらかじめ適当なサイズのファイルを用意→ファイル上にファイルシステムを 作成→loopback でマウントしてファイルやスクリプトの操作→umount してファ イルシステムを圧縮
みたいな手順が必要だったが,これを一つのディレクトリに必要なファイルを固めて
# find . | cpio -c -o | gzip > newinitrd.gz
みたいに作れるのはかなり便利.
#!/bin/nash mount -t proc /proc /proc setquiet echo Mounted /proc filesystem echo Mounting sysfs mount -t sysfs /sys /sys # echo Creating /dev # mount -o mode=0755 -t tmpfs /dev /dev # mknod /dev/console c 5 1 # mknod /dev/null c 1 3 # mknod /dev/zero c 1 5 # mkdir /dev/pts # mkdir /dev/shm # echo Starting udev # /sbin/udevstart # echo -n "/sbin/hotplug" > /proc/sys/kernel/hotplug echo "Loading SCSI modules" insmod /lib/scsi_mod.ko insmod /lib/sd_mod.ko insmod /lib/mptbase.ko insmod /lib/mptscsih.ko sleep 5 echo "Loading md modules" insmod /lib/md.ko insmod /lib/raid1.ko mdadm -A /dev/md0 sleep 10 echo "Loading LVM modules" insmod /lib/dm-mod.ko mkdmnod sleep 30 lvm vgscan --ignorelockingfailure lvchange -ay --ignorelockingfailure /dev/MyLV/lvol0 sleep 30 echo Creating root device mkrootdev /dev/root echo Mounting root filesystem mount -o defaults --ro -t reiserfs /dev/root /sysroot sleep 10 echo Switching to new root switchroot --movedev /sysroot
mkdmnod とか mkrootdev,switchroot は nash が提供している機能だが,イマ イチ何をどう操作しているのか分らない.man ページくらいしか解説がない のでソースを見るしかないかな.
initramfs の正式な解説文書も 2.6.15 になって ようやく Documents/filesytem に入った(これがあったのでイジる気になった)ような ところだから,ある意味 black magic な世界なのかも知れん..