nfsroot.txt 9.5 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3 4 5
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>
6
Updated 2006 by Nico Schottelius <nico-kernel-nfsroot@schottelius.org>
7
Updated 2006 by Horms <horms@verge.net.au>
L
Linus Torvalds 已提交
8 9 10



11 12 13
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/
14
ramfs-rootfs-initramfs.txt), a ramdisk (see Documentation/initrd.txt) or a
15 16
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
L
Linus Torvalds 已提交
17 18 19 20 21 22 23 24
diskless system, and 'server' means the NFS server.




1.) Enabling nfsroot capabilities
    -----------------------------

25 26 27 28 29 30 31
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.
L
Linus Torvalds 已提交
32 33 34 35 36 37 38




2.) Kernel command line
    -------------------

39 40 41 42
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:
L
Linus Torvalds 已提交
43 44 45 46 47 48 49 50 51 52 53


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>]

54 55
  If the `nfsroot' parameter is NOT given on the command line,
  the default "/tftpboot/%s" will be used.
L
Linus Torvalds 已提交
56

57 58 59 60
  <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.
L
Linus Torvalds 已提交
61

62 63 64 65
  <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.
L
Linus Torvalds 已提交
66 67

  <nfs-options>	Standard NFS options. All options are separated by commas.
68
		The following defaults are used:
L
Linus Torvalds 已提交
69
			port		= as given by server portmap daemon
70 71
			rsize		= 4096
			wsize		= 4096
L
Linus Torvalds 已提交
72 73 74 75 76 77 78 79 80 81 82 83
			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>

  This parameter tells the kernel how to configure IP addresses of devices
84 85 86 87
  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.
L
Linus Torvalds 已提交
88 89 90

  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
91 92 93 94
  this means that the kernel tries to configure everything using
  autoconfiguration.

  The <autoconf> parameter can appear alone as the value to the `ip'
95 96 97 98 99
  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".

100
  <client-ip>	IP address of the client.
L
Linus Torvalds 已提交
101

102
  		Default:  Determined using autoconfiguration.
L
Linus Torvalds 已提交
103 104 105

  <server-ip>	IP address of the NFS server. If RARP is used to determine
		the client address and this parameter is NOT empty only
106 107 108 109 110 111 112 113 114 115 116 117 118 119
		replies from the specified server are accepted.

		Only required for 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
L
Linus Torvalds 已提交
120
		the netmask is derived from the client IP address assuming
121
		classful addressing.
L
Linus Torvalds 已提交
122

123
		Default:  Determined using autoconfiguration.
L
Linus Torvalds 已提交
124

125 126
  <hostname>	Name of the client. May be supplied by autoconfiguration,
  		but its absence will not trigger autoconfiguration.
L
Linus Torvalds 已提交
127

128
  		Default: Client IP address is used in ASCII notation.
L
Linus Torvalds 已提交
129

130 131 132 133 134 135 136
  <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.
L
Linus Torvalds 已提交
137

138 139 140 141
  <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.
L
Linus Torvalds 已提交
142

143 144 145
		Only autoconfiguration protocols that have been compiled
		into the kernel will be used, regardless of the value of
		this option.
L
Linus Torvalds 已提交
146

147
                  off or none: don't use autoconfiguration
148
		  on or any:   use any protocol available in the kernel
149
			       (default)
150 151 152 153 154
		  dhcp:        use DHCP
		  bootp:       use BOOTP
		  rarp:        use RARP
		  both:        use both BOOTP and RARP but not DHCP
		               (old option kept for backwards compatibility)
L
Linus Torvalds 已提交
155

156
                Default: any
L
Linus Torvalds 已提交
157 158 159 160




161 162
3.) Boot Loader
    ----------
L
Linus Torvalds 已提交
163

164 165
To get the kernel into memory different approaches can be used.
They depend on various facilities being available:
L
Linus Torvalds 已提交
166 167


168
3.1)  Booting from a floppy using syslinux
L
Linus Torvalds 已提交
169

170 171 172 173
	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
      	and bzimage images respectively. Both targets accept the
     	FDARGS parameter which can be used to set the kernel command line.
L
Linus Torvalds 已提交
174

175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207
	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/i386/boot/image.iso

     	For more information on isolinux, including how to create bootdisks
     	for prebuilt kernels, see http://syslinux.zytor.com/
L
Linus Torvalds 已提交
208 209

3.2) Using LILO
210 211 212 213 214 215 216 217 218 219
	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.
L
Linus Torvalds 已提交
220

221
3.3) Using GRUB
222 223
	When using GRUB, kernel parameter are simply appended after the kernel
	specification: kernel <kernel> <parameters>
224 225

3.4) Using loadlin
226 227 228 229 230 231 232
	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.
L
Linus Torvalds 已提交
233

234
3.5) Using a boot ROM
235 236 237 238 239 240 241
	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.
L
Linus Torvalds 已提交
242

243
3.6) Using pxelinux
244 245 246 247
	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
248 249
	"kernel <relative-path-below /tftpboot>". The nfsroot parameters
	are passed to the kernel by adding them to the "append" line.
250 251 252 253 254
	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/
255

L
Linus Torvalds 已提交
256 257 258 259 260 261 262 263 264 265 266 267 268 269



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.