Yes. What you're describing is a classic PXE boot + NFS root setup. The machine doesn't actually boot from NFS directly—the process looks like this:
- The NIC performs a PXE boot using DHCP.
- DHCP tells it where to download a bootloader (or UEFI boot program).
- The bootloader downloads a Linux kernel and initramfs via TFTP or HTTP.
- The kernel mounts a designated NFS export as its root filesystem and continues booting.
The "which NFS share should this machine boot?" decision can be made in several ways.
Option 1: By MAC address (most common)
Each network card has a unique MAC address.
In your DHCP server, you create a reservation:
host workstation1 {
hardware ethernet 52:54:00:12:34:56;
fixed-address 192.168.1.100;
filename "grubx64.efi";
next-server 192.168.1.10;
}
Then your bootloader or kernel command line specifies
root=/dev/nfs
nfsroot=192.168.1.10:/exports/workstation1
ip=dhcp
Each machine gets its own root filesystem.
Option 2: By DHCP options
Instead of changing the kernel command line, DHCP can send different boot parameters depending on the client.
Many PXE environments support host-specific configuration.
Option 3: By PXELINUX filename
PXELINUX searches for configuration files in this order:
01-52-54-00-12-34-56
C0A80164
C0A801
default
where the first filename is the MAC address.
So you simply create
pxelinux.cfg/
default
01-52-54-00-12-34-56
and that configuration points to the appropriate NFS root.
Option 4: GRUB
If using UEFI, GRUB can do something similar.
You can provide different grub.cfg files or use scripting to select the correct kernel command line.
Option 5: iPXE
iPXE is considerably more flexible.
It automatically knows things like
${mac}
${serial}
${uuid}
${asset}
You can even have it fetch a script:
#!ipxe
chain http://server/boot.php?mac=${mac}
The server returns a script customized for that machine.
If you have many diskless machines
A common arrangement is
DHCP
↓
iPXE
↓
Linux kernel
↓
mount:
192.168.1.10:/nfs/clients/52-54-00-12-34-56
or
/nfs/clients/hostname
or
/nfs/clients/serial-number
The boot server chooses the path based on the client's identity.
Shared vs. individual root filesystems
You have two main approaches:
Shared read-only root
/exports/rootfs
All machines mount the same filesystem, with writable directories provided via tmpfs, overlay filesystems, or separate mounts.
This is common for thin clients and compute clusters.
Per-machine root
/exports/client1
/exports/client2
/exports/client3
Each machine has its own persistent filesystem and behaves much like it has its own local disk.
For a modern amd64 UEFI system, a practical stack would be:
- DHCP server (e.g., ISC DHCP or Kea)
- iPXE (or GRUB EFI) as the network bootloader
- Kernel and initramfs served over HTTP (generally faster and simpler than TFTP)
- NFSv4 exports for the root filesystem
- Machine identification by MAC address (or UUID if preferred)
This setup scales well from a single diskless workstation to dozens or hundreds of systems.