diff options
Diffstat (limited to 'Documentation/nfsroot.txt')
-rw-r--r-- | Documentation/nfsroot.txt | 210 |
1 files changed, 210 insertions, 0 deletions
diff --git a/Documentation/nfsroot.txt b/Documentation/nfsroot.txt new file mode 100644 index 000000000000..a87d4af216c0 --- /dev/null +++ b/Documentation/nfsroot.txt | |||
@@ -0,0 +1,210 @@ | |||
1 | Mounting the root filesystem via NFS (nfsroot) | ||
2 | =============================================== | ||
3 | |||
4 | Written 1996 by Gero Kuhlmann <gero@gkminix.han.de> | ||
5 | Updated 1997 by Martin Mares <mj@atrey.karlin.mff.cuni.cz> | ||
6 | |||
7 | |||
8 | |||
9 | If you want to use a diskless system, as an X-terminal or printer | ||
10 | server for example, you have to put your root filesystem onto a | ||
11 | non-disk device. This can either be a ramdisk (see initrd.txt in | ||
12 | this directory for further information) or a filesystem mounted | ||
13 | via NFS. The following text describes on how to use NFS for the | ||
14 | root filesystem. For the rest of this text 'client' means the | ||
15 | diskless system, and 'server' means the NFS server. | ||
16 | |||
17 | |||
18 | |||
19 | |||
20 | 1.) Enabling nfsroot capabilities | ||
21 | ----------------------------- | ||
22 | |||
23 | In order to use nfsroot you have to select support for NFS during | ||
24 | kernel configuration. Note that NFS cannot be loaded as a module | ||
25 | in this case. The configuration script will then ask you whether | ||
26 | you want to use nfsroot, and if yes what kind of auto configuration | ||
27 | system you want to use. Selecting both BOOTP and RARP is safe. | ||
28 | |||
29 | |||
30 | |||
31 | |||
32 | 2.) Kernel command line | ||
33 | ------------------- | ||
34 | |||
35 | When the kernel has been loaded by a boot loader (either by loadlin, | ||
36 | LILO or a network boot program) it has to be told what root fs device | ||
37 | to use, and where to find the server and the name of the directory | ||
38 | on the server to mount as root. This can be established by a couple | ||
39 | of kernel command line parameters: | ||
40 | |||
41 | |||
42 | root=/dev/nfs | ||
43 | |||
44 | This is necessary to enable the pseudo-NFS-device. Note that it's not a | ||
45 | real device but just a synonym to tell the kernel to use NFS instead of | ||
46 | a real device. | ||
47 | |||
48 | |||
49 | nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>] | ||
50 | |||
51 | If the `nfsroot' parameter is NOT given on the command line, the default | ||
52 | "/tftpboot/%s" will be used. | ||
53 | |||
54 | <server-ip> Specifies the IP address of the NFS server. If this field | ||
55 | is not given, the default address as determined by the | ||
56 | `ip' variable (see below) is used. One use of this | ||
57 | parameter is for example to allow using different servers | ||
58 | for RARP and NFS. Usually you can leave this blank. | ||
59 | |||
60 | <root-dir> Name of the directory on the server to mount as root. If | ||
61 | there is a "%s" token in the string, the token will be | ||
62 | replaced by the ASCII-representation of the client's IP | ||
63 | address. | ||
64 | |||
65 | <nfs-options> Standard NFS options. All options are separated by commas. | ||
66 | If the options field is not given, the following defaults | ||
67 | will be used: | ||
68 | port = as given by server portmap daemon | ||
69 | rsize = 1024 | ||
70 | wsize = 1024 | ||
71 | timeo = 7 | ||
72 | retrans = 3 | ||
73 | acregmin = 3 | ||
74 | acregmax = 60 | ||
75 | acdirmin = 30 | ||
76 | acdirmax = 60 | ||
77 | flags = hard, nointr, noposix, cto, ac | ||
78 | |||
79 | |||
80 | ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf> | ||
81 | |||
82 | This parameter tells the kernel how to configure IP addresses of devices | ||
83 | and also how to set up the IP routing table. It was originally called `nfsaddrs', | ||
84 | but now the boot-time IP configuration works independently of NFS, so it | ||
85 | was renamed to `ip' and the old name remained as an alias for compatibility | ||
86 | reasons. | ||
87 | |||
88 | If this parameter is missing from the kernel command line, all fields are | ||
89 | assumed to be empty, and the defaults mentioned below apply. In general | ||
90 | this means that the kernel tries to configure everything using both | ||
91 | RARP and BOOTP (depending on what has been enabled during kernel confi- | ||
92 | guration, and if both what protocol answer got in first). | ||
93 | |||
94 | <client-ip> IP address of the client. If empty, the address will either | ||
95 | be determined by RARP or BOOTP. What protocol is used de- | ||
96 | pends on what has been enabled during kernel configuration | ||
97 | and on the <autoconf> parameter. If this parameter is not | ||
98 | empty, neither RARP nor BOOTP will be used. | ||
99 | |||
100 | <server-ip> IP address of the NFS server. If RARP is used to determine | ||
101 | the client address and this parameter is NOT empty only | ||
102 | replies from the specified server are accepted. To use | ||
103 | different RARP and NFS server, specify your RARP server | ||
104 | here (or leave it blank), and specify your NFS server in | ||
105 | the `nfsroot' parameter (see above). If this entry is blank | ||
106 | the address of the server is used which answered the RARP | ||
107 | or BOOTP request. | ||
108 | |||
109 | <gw-ip> IP address of a gateway if the server is on a different | ||
110 | subnet. If this entry is empty no gateway is used and the | ||
111 | server is assumed to be on the local network, unless a | ||
112 | value has been received by BOOTP. | ||
113 | |||
114 | <netmask> Netmask for local network interface. If this is empty, | ||
115 | the netmask is derived from the client IP address assuming | ||
116 | classful addressing, unless overridden in BOOTP reply. | ||
117 | |||
118 | <hostname> Name of the client. If empty, the client IP address is | ||
119 | used in ASCII notation, or the value received by BOOTP. | ||
120 | |||
121 | <device> Name of network device to use. If this is empty, all | ||
122 | devices are used for RARP and BOOTP requests, and the | ||
123 | first one we receive a reply on is configured. If you have | ||
124 | only one device, you can safely leave this blank. | ||
125 | |||
126 | <autoconf> Method to use for autoconfiguration. If this is either | ||
127 | 'rarp' or 'bootp', the specified protocol is used. | ||
128 | If the value is 'both' or empty, both protocols are used | ||
129 | so far as they have been enabled during kernel configura- | ||
130 | tion. 'off' means no autoconfiguration. | ||
131 | |||
132 | The <autoconf> parameter can appear alone as the value to the `ip' | ||
133 | parameter (without all the ':' characters before) in which case auto- | ||
134 | configuration is used. | ||
135 | |||
136 | |||
137 | |||
138 | |||
139 | 3.) Kernel loader | ||
140 | ------------- | ||
141 | |||
142 | To get the kernel into memory different approaches can be used. They | ||
143 | depend on what facilities are available: | ||
144 | |||
145 | |||
146 | 3.1) Writing the kernel onto a floppy using dd: | ||
147 | As always you can just write the kernel onto a floppy using dd, | ||
148 | but then it's not possible to use kernel command lines at all. | ||
149 | To substitute the 'root=' parameter, create a dummy device on any | ||
150 | linux system with major number 0 and minor number 255 using mknod: | ||
151 | |||
152 | mknod /dev/boot255 c 0 255 | ||
153 | |||
154 | Then copy the kernel zImage file onto a floppy using dd: | ||
155 | |||
156 | dd if=/usr/src/linux/arch/i386/boot/zImage of=/dev/fd0 | ||
157 | |||
158 | And finally use rdev to set the root device: | ||
159 | |||
160 | rdev /dev/fd0 /dev/boot255 | ||
161 | |||
162 | You can then remove the dummy device /dev/boot255 again. There | ||
163 | is no real device available for it. | ||
164 | The other two kernel command line parameters cannot be substi- | ||
165 | tuted with rdev. Therefore, using this method the kernel will | ||
166 | by default use RARP and/or BOOTP, and if it gets an answer via | ||
167 | RARP will mount the directory /tftpboot/<client-ip>/ as its | ||
168 | root. If it got a BOOTP answer the directory name in that answer | ||
169 | is used. | ||
170 | |||
171 | |||
172 | 3.2) Using LILO | ||
173 | When using LILO you can specify all necessary command line | ||
174 | parameters with the 'append=' command in the LILO configuration | ||
175 | file. However, to use the 'root=' command you also need to | ||
176 | set up a dummy device as described in 3.1 above. For how to use | ||
177 | LILO and its 'append=' command please refer to the LILO | ||
178 | documentation. | ||
179 | |||
180 | 3.3) Using loadlin | ||
181 | When you want to boot Linux from a DOS command prompt without | ||
182 | having a local hard disk to mount as root, you can use loadlin. | ||
183 | I was told that it works, but haven't used it myself yet. In | ||
184 | general you should be able to create a kernel command line simi- | ||
185 | lar to how LILO is doing it. Please refer to the loadlin docu- | ||
186 | mentation for further information. | ||
187 | |||
188 | 3.4) Using a boot ROM | ||
189 | This is probably the most elegant way of booting a diskless | ||
190 | client. With a boot ROM the kernel gets loaded using the TFTP | ||
191 | protocol. As far as I know, no commercial boot ROMs yet | ||
192 | support booting Linux over the network, but there are two | ||
193 | free implementations of a boot ROM available on sunsite.unc.edu | ||
194 | and its mirrors. They are called 'netboot-nfs' and 'etherboot'. | ||
195 | Both contain everything you need to boot a diskless Linux client. | ||
196 | |||
197 | |||
198 | |||
199 | |||
200 | 4.) Credits | ||
201 | ------- | ||
202 | |||
203 | The nfsroot code in the kernel and the RARP support have been written | ||
204 | by Gero Kuhlmann <gero@gkminix.han.de>. | ||
205 | |||
206 | The rest of the IP layer autoconfiguration code has been written | ||
207 | by Martin Mares <mj@atrey.karlin.mff.cuni.cz>. | ||
208 | |||
209 | In order to write the initial version of nfsroot I would like to thank | ||
210 | Jens-Uwe Mager <jum@anubis.han.de> for his help. | ||