整理RHEL 6以上的NFS配置

一.概要:
nfs(网络文件系统),它可以在类UNIX系统上进行文件共享。如果涉及到Windows的系统则需要考虑使用samb服务提供的文件共享了。它是基于RPC(远程过程调用)协议的(占用端口111)一种服务器程序,如果没有RPC它是运行不了的。所以:
1).服务器端必须启动RPC服务和NFS服务才能实现文件共享;
2).客户机端也必须运行RPC服务和nfs服务;
3).RHEL 6以上的版本使用NFSv4,防火墙上仅需要开通2049端口即可

二.文件及原理
软件:portmap软件包( rhel6以后改名为rpcbind),用于提供RPC服务;
    nfs-utils软件包,提供nfs服务器的启动脚本和维护工具,一般会先装portmap
yum -y install portmap  nfs-utils
主要文件及格式:
主配置文件:/etc/exports
配置文件格式如下:
<输出目录> [客户端1 选项(访问权限,用户映射,其他)][客户端2]...
1.输出目录
指要共享给client的目录;

2.客户端指定方式:
IP地址:192.168.100.110;
指定子网中的主机(CIDR):192.168.100.0/24
指定域名中的主机:a.xxx.com
指定域名的所有主机:*.xxx.com
所有主机:*
主机列表:server1 server2

3.选项,用来设置输出目录的访问权限和映射用户等:
权限:ro(只读),rw(读写), 注意:文件权限不仅仅是在配置文件中设置完就行了,还要文件夹本身的权限支持访问才行
用户映射选项:
all_squash 将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody),可以更加严格的控制client端的权限对server的影响;
no_all_squash 与all_squash取反(默认设置)
root_squash 将root用户及所属组都映射为匿名用户或用户组(默认设置);
no_root_squash 不将root用户映射到匿名用户,即允许客户端的root用户有server端root用户一样的权限操作NFS中的文件;
fsid 为每个NFS设置一个特定的ID以便于进行跟踪,这项设定在集群中只管重要;
anonuid=xxx 将远程访问的匿名用户指定为本地用户(UID=xxx);
anongid=xxx 将远程访问的所有用户组都映射为匿名用 户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx);
其它选项  
secure 限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);
insecure 允许客户端从大于1024的tcp/ip端口连接服务器;
sync 将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
async 将数据先保存在内存缓冲区中,必要时才写入磁盘,容易引起数据丢失;
wdelay 检查是否有相关的写操作,如果有则将这些写操作 一起执行,这样可以提高效率(默认设置);
no_wdelay 若有写操作则立即执行,应与sync配合使用;
subtree 若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置);
no_subtree 即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率; 


日志文件:/var/log/messages

三.配置步骤
3.1.NFS服务器端动作
1.安装nfs-utils: yum -y install nfs-utils*
2.设置共享目录:/etc/exports
hosts1([r][w|o],[ anonuid=xx,anongid=xx]) hosts2([r][w|o])...
表示这个目录对于哪些主机有哪些权限(uid/gid则表示以那个用户ID访问此路径),主机可以按照CIDR方式写(例如192.168.1.0/24)。样例:
/u01 *(rw)
/u02 192.168.19.0/24(rw) 192.168.10.10(ro)
/u03 192.168.100.61(rw,anonuid=1000,anongid=1100)-->/此范例表示/u03能被100.61主机访问,在client端创建文件时它在server端显示的用户和组的ID分别为1000和1100

3.启动服务
service {rpcbind|portmap} start|status
service nfs restart
chkconfig nfs on
4.常用命令:
exportfs [-aruv] [host:/path]
-r 重新加载exports文件;
-a exports文件中的所有路径.
-u 停止共享某个路径
-v 输出详细信息
exportfs -auv 表示停止共享,就算已经在client挂载的文件系统也就在客户端看不到了;
exportfs -arv 表示重新共享全部,如果执行完上一条再执行这个,就算目标端没有重新mount也可以看到


3.2.NFS客户机端动作
1.安装nfs-utils: yum -y install nfs-utils*

