operator runbook

host nfsd

While the pool still lives on Unraid, the host owns port 2049. The container does not. The flash hook must call bash.

FAT32 cannot execute your persist script

Unraid /boot is a FAT32 flash drive. A bare path in /boot/config/go prints Permission denied on the console and leaves NFS down. Always:

( sleep 45; bash /boot/config/plugins/fast-models/host-nfs-export.sh ) &

Install the hook

  1. Copy scripts/host-nfs-export.sh to /boot/config/plugins/fast-models/.
  2. Set UUID= on that copy to your pool’s blkid value. The repo copy is a placeholder on purpose.
  3. Add the bash line above to /boot/config/go after emhttp.
  4. Leave Unraid Settings → NFS off. Array shares stay SMB.

What the script does

  1. Host-mounts the Btrfs UUID at /mnt/ai-data if that path is not already a mount.
  2. Writes /etc/exports for that path only (fsid=0).
  3. Starts host nfsd / rpcbind if :2049 is quiet.
  4. exportfs -v.

Do not

ActionWhy
Exec the script from goFAT32 → Permission denied
chmod +x on /bootMode does not survive
rc.nfsd start aloneEmpty export table
Enable Settings → NFSFights shareNFSEnabled=no
Container ENABLE_NFS=1Often misses host rpcbind; macOS fails

After a reboot

/etc/rc.d/rc.nfsd status
findmnt /mnt/ai-data
test -f /mnt/ai-data/.fast-models-info && cat /mnt/ai-data/.fast-models-info
showmount -e localhost
ss -lntp | grep -E ':2049|:111'

Console Permission denied on a startup script → grep host-nfs /boot/config/go. If the line has no bash, that is the bug. If /mnt/ai-data is an empty placeholder and the container is healthy, the host mount is missing — run the script with bash, do not start nfsd first.

Linux client — NFSv4.2

fsid=0 means the mount path is /:

sudo mkdir -p /mnt/ai-data
sudo mount -t nfs -o vers=4.2,rsize=1048576,wsize=1048576,hard,noatime,nconnect=4 \
  <nas-host-ip>:/ /mnt/ai-data
test -f /mnt/ai-data/.fast-models-info && echo OK
<nas-host-ip>:/  /mnt/ai-data  nfs  vers=4.2,rsize=1048576,wsize=1048576,hard,noatime,nconnect=4,_netdev,x-systemd.automount  0  0

macOS client — NFSv3

sudo mkdir -p /Volumes/ai-data
sudo mount_nfs -o resvport,vers=3,tcp,rw,hard,intr \
  <nas-host-ip>:/mnt/ai-data /Volumes/ai-data
test -f /Volumes/ai-data/.fast-models-info && echo OK

Until a dedicated host

Keep NVMes unassigned. Host nfsd owns 2049. Container ENABLE_NFS=0. Array shares SMB. go uses bash. When the pool moves, Unraid becomes just another NFS client.

Markdown twin: docs/UNRAID_NFS_PERSIST.md