How Debian Boots Diskless Workstations Over NFS

Debian supports diskless workstations by leveraging standard network booting protocols—primarily PXE, DHCP, and TFTP—alongside an exported Network File System (NFS) root tree. Instead of reading an operating system from an internal drive, a client machine queries the network for an IP address, retrieves the Debian Linux kernel and initial RAM disk (initramfs) via TFTP, and subsequently mounts its complete root filesystem (/) over NFS. This architecture centralizes system administration, reduces hardware costs, and simplifies workstation deployment.

The Boot Process Workflow

The process of booting a diskless Debian workstation involves four primary stages:

  1. Network Initialization (DHCP): The workstation initiates a Preboot Execution Environment (PXE) request. The DHCP server provides an IP address along with the next-server option (specifying the TFTP server address) and the bootloader file name.
  2. Network Bootloader Retrieval (TFTP): The client contacts the TFTP server to download the network bootloader, such as PXELINUX, iPXE, or network-enabled GRUB.
  3. Kernel and Initramfs Transfer: The bootloader downloads the Debian kernel (vmlinuz) and the initial RAM disk (initrd.img) into the workstation's memory and executes the kernel.
  4. Root Filesystem Mounting (NFS): During the boot phase, the kernel initializes the network interface using configuration parameters passed via the kernel command line. The Debian initramfs mounts the remote NFS export as the root filesystem and hands control over to systemd to initialize user space.

Building the NFS Root with Debootstrap

Debian provides native tools to generate a clean, self-contained root filesystem for network sharing. The standard method utilizes debootstrap:

  • Administrators run debootstrap on the server to install a minimal Debian base system into an export directory (e.g., /srv/nfs/debian-root).
  • Packages required for workstation operation—such as desktop environments, standard system utilities, and drivers—are installed directly into the target environment via chroot.
  • The server exports this directory to the local network using nfs-kernel-server through /etc/exports, typically configuring read-only or read-write parameters depending on deployment needs.

Debian Initramfs Configuration

The critical bridge between the kernel boot and the NFS environment is Debian's initramfs-tools framework. Debian builds initramfs images capable of network configuration out of the box.

When generating the initramfs for network booting, initramfs-tools includes NFS client modules and network configuration scripts. The behavior is controlled through kernel boot arguments passed by the network bootloader:

  • ip=dhcp: Tells the kernel and initramfs to configure the network interface using DHCP before mounting root.
  • root=/dev/nfs: Directs the initramfs to expect a network-mounted root directory.
  • nfsroot=<server-ip>:<export-path>,<options>: Defines the target NFS server and export location, along with NFS version and transfer protocol parameters (e.g., vers=4,tcp).

File System Sharing and Volatile Storage

A challenge in diskless environments is handling directories that require write operations, such as /var, /run, and /tmp. Debian handles this in two common ways:

  • Dedicated Client Trees: Each workstation receives its own read-write NFS export. While straightforward, this requires significant storage on the host server.
  • Shared Read-Only Root with OverlayFS: A single base Debian system is exported read-only to all clients. During the initramfs boot stage, the client uses an OverlayFS mount combining the read-only NFS root with a memory-backed tmpfs layer. This allows every workstation to share identical base files while writing temporary logs, caches, and configuration changes exclusively to local RAM.