Linux Zone

| HowTo Linux Zone | Linux Zone Home | E-Mail Me |

NFS HOWTO


Nicolai Langfeldt janl@math.uio.no

v0.7, 3 November 1997

HOWTO set up NFS clients and servers.

1. Preamble

1.1. Legal stuff

(C)opyright 1997 Nicolai Langfeldt. Do not modify without amending

copyright, distribute freely but retain this paragraph. The FAQ

section is based on a NFS FAQ compiled by Alan Cox. The Checklist

section is based on a mount problem checklist compiled by the IBM

Corporation.

1.2. Other stuff

This will never be a finished document, please send me mail about your

problems and successes, it can make this a better HOWTO. Please send

money, comments and/or questions to janl@math.uio.no. If you send E-

mail please make sure that the return address is correct and working,

I get a lot of E-mail and figuring out your e-mail address can be a

lot of work. Please.

If you want to translate this HOWTO please notify me so I can keep

track of what languages I have been published in :-).

Curses and Thanks to Olaf Kirch who got me to write this and then gave

good suggestions for it :-)

This HOWTO covers NFS in the 2.0 versions of the kernel. There are

significant enhancements, and changes, of NFS in the 2.1 versions of

the kernel.

1.3. Dedication

This HOWTO is dedicated to Anne Line Norheim Langfeldt. Though she

will probably never read it since she's not that kind of girl.

2. README.first

NFS, the Network File System has three important characteristics:

· It makes sharing of files over a network possible.

· It mostly works well enough.

· It opens a can of security risks that are well understood by

crackers, and easily exploited to get access (read, write and

delete) to all your files.

I'll say something on both issues in this HOWTO. Please make sure you

read the security section of this HOWTO, and you will be vulnerable to

fewer silly security risks. The passages about security will at times

be pretty technical and require some knowledge about IP networking and

the terms used. If you don't recognize the terms you can either go

back and check the networking HOWTO, wing it, or get a book about

TCP/IP network administration to familiarize yourself with TCP/IP.

That's a good idea anyway if you're administrating UNIX/Linux

machines. A very good book on the subject is TCP/IP Network

Administration by Craig Hunt, published by O'Reilly & Associates, Inc.

And after you've read it and understood it you'll have higher value on

the job market, you can't loose ;-)

There are two sections to help you troubleshoot NFS, called Mount

Checklist and FAQs. Please refer to them if something dosn't work as

advertized.

3. Setting up a NFS server

3.1. Prerequisites

Before you continue reading this HOWTO you will need to be able to

telnet back and forth between the machine you're using as server and

the client. If that does not work you need to check the

networking/NET-2 HOWTO and set up networking properly.

3.2. First step

Before we can do anything else we need a NFS server set up. If you're

part of a department or university network there are likely numerous

NFS servers already set up. If they will let you get access to them,

or indeed, if you're reading this HOWTO to get access to one of them

you obviously don't need to read this section and can just skip ahead

to the section on ``setting up a NFS client''

If you need to set up a non-Linux box as server you will have to read

the system manual(s) to discover how to enable NFS serving and export

of file systems through NFS. There is a separate section in this

HOWTO on how to do it on many different systems. After you have

figured all that out you can continue reading the next section of this

HOWTO. Or read more of this section since some of the things I will

say are relevant no matter what kind of machine you use as server.

Those of you still reading will need to set up a number of programs.

3.3. The portmapper

The portmapper on Linux is called either portmap or rpc.portmap. The

man page on my system says it is a "DARPA port to RPC program number

mapper". It is the first security holes you'll open reading this

HOWTO. Description of how to close one of the holes is in the

``security section''. Which I, again, urge you to read.

Start the portmapper. It's either called portmap or rpc.portmap and

it should live in the /usr/sbin directory (on some machines it's

called rpcbind). You can start it by hand now, but it will need to be

started every time you boot your machine so you need to make/edit the

rc scripts. Your rc scripts are explained more closely in the init

man page, they usually reside in /etc/rc.d, /etc/init.d or

/etc/rc.d/init.d. If there is a script called something like inet

it's probably the right script to edit. But, what to write or do is

outside the scope of this HOWTO. Start portmap, and check that it

lives by running ps aux. It does? Good.

3.4. Mountd and nfsd

The next programs we need running are mountd and nfsd. But first

