dracutでNFS rootfsにtmpfs upperのoverlay rootを作る
Posted:
dracutでNFS rootfsにtmpfs upperのoverlay rootを作る
目的
PXE boot した Linux client で、NFS rootfs を lower とし、client 側 tmpfs を upper/work にした overlay root を作る。
rootfs の差分は reboot で破棄し、base rootfs は server 側で一元管理する。
現行構成
kernel cmdline では NFS root と overlayfs を指定する。
root=nfs4:192.0.2.1:/rootfs/20260601,vers=4.2,proto=tcp ip=dhcp rd.neednet=1 rd.overlayfs=1
192.0.2.1 は例示用である。実機の OpenWrt/PXE では外部 inventory の openwrt_gentoo_server_host から root server を決め、openwrt_lan_ipaddr や ansible_host への暗黙 fallback に頼らない。
dracut の overlayfs module は、NFS rootfs を lower として、client 側に upper/work を作る。
lower: NFS rootfs
upper: /run/overlayfs
work: /run/ovlwork
root: LiveOS_rootfs
旧方式との差分
古い構成では、rootovl や独自 hook で root overlay を作ることがある。
ただし、remote upper/work を使うと、base rootfs の更新を古い upper が隠す。client ごとの差分も残り続けるため、再現性が落ちる。
PXE client を disposable root として扱うなら、upper/work は client local tmpfs に置き、boot ごとに作り直す方が単純である。
initramfs生成
Gentoo rootfs で dracut を使う場合、NFS root と overlayfs に必要な module / package を rootfs 側へ入れる。
emerge --ask sys-kernel/dracut net-fs/nfs-utils
dracut --no-kernel --add-drivers overlay -f /boot/initramfs-pxe.img
router や build host 上の chroot で initramfs を作る場合、その環境には対象 kernel の /lib/modules/<version> が無いことがある。その場合は --no-kernel 前提にし、kernel module set は rootfs / TFTP artifact の release と揃える。
確認手順
boot 後:
cat /proc/cmdline
findmnt -no TARGET,SOURCE,FSTYPE,OPTIONS /
grep -nE 'rd.overlayfs|LiveOS_rootfs|overlayfs' /run/initramfs/rdsosreport.txt
initramfs の中身:
lsinitrd /boot/initramfs-pxe.img | grep -E 'overlay|nfs|network'
TFTP server 側:
grep -nE 'initramfs|kernel|cmdline' /var/log/tftp.log
切り分け
/ が read-only のままなら、次を分けて見る。
rd.overlayfs=1が kernel cmdline にあるか。- initramfs に overlayfs module / hook が入っているか。
- NFS rootfs mount は成功しているか。
- overlay mount の source が
LiveOS_rootfsになっているか。 - upper/work が client local tmpfs にあるか。
注意点
- Option 224 などの runtime metadata は root overlay 選択に使わない。
/etcだけ overlay する案は、/var/libや/var/logが read-only のままになりやすく、PXE root 全体の disposable 運用には向きにくい。- NFS lower を更新した直後、起動済み client は stale file handle を持つことがある。必要なら reboot で lower を掴み直す。