NFS service 是使不同的计算机之间能通过网络进行文件共享的一种网络协议,多用于UNIX/linux网络系统中。
由SUN公司于1984年开发,目的让不同的计算机,不同操作系统彼此可以共享文件。
NFS采用客户/服务器工作模式,在NFS服务器上将/nfs/public目录设置为输出目录(共享目录),其他的客户端就可以挂载到自己系统中的某个目录下,这个目录可以与服务器上的输出目录和其他客户机中的目录不相同。
NFS协议本身没有提供数据传输的功能,必须借助于远程过程调用(RPC)协议来实现数据的传输。
三个系统守护进程:
rpc.nfsd :基本的NFS守护进程,主要功能管理客户端能否登入服务器。
rpc.mountd: RPC安装守护进程,主要管理NFS的文件系统。当客户端顺利通过rpc.nfsd登录NFS服务器之后,在使用NFS服务器所提供的文件前,还必须通过文件使用权限的验证,rpc.mountd会读取NFS的配置文件/etc/exports来对比客户端的权限
portmap:进行端口映射,当客户端尝试连接并使用RPC服务器提供的服务时,portmap会将所管理的与服务对应的端口号提供给客户端,从而使客户端可以通过该端口向服务器请求服务。
其他相关进程(线程):
rpc.statd:实现文件加锁
lockd : 内核线程,实现文件锁的一个线程
rpc.quotad:结合真正文件系统上的文件磁盘配额信息来实现当某用户基于网络访问的时候也能实现磁盘配额的功能。
安装包:nfs-util(仅仅是一个工具组件)
启动脚本:/etc/init.d/nfs (nfsd,rcp.mountd,rpc.quotad)
/etc/init.d/nfslock (rpc.startd,lockd)
监听端口:2049/tcp 2049/udp (nfsd)
半随机端口(通过portmap 111/tcp 111/udp)
配置文件:/etc/exports /etc/sysconfig/nfs (提供额外功能)
检查NFS运行是否正常:
[root@station39 ~]# rpcinfo -p
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 666 status
100024 1 tcp 669 status
export文件格式
<输出目录> [客户端1 (选项1,选项2,……)] [客户端2(选项1,选项2,……)]
PS:输出目录和客户端之间,客户端和客户端之间都使用空格分隔,但是客户端和选项之间不能有空格。
客户端列表:
单台主机:FQDN,或IP 地址
网络组 :@group
通配符:* ? . Example:*.example.com
IP 地址: Example:192.168.0.1/255.255.255.0 192.168.0.1/24
常用选项:
ro 只读
rw 读写
async 异步写入
sync 同步写入
root_squash 将root用户及所属用户组都映射为匿名用户或用户组(默认设置)
no_root_squash 不将root用户及所属用户组都映射为匿名用户或用户组
all_squash 将远程访问的所有普通用户及所属用户组都映射为匿名用户或者用户组(一般为nfsnobody)
no_all_squash 不将远程访问的所有普通用户及所属用户组都映射为匿名用户或者用户组(默认设置)
anonuid=xxx 将远程访问的所有用户都映射为匿名用户,并指定该匿名用户账户为本地用户账号(UID=xxx)
anongid=xxx 将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账号(GID=xxx)
Example:编辑/etc/exports 文件,添加一个共享目录
/share 192.168.0.1/24(ro)
[root@station39 ~]# service nfs start
查看某一服务器是否有共享目录:
[root@station39 share]# showmount -e 192.168.0.39
Export list for 192.168.0.39:
/share 192.168.0.1/24
客户端挂载:
mount -t nfs 192.168.0.39:/share /nfs
PS :NFS根据ID号来确认用户身份,NFS协议的致命缺陷。
exportfs 命令: 修改/etc/exports文件内容后,不需重启NFS服务,直接使修改生效。
-a 输出在/etc/exports文件中所设置的所有目录;
-r 重新读取/etc/exports文件中的设置,并使设置立即生效,不需重启NFS服务
一般 -ar 结合使用。
-u 停止输出某一目录
-v 在输出目录时将目录显示到屏幕上
showmount
-e 客户端 显示某一服务器所有的共享目录
-a 服务器端 显示自己的共享文件系统里边哪一个文件系统正在被访问
[root@station39 ~]# showmount -a
All mount points on station39.example.com:
192.168.0.127: /share
-d 服务器端 显示指定的NFS服务器中哪些共享目录正在被客户端连接访问。
[root@station39 ~]# showmount -d
Directories on station39.example.com:
/share
客户端挂载方式:
/etc/fstab 开机自动挂载
192.168.0.23/:share /nfs nfs defaults 0 0
/etc/init.d/netfs (脚本) 可以开机挂载任意设置为开机自动挂在的文件系统
autofs 可以根据需要自动挂载或卸载
手动挂载
NFS工作流程:
1 客户端向服务器端发起连接请求,服务器端通过portmap服务来找到rpc.mounted 所使用的端口并返回给客户端;
2 rpc.mountd服务根据来源地址或者主机名称验证客户端是否允许来访问共享目录。
3 如果允许,rpc.mountd给客户端返回一个文件句柄;
4 客户端使用rpc.mountd返回的文件句柄通过nfsd进程提供的基于TCP或UDP 2049端口的服务来访问或者改变文件系统;
5 lockd 和 rpc.statd服务管理文件锁。
如果要使用固定端口,可以编辑/etc/sysconfig/nfs文件
LOCKD_TCPPORT="4004"
LOCKD_UDPPORT="4004"
MOUNTD_PORT="4002"
STATD_PORT="4003"
RQUOTAD_PORT="4005"
STATD_OUTGOING_PORT="4006"
本文转自 490999122 51CTO博客,原文链接:http://blog.51cto.com/lyp0909/535746,如需转载请自行联系原作者