update-initramfs
update-iniramfsは,
具体的に呼び出しているのは,
- 注3)
- カーネルパッケージの場合は,
新しいバージョンであっても常に 「新規パッケージのインストール」 になります。これは更新にともなって古いカーネルを上書きしてしまうと, 更新によって起動できなくなった時に, 古いカーネルに戻すことができなくなるためです。
$ ls /etc/kernel/postinst.d/ apt-auto-removal dkms initramfs-tools pm-utils unattended-upgrades update-notifier zz-update-grub
これらのスクリプトは第一引数にカーネルのバージョン,
apt-auto-removalはカーネル更新時に古いカーネルパッケージを自動削除するためのスクリプトで,
unattended-upgradesは/var/
このうち/etc/
$ INITRAMFS_TOOLS_KERNEL_HOOK=1 update-initramfs -c -t -k 3.19.0-23-generic -b /boot
「-c」
$ mkinitramfs -o /boot/initrd.img-3.19.0-23-generic.new 3.19.0-23-generic
mkinitramfs
mkinitramfsコマンドは/tmp以下にInitramfsのためにルートファイルシステムを構築したうえで,
/etc/
コピーするものは各種設定ファイルの中でハードコーディングされています。何か追加や削除したい場合は/etc/
ちなみにBusyBoxは,
$ /usr/lib/initramfs-tools/bin/busybox BusyBox v1.22.1 (Ubuntu 1:1.22.0-9ubuntu1) multi-call binary. (中略) Currently defined functions: [, [[, acpid, ash, awk, basename, blockdev, cat, chmod, chroot, chvt, clear, cmp, cp, cut, deallocvt, devmem, df, dnsdomainname, du, dumpkmap, echo, egrep, env, expr, false, fbset, fdflush, fgrep, find, fstrim, grep, gunzip, gzip, hostname, hwclock, ifconfig, ip, kill, ln, loadfont, loadkmap, ls, lzop, lzopcat, mkdir, mkfifo, mknod, mkswap, mktemp, modinfo, more, mount, mv, openvt, pidof, printf, ps, pwd, readlink, reset, rm, rmdir, sed, seq, setkeycodes, sh, sleep, sort, stat, static-sh, stty, switch_root, sync, tail, tee, test, touch, tr, true, tty, umount, uname, uniq, unlzop, wc, wget, which, yes, zcat
/usr/
Initramfsの起動の流れ
最後に,
カーネルはブートローダーから渡されたInitramfsのアドレスを元に,
rdinitの初期値は/initですので,
「boot=」
マウント済みの/procや/sysをmountコマンドのmoveオプションで/root/以下に移動したら,
実際のルートファイルシステムにchroot(2)で移動したあとですので,
あとはこのInitプログラムに従って起動プロセスが進んでいき,