we'll edit another file. /etc/exports this time. Say I want the file

system /mn/eris/local which lives on the machine eris to be available

to the machine called apollon. Then I'd put this in /etc/exports on

eris:

______________________________________________________________________

/mn/eris/local apollon(rw)

______________________________________________________________________

The above line gives apollon read/write access to /mn/eris/local.

Instead of rw it could say ro which means read only (if you put

nothing it defaults to read only). There are other options you can

give it, and I will discuss some security related ones later. They

are all enumerated in the exports man page which you should have read

at least once in your life. There are also better ways than listing

all the hosts in the exports file. You can for example use net groups

if you are running NIS (or NYS) (NIS was known as YP), and always

specify domain wild cards and IP-subnets as hosts that are allowed to

mount something. But you should consider who can get access to the

server in unauthorized ways if you use such blanket authorizations.

Note: This exports file is not the same syntax that other Unixes use.

There is a separate section in this HOWTO about other Unixes exports

files.

Now we're set to start mountd (or maybe it's called rpc.mountd and

then nfsd (which could be called rpc.nfsd). They will both read the

exports file.

If you edit /etc/exports you will have to make sure nfsd and mountd

knows that the files have changed. The traditonal way is to run

exportfs. Many Linux distributions lack a exportfs program. If

you're exportfs-less you can install this script on your machine:

______________________________________________________________________

#!/bin/sh

killall -HUP /usr/sbin/rpc.mountd

killall -HUP /usr/sbin/rpc.nfsd

echo re-exported file systems

______________________________________________________________________

Save it in, say, /usr/sbin/exportfs, and don't forget to chmod a+rx

it. Now, whenever you change your exports file, you run exportfs

after, as root.

Now you should check that mountd and nfsd are running properly. First

with rpcinfo -p. It should show something like this:

______________________________________________________________________

program vers proto port

100000 2 tcp 111 portmapper

100000 2 udp 111 portmapper

100005 1 udp 745 mountd

100005 1 tcp 747 mountd

100003 2 udp 2049 nfs

100003 2 tcp 2049 nfs

______________________________________________________________________

As you see the portmapper has announced it's services, and so has

mountd and nfsd.

If you get rpcinfo: can't contact portmapper: RPC: Remote system error

- Connection refused or something similar instead then the portmapper

isn't running. Fix it. If you get No remote programs registered.

then either the portmapper doesn't want to talk to you, or something

is broken. Kill nfsd, mountd, and the portmapper and try the ignition

sequence again.

After checking that the portmapper reports the services you can check

with ps too. The portmapper will continue to report the services even

after the programs that extend them have crashed. So a ps check can

be smart if something seems broken.

Of course, you will need to modify your system rc files to start

mountd and nfsd as well as the portmapper when you boot. It is very

likely that the scripts already exist on your machine, you just have

to uncomment the critical section or activate it for the correct init

run levels.

Man pages you should be familiar with now: portmap, mountd, nfsd, and

exports.

Well, if you did everything exactly like I said you should you're all

set to start on the NFS client.

4. Setting up a NFS client

First you will need a kernel with the NFS file system either compiled

in or available as a module. This is configured before you compile

the kernel. If you have never compiled a kernel before you might need

to check the kernel HOWTO and figure it out. If you're using a very

cool distribution (like Red Hat) and you've never fiddled with the

kernel or modules on it (and thus ruined it ;-), nfs is likely

automagicaly available to you.

You can now, at a root prompt, enter a appropriate mount command and

the file system will appear. Continuing the example in the previous

section we want to mount /mn/eris/local from eris. This is done with

this command:

______________________________________________________________________

mount -o rsize=1024,wsize=1024 eris:/mn/eris/local /mnt

______________________________________________________________________

