使用NFS需要启用RPC(remoteprocedure call),RPC可以指定每个NFS功能所对应的端口号,重启RPC后,RPC所管理的所有NFS功能服务都需重新向RPC注册。

设置NFS需要安装nfs-utils和portmap程序,使用rpm –q可以查看是否安装

Nfs-utils:提供rpc.nfsd和rpc.mountd两个daemon与其他document说明文件。

rpc.nfsd:管理client是否能够登入主机,及对登入者ID的辨别。

rpc.mountd:管理NFS文件系统,读取/etc/exports对比client取得相应的权限。

Portmap:端口映射;在启动rpc之前做好端口映射工作。


NFS服务

service portmap start

service nfs start


查看开启的服务

netstat -ntpl


NFS的配置文件有两个:

/etc/exports:NFS配置文件

/var/lib/nfs/*tab:NFS服务器日志放置路径;etab记录共享出来的目录完整权限设置值;xtab记录曾经连接到此NFS主机的相关客户端数据

两个命令:

/usr/sbin/exportfs:维护NFS共享资源;重新共享/etc/exports变更目录或将NFSserver共享目录卸载或重新共享

/usr/sbin/showmount:在客户端查看NFS服务器共享出来的目录资源

/etc/exports配置文件

首先需要手动编辑/etc/exports配置文件

共享目录必须使用绝对路径,权限部分依照不同的权限共享给不同的主机,括号内是设置权限参数的位置,权限不止一个时,使用,隔开,主机名和括号连在一起。

主机名设置可以使用网段:192.168.1.0/24或完整IP:192.168.1.23也可以使用主机名称,但此主机名称需要存在于/etc/hosts中或使用DNS可以找到,找到IP即可,主机名支持通配符,如*?

/mnt/sda4/share/a      192.168.23.129(rw)

设置共享目录/mnt/sda4/share/a,仅192.168.23.129主机允许访问此共享目录,具有读写权限

/mnt/sda4/share/b      192.168.23.129(rw) *(ro)

设置共享目录/mnt/sda4/share/b,192.168.23.129可以读写该共享目录,其他主机只可以读取该共享目录

/mnt/sda4/share/c       192.168.23.129(no_root_squash)

设置共享目录/mnt/sda4/share/c,仅192.168.23.129可以访问和读写,root登录时拥有root权限

/mnt/sda4/share/d      192.168.23.0/24(rw)

设置共享目录/mnt/sda4/share/d,仅有192.168.23.0/24网段的主机才可访问和读写此目录文件

/mnt/sda4/share/e      *(rw,all_squash,anonuid=500,anongid=500)

设置共享目录/mnt/sda4/share/e,所有主机都允许访问此共享目录,具有读写权限,但他们访问该共享目录时,已将其UID、GID设置成500。NFSserver主机中UID、GID=500的权限已经设置好

权限参数说明如下:

Rw:read-write可读写的权限

Ro:read-only只读权限

no_root_squash:登入NFS主机使用共享目录的用户,如果是用户root,对于此共享目录具有root权限,不建议使用。

root_squash:登入NFS主机使用共享目录的用户,如果是用户root,此用户权限将被压缩为匿名用户,其UID和GID都会被压缩为nobody(nfsnobody)系统账号的身份。

all_squash:不论登入NFS的用户身份为何,其身份都被转换成为匿名用户,即nobody。

Anonuid:anonymous;即nobody,可以自行设定此UID值,但此UID必须存在于/etc/passwd中。

Anongid:同anonuid,变成group ID即可。

Sync:数据同步写入到内存与硬盘中

Async:数据先暂存于内存中,而非直接写入硬盘

权限说明:

1.NFS server和NFS client具有相同的UID和账号

如果NFSserver和NFSclient具有相同共享文件账号和相同UID,客户端登入NFSserver时,就会拥有/etc/exports设置的权限

2.NFS server和NFS client具有不同的账号

如果NFSclient不拥有NFSserver共享文件账号,或NFSclient的账号在NFSserver不存在,是否可以读写共享目录,需要查看NFSserver的权限而定,其身份会变为匿名用户nobody

3.NFS client的身份为root

默认情况下,客户端的root身份会被压缩成匿名用户nobody

启动NFS

启动NFS只需启动portmap和NFS服务即可。如果需要启动数据一致性检查,则需启动nfslock服务。

service portmap start
service nfs start

使用netstat–tnlu可以查看nfs开放了哪些端口。Portmap的端口为111,nfs的端口为2049

[root@localhost share]# rpcinfo -p

程序       版本 协议   端口               服务名称

100000    2   tcp   111        portmapper
100000    2   udp  111        portmapper
100024    1   udp  695        status
100003    2   udp  2049     nfs
100021    1   udp   46017  nlockmgr

………………………………………………

如果rpcinfo–p的数据无法输出,表示注册的数据有问题,重新启动portmap和nfs即可。

client查看Server有提供哪些NFS服务,可以使用showmount
# showmount -e  显示某台主机的/etc/exports所共享的目录数据
# showmount -a  显示当前主机与客户端NFS联机共享状态
# showmount -e
Export list for localhost.localdomain:
/mnt/sda4/share/e *
/mnt/sda4/share/d 192.168.23.0/24
/mnt/sda4/share/c 192.168.23.129
/mnt/sda4/share/b (everyone)
/mnt/sda4/share/a 192.168.23.129

需要扫描某台主机提供的NFS共享目录,使用showmount–e ip(hostname)即可

查看/var/lib/nfs/etab可以查看NFSserver目录权限设置情况

# cat /var/lib/nfs/etab

/mnt/sda4/share/a      192.168.23.129(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,mapping=identity,anonuid=65534,anongid=65534)

…………………………………………………………

如果修改/etc/exports文件之后无需重启nfs,只需重新扫瞄一次文件/etc/exports,并且重新将设定加载即可;

Exportfs:

-a:全部挂载(或卸载)/etc/exports 文件内的设置。

-r:重新挂载/etc/exports里的设置,同时同步更新/etc/exports及/var/lib/nfs/xtab的内容。

-u:卸载某一目录。

-v:在export时,将共享的目录显示在屏幕上。

重新挂载/etc/exports的设置:#exportfs–arv

全部卸载/etc/exports的设置:#exportfs–auv

客户端配置:

# mkdir -p /mnt/share/client/b
# mount -t nfs  192.168.23.128:/mnt/sda4/share/b /mnt/share/client/b
# df
文件系统                                                             1K-块      已用    可用        已用%   挂载点
/dev/sda2                                                            5952284    3158868  2486176 56%               /
/dev/sda1                                                            101086     11481   84386                    12%      /boot
tmpfs                                                    127720     0          127720    0%        /dev/shm
192.168.23.128:/mnt/sda4/share/b   3905632   73408          3633824   2%       /mnt/share/client/b

设置成开机启动挂载

修改/etc/fstab文件

192.168.23.128:/mnt/sda4/share/e  /mnt/share/client/e  nfs  defaults,rw   0 0

此外可以使用autofs设置客户端需要时自动挂载,不需要时若干分钟后自动卸载,还可在/etc/fstab或客户端手动挂载时设置一些参数,方便客户端使用。


使用/etc/fstab来挂载NFS

要挂载其他机器上的NFS共享的另一种方法是在/etc/fstab文件中添加一行,在这一行中必须声明NFS服务器的主机名、要导出的目录,以及要挂载NFS共享的本地机器目录。必须是根用户才能修改/etc/fstab文件。

/etc/fstab中每行的一般语法如下所示:

server:/usr/local/pub  /pub nfs  rsize=8192,wsize=8192,timeo=14,intr

挂载点/pub在客户端机器上必须存在。在客户端系统的/etc/fstab文件中添加这一行后在shell提示下键入命令mount,以及将会从服务器中挂载的挂载点/pub。

使用autofs来挂载NFS

挂载NFS共享的第3种方法是使用autofs,它使用automount守护进程来管理挂载点,只在文件系统被访问时才动态地挂载。

autofs咨询主映射配置文件/etc/auto.master来决定要定义哪些挂载点,然后使用适用于各个挂载点的参数来启动automount守护进程。主映射配置中的每一行都定义一个挂载点,一个分开的映射文件定义在该挂载点下要挂载的文件系统。如/etc/auto.misc文件可能会定义/misc目录中的挂载点,这种关系在/etc/auto.master文件中会被定义。

auto.master文件中的每个项目都有3个字段,第1个字段是挂载点;第2个字段是映射文件的位置;第3个字段可选,可以包括超时数值之类的信息。

例如,要在机器上的/misc/myproject挂载点上挂载远程机penguin.example.net中的/project52目录,在auto.master文件中添加以下行:

/misc /etc/auto.misc --timeout 60

在/etc/auto.misc文件中添加以下行:

myproject  -rw,soft,intr,rsize=8192,wsize=8192 penguin.example.net:/proj52

/etc/auto.misc中的第1个字段是/misc子目录的名称,该目录被automount动态地创建,它不应该在客户端机器上实际存在;第2个字段包括挂载选项,如rw代表读写访问权,第3个字段是要导出的NFS的位置,包括主机名和目录。

autofs是一种服务,要启动这项服务,在shell提示下键入以下命令:

/sbin/service autofs restart

要查看活跃的挂载点,在shell提示下键入以下命令:

/sbin/service autofs status

如果在autofs运行时修改了/etc/auto.master配置文件,则必须在shell提示下键入以下命令来通知automount守护进程重新载入配置文件:

/sbin/service autofs reload



取消挂载用umount ,而不是unmount