安装
NFS客户端
# apt-get install nfs-common portmap
NFS服务器端
# apt-get install nfs-kernel-server nfs-common portmap
配置
安装好NFS服务器后,/etc下会有一个NFS的配置文件exports,初次配置时此文件是空的,需要向该文件中添加内容。此文件的格式在exports(5)中,具体可以man一下,这里举一些例子:
#File system to share Allowed client hosts (optional list)
/usr/local
*.zju.edu.cn(ro,async,root_squash)
/var/mail @depts_hosts(rw,sync)
/var/spool/news 10.13.72.6/12(all_squash)
解释:
第一行是注释,,提醒exports文件的格式;
后面每一行都列出了要共享的文件系统以、可以访问文件系统的主机,还指定了可以访问文件系统主机的可能方式:
- 使用通配符(*.zju.edu.cn),表示在.zju.edu.cn域中的所有主机都可以访问/usr/local文件系统;
- 使用NIS网络组(在NIS网络组dept_hosts中的所有主机都可以安装/var/mail文件系统)。注意,这个例子只有在使用NIS的情况下有效。
- 使用IP地址(所有IP地址在10.13.72.6/12范围内的主机都可以访问/var/spool/news)
每一行中还列出了一些可选项,以指明访问权限:
- ro: readonly; rw: readwrite;
- async选项指定了使用NFSv3中的文件服务器向磁盘写入数据的方式,允许服务器在完成写数据之前向客户端返回结果,故是异步的。
- Sync:可想而知,它应该在向客户端返回控制权以前就应完成数据的写入。这是NFSv2的方法。
- root_squash: 表示客户端上的root用户应该映射为服务器上的nobody用户的UID。通常在所有的NFS设置中都需要这样做,否则的话客户端上的root用户就会在服务器的输出文件系统中具有root的特权了。
- All_squash: 这个选项把root_squash扩展为所有的用户,即客户端上的所有UID都映射为服务器上的nobody用户的UID。
启动
在准备好共享文件后,需要启动文件服务以处理客户端请求的程序和守护进程:exportfs(8), rpc.quotad(8c),
rpc.muntd(8), rpc.nfsd(8)。启动以上这些程序和守护进程的最简单方式是运行/etc/init.d/nfs start命令(root 身份)。
一些操作实例
Exportfs(8)命令用来维护服务器当前的共享文件系统表,这个表就是/var/lib/nfs/xtab。对于典型的NFS服务器来说,exportfs要使用-r选项开始运行,这样可以将内存中的/var/lib/nfs/xtab文件与/etc/exports文件进行同步。因此当我们对exports文件作了修改,则需要手工运行exportfs –r。注意,不要手动编辑/var/lib/nfs/xtab文件,而要使用exportfs命令。
还有一种情况是我们只想临时性的共享一个目录,因此不想编辑/etc/exports文件,这可以通过以下方式做到:
exportfs –o
–ro 10.13.72.6: /mnt/cdrom
这样,cdrom的共享是临时性的,在系统重启后不再输出。当然,我们可以使用以下命令来收回cdrom的共享:
exportfs –u
10.13.72.6: /mnt/cdrom
另一个值得注意的地方是,当我们需要增加一个共享文件系统时,在编辑好/etc/exports文件后,要使用exportfs命令进行同步。但exportfs同步命令有两个选项 –a和-r。如果当前的共享文件中存在临时的文件系统,则使用exportfs –r后,/var/lib/nfs/xtab和/etc/exports文件完全同步,导致临时共享文件系统会被系统收回。而exportfs –a命令可以保持当前共享的文件系统,只添加在/etc/exports文件中列出的所有文件系统。
最后,可以通过exportfs
–v(详细模式)来查看当前共享的文件系统。
补上NFS客户端推荐的参数配置
nfsvers=3,wsize=32768,rsize=32768,rw,bg,intr,hard,tcp
参数 意义
nfsvers=3
NFSv3,默认是 NFSv2,而 NFSv4 比较复杂,不是所有内核都支持。
wsize=32768 设置 32K 的写缓存,对于 UDP 方式来说,8K 是推荐值。
rsize=32768 设置 32K 的读缓存,对于 TCP 方式来说,32K 是推荐值。
rw
读写方式,根据权限需要有时也设置为 ro(read only)
bg
如果安装失败(服务器没有响应), 在后台一直尝试,继续发其他的安装请求
hard
如果服务器当机,让试图访问它的操作被阻塞,直到服务器恢复为止
intr
允许用户中断被阻塞的操作(并且让它们返回一条错误消息)
tcp
选择通过 TCP 来传输,默认的 UDP 不好。