(We'll get back to the rsize and wsize options.) The file system is

now available under /mnt and you can cd there, and ls in it, and look

at the individual files. You will notice that it's not as fast as a

local file system, but a lot more convenient than ftp. If, instead of

mounting the file system, mount produces a error message like mount:

eris:/mn/eris/local failed, reason given by server: Permission denied

then the exports file is wrong, or you forgot to run exportfs after

editing the exports file. If it says mount clntudp_create: RPC:

Program not registered it means that nfsd or mountd is not running on

the server.

To get rid of the file system you can say

______________________________________________________________________

umount /mnt

______________________________________________________________________

To make the system mount a nfs file system upon boot you edit

/etc/fstab in the normal manner. For our example a line such as this

is required:

______________________________________________________________________

# device mountpoint fs-type options dump fsckorder

eris:/mn/eris/local /mnt nfs rsize=1024,wsize=1024 0 0

______________________________________________________________________

That's all there is too it, almost. Read on please.

4.1. Mount options

There are some options you should consider adding at once. They

govern the way the NFS client handles a server crash or network

outage. One of the cool things about NFS is that it can handle this

gracefully. If you set up the clients right. There are two distinct

failure modes:

soft

The NFS client will report and error to the process accessing a

file on a NFS mounted file system. Some programs can handle

this with composure, most won't. I cannot recommend using this

setting.

hard

The program accessing a file on a NFS mounted file system will

hang when the server crashes. The process cannot be interrupted

or killed unless you also specify intr. When the NFS server is

back online the program will continue undisturbed from where it

were. This is probably what you want. I recommend using

hard,intr on all NFS mounted file systems.

Picking up the previous example, this is now your fstab entry:

______________________________________________________________________

# device mountpoint fs-type options dump fsckorder

eris:/mn/eris/local /mnt nfs rsize=1024,wsize=1024,hard,intr 0 0

______________________________________________________________________

4.2. Optimizing NFS

Normally, if no rsize and wsize options are specified NFS will read

and write in chunks of 4096 or 8192 bytes. Some combinations of Linux

kernels and network cards cannot handle that large blocks, and it

might not be optimal, anyway. So we'll want to experiment and find a

rsize and wsize that works and is as fast as possible. You can test

the speed of your options with some simple commands. Given the mount

command above and that you have write access to the disk you can do

this to test the sequential write performance:

______________________________________________________________________

time dd if=/dev/zero of=/mnt/testfile bs=16k count=4096

______________________________________________________________________

This creates a 64Mb file of zeroed bytes (which should be large enough

that caching is no significant part of any performance perceived, use

a larger file if you have a lot of memory). Do it a couple (5-10?)

of times and average the times. It is the `elapsed' or `wall clock'

time that's most interesting in this connection. Then you can test

the read performance by reading back the file:

______________________________________________________________________

time dd if=/mnt/testfile of=/dev/null bs=16k

______________________________________________________________________

do that a couple of times and average. Then umount, and mount again

with a larger rsize and wsize. They should probably be multiples of

1024, and not larger than 16384 bytes since that's the maximum size in

NFS version 2. Directly after mounting with a larger size cd into the

mounted file system and do things like ls, explore the fs a bit to

make sure everything is as it should. If the rsize/wsize is too large

the symptoms are very odd and not 100% obvious. A typical symptom is

incomplete file lists when doing 'ls', and no error messages. Or

reading files failing mysteriously with no error messages. After

establishing that the given rsize/wsize works you can do the speed

tests again. Different server platforms are likely to have different

optimal sizes. SunOS and Solaris is reputedly a lot faster with 4096

byte blocks than with anything else.

Newer Linux kernels (since 1.3 sometime) perform read-ahead for rsizes

larger or equal to the machine page size. On Intel CPUs the page size

is 4096 bytes. Read ahead will significantly increase the NFS read

performance. So on a Intel machine you will want 4096 byte rsize if

at all possible.

Remember to edit /etc/fstab to reflect the rsize/wsize you found.

A trick to increase NFS write performance is to disable synchronous

writes on the server. The NFS specification states that NFS write

requests shall not be considered finished before the data written is

on a non-volatile medium (normally the disk). This restricts the

write performance somewhat, asynchronous writes will speed NFS writes

up. The Linux nfsd has never done synchronous writes since the Linux

file system implementation does not lend itself to this, but on non-

Linux servers you can increase the performance this way with this in

your exports file:

______________________________________________________________________

/dir -async,access=linuxbox

______________________________________________________________________

or something similar. Please refer to the exports man page on the

machine in question. Please note that this increases the risk of data

loss.

5. NFS over slow lines

Slow lines include Modems, ISDN and quite possibly other long distance

connections.

This section is based on knowledge about the used protocols but no

actual experiments. My home computer has been down for 6 months (bad

HD, low on cash) and so I have had no modem connection to test this

with. Please let me hear from you if try this :-)

The first thing to remember is that NFS is a slow protocol. It has