2.常用命令
showmount [-adehv] [host]
-a 查看指定[hosts]上的所有挂载的nfs
-d 查看指定[hosts]上挂载的目录
-e 附加[hosts]指定server,表示查看指定server的exportlist,在server端可以指定为localhost查看本机的共享列表
-h 帮助信息
-v 详细信息

3.使用Mount命令挂载
mount -t nfs -o soft 192.168.100.110:/u01 /u02/test01 -->最好以软链接方式挂载
mount nfsserver:/ /mnt-->NFSv4时可以将NFSSERVER上的所有NFS路径映射到/mnt目录下进行访问

4.NFS的持久性挂载
如果该NFS是需要一直挂载在client上的,我们需要考虑确保该路径每次机器重启后都可以挂载上来。通常情况下,我们会将该节点的挂载信息写入到/etc/fstab下。但是如果系统启动后很长时间都不能连接到网络,那么我们将会收到大量的报错。为了规避报错,可以在fstab中nfs挂载信息指定_netdev选项,该选项控制操作系统等到网络可用的情况下才会挂载该NFS,范例写法如下:
nfsserver:/data /data nfs  _netdev 0 0

5.NFS自动挂载
NFS自动挂载可以解决用户通过OpenLDAP认证登陆系统,登陆系统后才能访问他们的workspace,该workspace存放在NFS服务器上,就算用户在不同机器登陆都可以访问到同一个workspace。此时fstab就不能实现了,automount实现此功能过程如下:
1).启动autofs服务;
2).配置/etc/auto.master配置文件;
# 以下为操作系统范例文件,automount会使用automount -hosts机制自动监控/net目录,也就是说所有的自动挂载的nfs路径会挂载到/net下可以进行访问。访问步骤为:1).启动autofs的情况下进入/net执行ls为空;2).cd 可以看到该nfs服务器下共享的目录(但是该nfsserver子目录在/net下是不可见的)
# Sample auto.master file
# This is an automounter map and it has the following format
# key [ -mount-options-separated-by-comma ] location
# For details of the format look at autofs(5).
#
/misc    /etc/auto.misc
#
# NOTE: mounts done from a hosts map will be mounted with the
#    "nosuid" and "nodev" options unless the "suid" and "dev"
#    options are explicitly given.
#
/net    -hosts
#
# Include central master map if it can be found using
# nsswitch sources.
#
# Note that if there are entries for /net or /misc (as
# above) in the included master map any keys that are the
# same will not be seen as the first read key seen takes
# precedence.
#
+auto.master
3).配置indirect文件指定需要autofs挂载的内容.
4).配置自动挂载的范例()
a).在NFS客户端创建目录/data;
b).在/etc/auto.master中添加以下内容(指定/data的indirect文件):
/data  /etc/auto.data
c).编辑indirect文件/etc/auto.data加入以下内容:
files   -rw  nfsserver:/data
d).重启autofs服务,进入/data后ls确认该目录为空;
e).在/data目录下cd files会进入到automount的目录,该目录下为nfsserver的/data目录内容。
5).如果想要实现5中描述的ldap验证后挂载家目录的目的,则实现过程如下:
a).在NFS服务端将编辑/etc/exports并加入内容:
/home   *(rw)
b).启动服务端的nfs服务并创建一个新用户后执行以下命令确认共享的路径是否正确:
showmount -e nfsserver
c).编辑客户端的auto.master文件,加入以下内容指定indirect文件
/home  /etc/auto.home
d).在indirect文件中指定配置(*代表任意目录,&代表服务端与客户端名字相同的目录):
*  -rw  nfsserver:/home/&
e).重启客户端的autofs服务,即可访问服务端的家目录


四.原理说明
4.1.关于权限
client端访问nfs文件夹的时候实际上是以其他组的成员的身份访问服务器端的文件的,所以对此我们需要进行相关设置:
1).在server端将文件夹权限设置为:chmod o+w
2).假设想用它做ogg,那么我们需要在源端的exports文件中设置: hosts1([r][w|o],[ anonuid=ogg用户的id,anongid=ogg用户所在组ID])

你可能感兴趣的:(Linux,OS)