306 lines
11 KiB
Plaintext
306 lines
11 KiB
Plaintext
Mounting the root filesystem via NFS (nfsroot)
|
|
===============================================
|
|
|
|
Written 1996 by Gero Kuhlmann <gero@gkminix.han.de>
|
|
Updated 1997 by Martin Mares <mj@atrey.karlin.mff.cuni.cz>
|
|
Updated 2006 by Nico Schottelius <nico-kernel-nfsroot@schottelius.org>
|
|
Updated 2006 by Horms <horms@verge.net.au>
|
|
|
|
|
|
|
|
In order to use a diskless system, such as an X-terminal or printer server
|
|
for example, it is necessary for the root filesystem to be present on a
|
|
non-disk device. This may be an initramfs (see Documentation/filesystems/
|
|
ramfs-rootfs-initramfs.txt), a ramdisk (see Documentation/initrd.txt) or a
|
|
filesystem mounted via NFS. The following text describes on how to use NFS
|
|
for the root filesystem. For the rest of this text 'client' means the
|
|
diskless system, and 'server' means the NFS server.
|
|
|
|
|
|
|
|
|
|
1.) Enabling nfsroot capabilities
|
|
-----------------------------
|
|
|
|
In order to use nfsroot, NFS client support needs to be selected as
|
|
built-in during configuration. Once this has been selected, the nfsroot
|
|
option will become available, which should also be selected.
|
|
|
|
In the networking options, kernel level autoconfiguration can be selected,
|
|
along with the types of autoconfiguration to support. Selecting all of
|
|
DHCP, BOOTP and RARP is safe.
|
|
|
|
|
|
|
|
|
|
2.) Kernel command line
|
|
-------------------
|
|
|
|
When the kernel has been loaded by a boot loader (see below) it needs to be
|
|
told what root fs device to use. And in the case of nfsroot, where to find
|
|
both the server and the name of the directory on the server to mount as root.
|
|
This can be established using the following kernel command line parameters:
|
|
|
|
|
|
root=/dev/nfs
|
|
|
|
This is necessary to enable the pseudo-NFS-device. Note that it's not a
|
|
real device but just a synonym to tell the kernel to use NFS instead of
|
|
a real device.
|
|
|
|
|
|
nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
|
|
|
|
If the `nfsroot' parameter is NOT given on the command line,
|
|
the default "/tftpboot/%s" will be used.
|
|
|
|
<server-ip> Specifies the IP address of the NFS server.
|
|
The default address is determined by the `ip' parameter
|
|
(see below). This parameter allows the use of different
|
|
servers for IP autoconfiguration and NFS.
|
|
|
|
<root-dir> Name of the directory on the server to mount as root.
|
|
If there is a "%s" token in the string, it will be
|
|
replaced by the ASCII-representation of the client's
|
|
IP address.
|
|
|
|
<nfs-options> Standard NFS options. All options are separated by commas.
|
|
The following defaults are used:
|
|
port = as given by server portmap daemon
|
|
rsize = 4096
|
|
wsize = 4096
|
|
timeo = 7
|
|
retrans = 3
|
|
acregmin = 3
|
|
acregmax = 60
|
|
acdirmin = 30
|
|
acdirmax = 60
|
|
flags = hard, nointr, noposix, cto, ac
|
|
|
|
|
|
ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>:
|
|
<dns0-ip>:<dns1-ip>
|
|
|
|
This parameter tells the kernel how to configure IP addresses of devices
|
|
and also how to set up the IP routing table. It was originally called
|
|
`nfsaddrs', but now the boot-time IP configuration works independently of
|
|
NFS, so it was renamed to `ip' and the old name remained as an alias for
|
|
compatibility reasons.
|
|
|
|
If this parameter is missing from the kernel command line, all fields are
|
|
assumed to be empty, and the defaults mentioned below apply. In general
|
|
this means that the kernel tries to configure everything using
|
|
autoconfiguration.
|
|
|
|
The <autoconf> parameter can appear alone as the value to the `ip'
|
|
parameter (without all the ':' characters before). If the value is
|
|
"ip=off" or "ip=none", no autoconfiguration will take place, otherwise
|
|
autoconfiguration will take place. The most common way to use this
|
|
is "ip=dhcp".
|
|
|
|
<client-ip> IP address of the client.
|
|
|
|
Default: Determined using autoconfiguration.
|
|
|
|
<server-ip> IP address of the NFS server. If RARP is used to determine
|
|
the client address and this parameter is NOT empty only
|
|
replies from the specified server are accepted.
|
|
|
|
Only required for NFS root. That is autoconfiguration
|
|
will not be triggered if it is missing and NFS root is not
|
|
in operation.
|
|
|
|
Default: Determined using autoconfiguration.
|
|
The address of the autoconfiguration server is used.
|
|
|
|
<gw-ip> IP address of a gateway if the server is on a different subnet.
|
|
|
|
Default: Determined using autoconfiguration.
|
|
|
|
<netmask> Netmask for local network interface. If unspecified
|
|
the netmask is derived from the client IP address assuming
|
|
classful addressing.
|
|
|
|
Default: Determined using autoconfiguration.
|
|
|
|
<hostname> Name of the client. May be supplied by autoconfiguration,
|
|
but its absence will not trigger autoconfiguration.
|
|
If specified and DHCP is used, the user provided hostname will
|
|
be carried in the DHCP request to hopefully update DNS record.
|
|
|
|
Default: Client IP address is used in ASCII notation.
|
|
|
|
<device> Name of network device to use.
|
|
|
|
Default: If the host only has one device, it is used.
|
|
Otherwise the device is determined using
|
|
autoconfiguration. This is done by sending
|
|
autoconfiguration requests out of all devices,
|
|
and using the device that received the first reply.
|
|
|
|
<autoconf> Method to use for autoconfiguration. In the case of options
|
|
which specify multiple autoconfiguration protocols,
|
|
requests are sent using all protocols, and the first one
|
|
to reply is used.
|
|
|
|
Only autoconfiguration protocols that have been compiled
|
|
into the kernel will be used, regardless of the value of
|
|
this option.
|
|
|
|
off or none: don't use autoconfiguration
|
|
(do static IP assignment instead)
|
|
on or any: use any protocol available in the kernel
|
|
(default)
|
|
dhcp: use DHCP
|
|
bootp: use BOOTP
|
|
rarp: use RARP
|
|
both: use both BOOTP and RARP but not DHCP
|
|
(old option kept for backwards compatibility)
|
|
|
|
if dhcp is used, the client identifier can be used by following
|
|
format "ip=dhcp,client-id-type,client-id-value"
|
|
|
|
Default: any
|
|
|
|
<dns0-ip> IP address of first nameserver.
|
|
Value gets exported by /proc/net/pnp which is often linked
|
|
on embedded systems by /etc/resolv.conf.
|
|
|
|
<dns1-ip> IP address of second nameserver.
|
|
Same as above.
|
|
|
|
|
|
nfsrootdebug
|
|
|
|
This parameter enables debugging messages to appear in the kernel
|
|
log at boot time so that administrators can verify that the correct
|
|
NFS mount options, server address, and root path are passed to the
|
|
NFS client.
|
|
|
|
|
|
rdinit=<executable file>
|
|
|
|
To specify which file contains the program that starts system
|
|
initialization, administrators can use this command line parameter.
|
|
The default value of this parameter is "/init". If the specified
|
|
file exists and the kernel can execute it, root filesystem related
|
|
kernel command line parameters, including `nfsroot=', are ignored.
|
|
|
|
A description of the process of mounting the root file system can be
|
|
found in:
|
|
|
|
Documentation/early-userspace/README
|
|
|
|
|
|
|
|
|
|
3.) Boot Loader
|
|
----------
|
|
|
|
To get the kernel into memory different approaches can be used.
|
|
They depend on various facilities being available:
|
|
|
|
|
|
3.1) Booting from a floppy using syslinux
|
|
|
|
When building kernels, an easy way to create a boot floppy that uses
|
|
syslinux is to use the zdisk or bzdisk make targets which use zimage
|
|
and bzimage images respectively. Both targets accept the
|
|
FDARGS parameter which can be used to set the kernel command line.
|
|
|
|
e.g.
|
|
make bzdisk FDARGS="root=/dev/nfs"
|
|
|
|
Note that the user running this command will need to have
|
|
access to the floppy drive device, /dev/fd0
|
|
|
|
For more information on syslinux, including how to create bootdisks
|
|
for prebuilt kernels, see http://syslinux.zytor.com/
|
|
|
|
N.B: Previously it was possible to write a kernel directly to
|
|
a floppy using dd, configure the boot device using rdev, and
|
|
boot using the resulting floppy. Linux no longer supports this
|
|
method of booting.
|
|
|
|
3.2) Booting from a cdrom using isolinux
|
|
|
|
When building kernels, an easy way to create a bootable cdrom that
|
|
uses isolinux is to use the isoimage target which uses a bzimage
|
|
image. Like zdisk and bzdisk, this target accepts the FDARGS
|
|
parameter which can be used to set the kernel command line.
|
|
|
|
e.g.
|
|
make isoimage FDARGS="root=/dev/nfs"
|
|
|
|
The resulting iso image will be arch/<ARCH>/boot/image.iso
|
|
This can be written to a cdrom using a variety of tools including
|
|
cdrecord.
|
|
|
|
e.g.
|
|
cdrecord dev=ATAPI:1,0,0 arch/x86/boot/image.iso
|
|
|
|
For more information on isolinux, including how to create bootdisks
|
|
for prebuilt kernels, see http://syslinux.zytor.com/
|
|
|
|
3.2) Using LILO
|
|
When using LILO all the necessary command line parameters may be
|
|
specified using the 'append=' directive in the LILO configuration
|
|
file.
|
|
|
|
However, to use the 'root=' directive you also need to create
|
|
a dummy root device, which may be removed after LILO is run.
|
|
|
|
mknod /dev/boot255 c 0 255
|
|
|
|
For information on configuring LILO, please refer to its documentation.
|
|
|
|
3.3) Using GRUB
|
|
When using GRUB, kernel parameter are simply appended after the kernel
|
|
specification: kernel <kernel> <parameters>
|
|
|
|
3.4) Using loadlin
|
|
loadlin may be used to boot Linux from a DOS command prompt without
|
|
requiring a local hard disk to mount as root. This has not been
|
|
thoroughly tested by the authors of this document, but in general
|
|
it should be possible configure the kernel command line similarly
|
|
to the configuration of LILO.
|
|
|
|
Please refer to the loadlin documentation for further information.
|
|
|
|
3.5) Using a boot ROM
|
|
This is probably the most elegant way of booting a diskless client.
|
|
With a boot ROM the kernel is loaded using the TFTP protocol. The
|
|
authors of this document are not aware of any no commercial boot
|
|
ROMs that support booting Linux over the network. However, there
|
|
are two free implementations of a boot ROM, netboot-nfs and
|
|
etherboot, both of which are available on sunsite.unc.edu, and both
|
|
of which contain everything you need to boot a diskless Linux client.
|
|
|
|
3.6) Using pxelinux
|
|
Pxelinux may be used to boot linux using the PXE boot loader
|
|
which is present on many modern network cards.
|
|
|
|
When using pxelinux, the kernel image is specified using
|
|
"kernel <relative-path-below /tftpboot>". The nfsroot parameters
|
|
are passed to the kernel by adding them to the "append" line.
|
|
It is common to use serial console in conjunction with pxeliunx,
|
|
see Documentation/serial-console.txt for more information.
|
|
|
|
For more information on isolinux, including how to create bootdisks
|
|
for prebuilt kernels, see http://syslinux.zytor.com/
|
|
|
|
|
|
|
|
|
|
4.) Credits
|
|
-------
|
|
|
|
The nfsroot code in the kernel and the RARP support have been written
|
|
by Gero Kuhlmann <gero@gkminix.han.de>.
|
|
|
|
The rest of the IP layer autoconfiguration code has been written
|
|
by Martin Mares <mj@atrey.karlin.mff.cuni.cz>.
|
|
|
|
In order to write the initial version of nfsroot I would like to thank
|
|
Jens-Uwe Mager <jum@anubis.han.de> for his help.
|