high overhead. Using NFS is almost like using kermit to transfer

files. It's slow. Almost anything is faster than NFS. FTP is

faster. HTTP is faster. rcp is faster. ssh is faster.

Still determined to try it out? Ok.

NFS' default parameters are for quite fast, low latency, lines. If

you use these default parameters over high latency lines it can cause

NFS to report errors, abort operations, pretend that files are shorter

than they really are, and act mysteriously in other ways.

The first thing to do is not to use the soft mount option. This will

cause timeouts to return errors to the software, which will, most

likely not handle the situation at all well. This is a good way to

get for mysterious failures. Instead use the hard mount option. When

hard is active timeouts causes infinite retries instead of aborting

whatever it was the software wanted to do. This is what you want.

Really.

The next thing to do is to tweak the timeo and retrans mount options.

They are described in the nfs(5) man page, but here is a copy:

______________________________________________________________________

timeo=n The value in tenths of a second before

sending the first retransmission after an

RPC timeout. The default value is 7 tenths

of a second. After the first timeout, the

timeout is doubled after each successive

timeout until a maximum timeout of 60 sec-

onds is reached or the enough retransmis-

sions have occured to cause a major time-

out. Then, if the filesystem is hard

mounted, each new timeout cascade restarts

at twice the initial value of the previous

cascade, again doubling at each retransmis-

sion. The maximum timeout is always 60

seconds. Better overall performance may be

achieved by increasing the timeout when

mounting on a busy network, to a slow

server, or through several routers or gate-

ways.

retrans=n The number of minor timeouts and retrans-

missions that must occur before a major

timeout occurs. The default is 3 timeouts.

When a major timeout occurs, the file oper-

ation is either aborted or a "server not

responding" message is printed on the con-

sole.

______________________________________________________________________

In other words: If a reply is not received within the 0.7 second

(700ms) timeout the NFS client will repeat the request and double the

timeout to 1.4 seconds. If the reply does not appear within the 1.4

seconds the request is repeated again and the timeout doubled again,

to 2.8 seconds.

A lines speed can be measured with ping with the same packet size as

your rsize/wsize options.

______________________________________________________________________

$ ping -s 8192 lugulbanda

PING lugulbanda.uio.no (129.240.222.99): 8192 data bytes

8200 bytes from 129.240.222.99: icmp_seq=0 ttl=64 time=15.2 ms

8200 bytes from 129.240.222.99: icmp_seq=1 ttl=64 time=15.9 ms

8200 bytes from 129.240.222.99: icmp_seq=2 ttl=64 time=14.9 ms

8200 bytes from 129.240.222.99: icmp_seq=3 ttl=64 time=14.9 ms

8200 bytes from 129.240.222.99: icmp_seq=4 ttl=64 time=15.0 ms

--- lugulbanda.uio.no ping statistics ---

5 packets transmitted, 5 packets received, 0% packet loss

round-trip min/avg/max = 14.9/15.1/15.9 ms

______________________________________________________________________

The time here is how long the ping packet took to get back and forth

to lugulbanda. 15ms is quite fast. Over a 28.000 bps line you can

expect something like 4000-5000ms, and if the line is otherwise loaded

this time will be even higher, easily double. When this time is high

we say that there is 'high latency'. Generally, for larger packets

and for more loaded lines the latency will tend to increase. Increase

timeo suitably for your line and load. And since the latency

increases when you use the line for other things: If you ever want to

use FTP and NFS at the same time you should try measuring ping times

while using FTP to transfer files.

6. Security and NFS

I am by no means a computer security expert. But I do have a little

advice for the security conscious. But be warned: This is by no means

a complete list of NFS related problems and if you think you're safe

once you're read and implemented all this I have a bridge I want to

sell you.

This section is probably of no concern if you are on a closed network

where you trust all the users, and no-one you don't trust can get

access to machines on the network. I.e., there should be no way to

dial into the network, and it should in no way be connected to other

networks where you don't trust everyone using it as well as the

security. Do you think I sound paranoid? I'm not at all paranoid.

This is just basic security advice. And remember, the things I say

here is just the start of it. A secure site needs a diligent and

knowledgeable admin that knows where to find information about current

and potential security problems.

NFS has a basic problem in that the client, if not told otherwise,

will trust the NFS server and vice versa. This can be bad. It means

