以前の記事で nfsroot で / に対して fscache (fsc) を有効にする方法を記載していたのだが,これだと initramfs-tools が upgrade されると編集したファイルが上書きされて正常に起動しなくなる.
ということで,もう少しスマートな方法(アプローチは同じ).以下の2つのファイルを用意して,chmod 755 しておく.
[/usr/share/initramfs-tools/hooks/zz-nfsmount]
. /usr/share/initramfs-tools/hook-functions
copy_exec /sbin/mount.nfs /bin/mount.nfs
cp -pnL /usr/share/initramfs-tools/extra/* ${DESTDIR}/bin
[/usr/share/initramfs-tools/extra/nfsmount]
#!/bin/sh
opt=""
while [ "$1" = "-o" ] ; do
opt="$opt $1"; shift
opt="$opt $1"; shift
done
mount.nfs $1 $2 $opt
あとはupdate-initramfs -u -k allとかで initrd 再生成.
/usr/share/initramfs-tools/hooks/zz-nfsmountは以前 /usr/share/initramfs-tools/hooks/klibcの末尾に書いていたもの./usr/share/initramfs-tools/extra/nfsmountは initrd に含める nfsmountの代用 script.やっていることは以下のとおり.
nfsmountは fsc option に対応していないので,/sbin/mount.nfsを initrd に含める./usr/share/initramfs-tools/scripts/nfsを書き換えてnfsmountの代わりに/sbin/mount.nfsを使用すると,initramfs-tools の upgrade の際に悲惨なことになる (/usr/share/initramfs-tools/scripts/nfsがrevertされる)ので,/usr/lib/klibc/bin/nfsmountの代わりに自前のnfsmountを用意して,そこからmount.nfsを実行する(その際 option の一がコマンド末尾になるように細工; ただし option は -o foo 形式のみを想定).