在Linux下实现文件共享有多种方式,NFS就是其中之一。网络文件系统(NFS)协议是由Sun MicroSystem在20世纪80年代为了提供对共享文件的远程访问而设计和实现的。该协议采用Client/Server模型, 通过使用Sun开发的远程过程调用协议(RPC Protocol)来实现运行在一台计算机上的程序来调用在另一台远程机器上运行的子程序.
NFS包含3个版本:NFSv2、NFSv3、NFSv4
RHEL6是以NFSv4作为默认版本,NFSv4使用TCP 协议(端口号是2049)和NFS服务器建立连接,而老版本的NFS可以在TCP协议或者是UDP协议上运行。NFS服务的端口默认是不固定的,但可以强制NFS使用固定端口。
RHEL6中NFS的软件包:nfs-utils
在NFS的相关文档中,有两个值得重点关注
/etc/exports:NFS服务的主配置文件,该文件的最主要目的是发布共享目录并为共享目录限制权限。和其他服务的主配置文件一样,绝大部分的配置都是通过编辑该文件完成
/var/lib/nfs/xtab:这个文件主要用来记录客户端与NFS服务器的连接记录,如果想查看哪些客户端曾经连接过NFS服务器,查看该文件即可
NFS服务的主配置文件exports发布共享目录的格式如下:
共享目录 [客户端1参数1][客户端2 参数]…
共享目录是指在NFS服务器上需要给客户端共享出来的目录,在设置共享目录的时候要使用绝对路径
客户端是指所有可以访问NFS服务器共享目录的计算机。常见客户端指定方式如下表:
客户端指定方式 |
示例 |
使用IP地址指定单一主机 |
10.20.30 .40 |
使用IP地址指定范围主机 |
172.16.0.0/16 |
使用IP地址指定范围主机 |
192.168.1.* |
使用域名指定单一主机 |
Test.ice.apple |
使用域名指定范围主机 |
*.ice.apple |
使用通配符指定所有主机 |
* |
参数:在诸多可以附带的参数中,使用最多的要数权限设置的参数了,常见参数如下表:
参数 |
说明 |
ro |
设置共享权限为只读 |
rw |
设置共享权限为读写 |
root_squash |
当使用NFS服务器共享目录的使用者是root时,将不被映射为匿名账号 |
no_root_squash |
当使用NFS服务器共享目录的使用者是root时,将被映射为匿名账号 |
all_squash |
将所有使用NFS服务器共享目录的使用者都映射为匿名账号 |
anonuid |
设置匿名账号的UID |
anongid |
设置匿名账号的GID |
sync |
保持数据同步,也就是将数据同步写入内存和硬盘。这可能导致效率降低 |
async |
先将数据保存在内存中,而不是直接保存在硬盘 |
注意:在发布共享目录的格式中除了共享目录是必跟参数外,其他参数都 是可选 的。而且共享目录和客户端1与客户端2之间都 需要使用空格符号,但客户端和参数之间不能有空格。
如:在/etc/exports文件添加如配置:
/media *(ro) 192.168.0.10(rw,no_root_squash)
/NFS/test 192.168.0.0/24(ro)
NFS服务的启动与停止:NFS服务脚本是NFS
chkconfig --list
将rpcbind和nfs都设为自动启动
chkconfig rpcbind on
chkconfig nfs on
启动rpcbind
service rpcbind start
之后才能成功启动nfs
service nfs start
一定要先启动rpcbind,然后再启动nfs,不然NFS quotas和NFS daemon都将启动失败。
service nfs start|stop|restart|reload
exportfs命令:用于维护当前主机中NFS服务器的输出目录列表
exportfs –rv使NFS服务器重新读取exports文件的设置,而不需重启NFS服务器
exportfs –auv 用于停止当前主机中NFS服务器的所有目录输出
exportfs –av 用于输出NFS服务器的所有共享目录
exportfs –v 显示输出列表同时,显示导出的设定参数
showmount -e 在NFS Server上执行此命令显示NFS Server上所有的共享卷
格式:showmount –e NFS服务器的IP
showmount -d NFS服务器IP 查看NFS服务器上哪些共享目录被客户端挂载了。
showmount - a NFS服务器地址:显示指定NFS服务器的所有客户端主机和其所连接的目录
客户端的使用:
客户端可以先使用showmount –e查看NFS服务器发布的共享目录
挂载NFS文件系统
Mount -t nfs NFS服务器IP地址(或主机名):共享目录 本地挂载点
如:mount –t nfs 192.168.0.1:/media /mnt
启动挂载NFS
想要系统每次启动时自动挂载NFS服务器上的共享目录,则可以编辑/etc/fstab文件
NFS服务器的IP:共享目录 挂载点 nfs defaults 0 0
配置NFS固定端口:
默认情况下,NFS配置完毕后,每次重新启动该服务后其相应的端口都会随机变化,如果启用了防火墙,如何开放变化的端口就成问题了,其实解决办法也很简单,只需对NFS进行配置使用固定端口即可
NFS服务启动时,会检查/etc/sysconfig/nfs文件,因此改该文件,修改相应字段便可以强制NFS服务使用固定端口了:
若NFS服务器上启用了iptables防火墙且filter表的3个链默认规则为DROP需创建如下规则:
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables –A OUTPUT –m state --state ESTABLISHED,RELATED –j ACCEPT
iptables –A INPUT –m state --state ESTABLISHED,RELATED –j ACCEPT
iptables –A INPUT –p tcp --dport 111 –j ACCEPT
iptables –A INPUT –p udp --dport 111 –j ACCEPT
iptables –A INPUT –p tcp --dport 2049 –j ACCEPT
iptables –A INPUT –p udp --dport 2049 –j ACCEPT
iptables –A INPUT –p tcp –m multiport --dport 875,32803,32769,892,662 –j ACCEPT
iptables –A INPUT –p udp –m multiport --dport 875,32803,32769,892,662 –j ACCEPT
service iptables save