以前の記事で 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 形式のみを想定).