diary/Kojima

・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 な世界なのかも知れん..


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-12-17 (金) 16:35:41