Next
Previous
Contents
An NFS-mounted root filesystem is typically most useful in two situations:
-
A system administrator may wish to aggregate storage for multiple workstations in order to simplify maintenance, improve security and reliability, and/or make more economical use of limited storage capacity. In this scenario, a single, large server may host a dozen or more workstations; all of the systems can be regularly backed up from a central location, and individual clients are less prone to damage by unsophisticated users or attack by malicious parties with physical access. (Of course, if the server itself is compromised, then so are all of the clients.)
-
An embedded system may not have a disk, an IDE interface, or even a PCI bus. Even if it does, during development it may be too unstable to use the disk, and a ramdisk may be too small to include all of the necessary utilities or too large (as a part of the kernel image) to allow for rapid turnaround during testing and development. An NFS root allows quick kernel downloads, helps ensure filesystem integrity (since the server is basically impervious to crashes by the client), and provides virtually infinite storage.
(In this document we'll use the terms
client
and
workstation
interchangeably.)
However, there are two small problems from the client's perspective:
-
It must find out its own IP address and possibly also the rest of the ethernet configuration (gateway, netmask, name servers, etc.).
-
It must know or discover both the IP address of the NFS server and the mount path (on the server) to the exported root filesystem.
The current implementation of
NFSROOT
in the Linux kernel (as of 2.4.x) allows for several approaches, including:
-
The complete ethernet configuration, including the
NFS
-path to be mounted, may be passed as parameters to the kernel via
LILO
,
LOADLIN
, or a hard-coded string within
linux/arch/i386/kernel/setup.c
(or its equivalent for other architectures).
-
The IP address may be discovered by
RARP
and the
NFS
-path passed via kernel parameters.
-
The IP address may be discovered by
RARP
, with the
NFS
-path derived from the
RARP
server and the just-granted IP address (loosely speaking, ``
mount -t nfs <
RARP-server
>:/tftpboot/<
IP-address-of-client
>/dev/nfs
'').
-
The client configuration may be discovered by
BOOTP
.
-
The client configuration may be discovered by
DHCP
.
Since the most common dynamic-address protocol these days is DHCP, its addition as an option in kernels 2.2.19 and 2.4.x (3 < x <= 14) is particularly welcome.
Before starting to set up a diskless environment, you should decide if you will be booting via
LILO
,
LOADLIN
, or a custom, embedded bootloader. The advantage of using something like
LILO
is flexibility; the disadvantage is speed--booting a Linux kernel without
LILO
is faster. This may or may not be a consideration.
Next
Previous
Contents