dracutでNFS rootfsにtmpfs upperのoverlay rootを作る

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_ipaddransible_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 のままなら、次を分けて見る。

  1. rd.overlayfs=1 が kernel cmdline にあるか。
  2. initramfs に overlayfs module / hook が入っているか。
  3. NFS rootfs mount は成功しているか。
  4. overlay mount の source が LiveOS_rootfs になっているか。
  5. 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 を掴み直す。