that if the server's root account is broken into it can be quite easy

to break into the client's root account as well. And vice versa.

There are a couple of coping strategies for this, which we'll get back

to.

Something you should read is the CERT advisories on NFS, most of the

text below deals with issues CERT has written advisories about. See

ftp.cert.org/01-README for a up to date list of CERT advisories. Here

are some NFS related advisories:

______________________________________________________________________

CA-91:21.SunOS.NFS.Jumbo.and.fsirand 12/06/91

Vulnerabilities concerning Sun Microsystems, Inc. (Sun) Network

File System (NFS) and the fsirand program. These vulnerabilities

affect SunOS versions 4.1.1, 4.1, and 4.0.3 on all architectures.

Patches are available for SunOS 4.1.1. An initial patch for SunOS

4.1 NFS is also available. Sun will be providing complete patches

for SunOS 4.1 and SunOS 4.0.3 at a later date.

CA-94:15.NFS.Vulnerabilities 12/19/94

This advisory describes security measures to guard against several

vulnerabilities in the Network File System (NFS). The advisory was

prompted by an increase in root compromises by intruders using tools

to exploit the vulnerabilities.

CA-96.08.pcnfsd 04/18/96

This advisory describes a vulnerability in the pcnfsd program (also

known as rpc.pcnfsd). A patch is included.

______________________________________________________________________

6.1. Client Security

On the client we can decide that we don't want to trust the server too

much a couple of ways with options to mount. For example we can

forbid suid programs to work off the NFS file system with the nosuid

option. This is a good idea and you should consider using this with

all NFS mounted disks. It means that the server's root user cannot

make a suid-root program on the file system, log in to the client as a

normal user and then use the suid-root program to become root on the

client too. We could also forbid execution of files on the mounted

file system altogether with the noexec option. But this is more

likely to be impractical than nosuid since a file system is likely to

at least contain some scripts or programs that needs to be executed.

You enter these options in the options column, with the rsize and

wsize, separated by commas.

6.2. Server security: nfsd

On the server we can decide that we don't want to trust the client's

root account. We can do that by using the root_squash option in

exports:

______________________________________________________________________

/mn/eris/local apollon(rw,root_squash)

______________________________________________________________________

Now, if a user with UID 0 on the client attempts to access (read,

write, delete) the file system the server substitutes the UID of the

servers `nobody' account. Which means that the root user on the

client can't access or change files that only root on the server can

access or change. That's good, and you should probably use

root_squash on all the file systems you export. "But the root user on

the client can still use 'su' to become any other user and access and

change that users files!" say you. To which the answer is: Yes, and

that's the way it is, and has to be with Unix and NFS. This has one

important implication: All important binaries and files should be

owned by root, and not bin or other non-root account, since the only

account the clients root user cannot access is the servers root

account. In the NFSd man page there are several other squash options

listed so that you can decide to mistrust whomever you (don't) like on

the clients. You also have options to squash any UID and GID range

you want to. This is described in the Linux NFSd man page.

root_squash is in fact the default with the Linux NFSd, to grant root

access to a filesystem use no_root_squash.

Another important thing is to ensure that nfsd checks that all it's

requests comes from a privileged port. If it accepts requests from

any old port on the client a user with no special privileges can run a

program that's is easy to obtain over the Internet. It talks nfs

protocol and will claim that the user is anyone the user wants to be.

Spooky. The Linux nfsd does this check by default, on other OSes you

have to enable this check yourself. This should be described in the

nfsd man page for the OS.

Another thing. Never export a file system to 'localhost' or

127.0.0.1. Trust me.

6.3. Server security: the portmapper

The basic portmapper, in combination with nfsd has a design problem

that makes it possible to get to files on NFS servers without any

privileges. Fortunately the portmapper Linux uses is relatively

secure against this attack, and can be made more secure by configuring

up access lists in two files.

First we edit /etc/hosts.deny. It should contain the line

______________________________________________________________________

portmap: ALL

______________________________________________________________________

which will deny access to everyone. That's a bit drastic perhaps, so

we open it again by editing /etc/hosts.allow. But first we need to

figure out what to put in it. It should basically list all machines

that should have access to your portmapper. On a run of the mill

Linux system there are very few machines that need any access for any

reason. The portmapper administrates nfsd, mountd, ypbind/ypserv,

pcnfsd, and 'r' services like ruptime and rusers. Of these only nfsd,

mountd, ypbind/ypserv and perhaps pcnfsd are of any consequence. All

machines that needs to access services on your machine should be

allowed to do that. Let's say that your machines address is

129.240.223.254 and that it lives on the subnet 129.240.223.0 should

have access to it (those are terms introduced by the networking HOWTO,

go back and refresh your memory if you need to). Then we write

______________________________________________________________________

portmap: 129.240.223.0/255.255.255.0

______________________________________________________________________

in hosts.allow. This is the same as the network address you give to

route and the subnet mask you give to ifconfig. For the device eth0

on this machine ifconfig should show

______________________________________________________________________

eth0 Link encap:10Mbps Ethernet HWaddr 00:60:8C:96:D5:56

inet addr:129.240.223.254 Bcast:129.240.223.255 Mask:255.255.255.0

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:360315 errors:0 dropped:0 overruns:0

TX packets:179274 errors:0 dropped:0 overruns:0

Interrupt:10 Base address:0x320

______________________________________________________________________

and netstat -rn should show

______________________________________________________________________

Kernel routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

129.240.223.0 0.0.0.0 255.255.255.0 U 0 0 174412 eth0

______________________________________________________________________

(Network address in first column).

The hosts.deny and hosts.allow files are described in the manual pages

of the same names.

IMPORTANT: Do not put anything but IP NUMBERS in the portmap lines of

these files. Host name lookups can indirectly cause portmap activity

which will trigger host name lookups which can indirectly cause

portmap activity which will trigger...

The above things should make your server tighter. The only remaining

problem (Yeah, right!) is someone breaking root (or boot MS-DOS) on a

trusted machine and using that privilege to send requests from a

secure port as any user they want to be.

6.4. NFS and firewalls

It's a very good idea to firewall the nfs and portmap ports in your

router or firewall. The nfsd operates at port 2049, both udp and tcp

protocols. The portmapper at port 111, tcp and udp, and mountd at

port 745 and and 747, tcp and udp. Normally. You should check the

ports with the rpcinfo -p command.

If on the other hand you want NFS to go through a firewall there are

options for newer NFSds and mountds to make them use a specific

(nonstandard) port which can be open in the firewall.

6.5. Summary

If you use the hosts.allow/deny, root_squash, nosuid and privileged

port features in the portmapper/nfs software you avoid many of the

presently known bugs in nfs and can almost feel secure about that at

least. But still, after all that: When an intruder has access to your

network, s/he can make strange commands appear in your /var/spool/mail

are mounted over NFS. For the same reason, you should never access

your PGP private key over nfs. Or at least you should know the risk

involved. And now you know a bit of it.

NFS and the portmapper makes up a complex subsystem and therefore it's

not totally unlikely that new bugs will be discovered, either in the

basic design or the implementation we use. There might even be holes

known now, which someone is abusing. But that's life. To keep

abreast of things like this you should at least read the newsgroups

comp.os.linux.announce and comp.security.announce at a absolute

minimum.

7. Mount Checklist

This section is based on IBM Corp. NFS mount problem checklist. My

thanks to them for making it available for this HOWTO. If you

experience a problem mounting a NFS filesystem please refer to this

list before posting your problem. Each item describes a failure mode

and the fix.

1. File system not exported, or not exported to the client in

question.

Fix: Export it

2. Name resolution doesn't jibe with the exports list.

e.g.: export list says export to johnmad but johnmad's name is

resolved as johnmad.austin.ibm.com. mount permission is denied.

Fix: Export to both forms of the name.

It can also happen if the client has 2 interfaces with different

names for each of the two adapters and the export only specifies

one.

Fix: export both interfaces.

This can also happen if the server can't do a lookuphostbyname or

lookuphostbyaddr (these are library functions) on the client. Make

sure the client can do host <name>; host <ip_addr>; and that both

shows the same machine.

Fix: straighten out name resolution.

3. The file system was mounted after NFS was started (on that server).

In that case the server is exporting underlying mount point, not

the mounted filesystem.

Fix: Shut down NFSd and then restart it.

Note: The clients that had the underlying mount point mounted will

get problems accessing it after the restart.

4. The date is wildly off on one or both machines (this can mess up

make)

Fix: Get the date set right.

The HOWTO author recommends using NTP to synchronize clocks. Since

there are export restrictions on NTP in the US you have to get NTP

for debian, redhat or slackware from

ftp://ftp.hacktic.nl/pub/replay/pub/linux or a mirror.

5. The server can not accept a mount from a user that is in more than

8 groups.

Fix: decrease the number of groups the user is in or mount via a

different user.

8. FAQs

This is the FAQ section. Most of it was written by Alan Cox.

1. I get a lot of 'stale nfs handle' errors when using Linux as a nfs

server.

This is caused by a bug in some oldish nfsd versions. It is fixed

in nfs-server2.2beta16 and later.

2. When I try to mount a file system I get

can't register with portmap: system error on send

You are probably using a Caldera system. There is a bug in the rc

scripts. Please contact Caldera to obtain a fix.

3. Why can't I execute a file after copying it to the NFS server?

The reason is that nfsd caches open file handles for performance

reasons (remember, it runs in user space). While nfsd has a file

open (as is the case after writing to it), the kernel won't allow

you to execute it. Nfsds newer than spring 95 release open files

after a few seconds, older ones would cling to them for days.

4. My NFS files are all read only

The Linux NFS server defaults to read only. RTFM the ``exports''

and nfsd manual pages. You will need to alter /etc/exports.

5. I mount from a linux nfs server and while ls works I can't read or

write files.

On older versions of Linux you must mount a NFS servers with

rsize=1024,wsize=1024.

6. I mount from a Linux NFS server with a block size of between

3500-4000 and it crashes the Linux box regularly

Basically don't do it then.

7. Can Linux do NFS over TCP

No, not at present.

8. I get loads of strange errors trying to mount a machine from a

Linux box.

Make sure your users are in 8 groups or less. Older servers require

this.

9. When I reboot my machine it sometimes hangs when trying to unmount

a hung NFS server.

Do not unmount NFS servers when rebooting or halting, just ignore

them, it will not hurt anything if you don't unmount them. The

command is umount -avt nonfs.

10.

Linux NFS clients are very slow when writing to Sun and BSD systems

NFS writes are normally synchronous (you can disable this if you

don't mind risking losing data). Worse still BSD derived kernels

tend to be unable to work in small blocks. Thus when you write 4K

of data from a Linux box in the 1K packets it uses BSD does this

read 4K page

alter 1K

write 4K back to physical disk

read 4K page

alter 1K

write 4K page back to physical disk

etc..

9. Exporting filesystems

The way to export filesytems with NFS is not completely consistent

across platforms of course. In this case Linux and Solaris 2 are the

deviants. This section lists, superficially the way to do it on most

systems. If the kind of system you have is not covered you must check

your OS man-pages. Keywords are: nfsd, system administration tool, rc

scripts, boot scripts, boot sequence, /etc/exports, exportfs. I'll

use one example throughout this section: How to export /mn/eris/local

to apollon read/write.

9.1. IRIX, HP-UX, Digital-UNIX, Ultrix, SunOS 4 (Solaris 1), AIX

These OSes use the traditional Sun export format. In /etc/exports

write:

______________________________________________________________________

/mn/eris/local -rw=apollon

______________________________________________________________________

The complete documentation is in the exports man page. After editing

the file run exportfs -av to export the filesystems.

How strict the exportfs command is about the syntax varies. On some

OSes you will find that previously entered lines reads:

______________________________________________________________________

/mn/eris/local apollon

______________________________________________________________________

or even something degenerate like:

______________________________________________________________________

/mn/eris/local rw=apollon

______________________________________________________________________

I recommend being formal. You risk that the next version of exportfs

if much stricter and then suddenly everything will stop working.

9.2. Solaris 2

Sun completely re-invented the wheel when they did Solaris 2. So this

is completely different from all other OSes. What you do is edit the

file /etc/dfs/dfstab. In it you place share commands as documented in

the share(1M) man page. Like this:

______________________________________________________________________

share -o rw=apollon -d "Eris Local" /mn/eris/local

______________________________________________________________________

After editing run the program shareall to export the filesystems.

10. PC-NFS

You should not run PC-NFS. You should run samba.

Sorry: I don't know anything about PC-NFS. If someone feels like

writing something about it please do and I'll include it here.


| HowTo Linux Zone | Linux Zone Home | E-Mail Me |

Copyright 1999

Linux Zone