-安装所需的软件包
[root@vmftp ~]# yum -y install portmap nfs-utils nfs4-acl-tools
安装完成后配置客户端挂载和访问的目录:
如果我们在使用过程中修改了/etc/exports 文件,通过 exportfs -r 命令即可生效
[root@vmftp ~]#vi /etc/exports
/HA 192.168.137.211(rw,sync,no_wdelay,fsid=0)
192.168.137.211 上面的用户可以挂载本机上的 /HA 目录到自己文件系统里
ro 该主机对该共享目录有只读权限
rw 该主机对该共享目录有读写权限
root_squash(默认)客户机用root用户访问该共享文件夹时,将root用户映射成匿名用户
no_root_squash 客户机用root访问该共享文件夹时,不映射root用户
no_all_squash(默认):访问用户先与本机用户匹配,匹配失败后再映射为匿名用户或用户组
all_squash 客户机上的任何用户访问该共享目录时都映射成匿名用户
anonuid 将客户机上的用户映射成指定的本地用户ID的用户
anongid 将客户机上的用户映射成属于指定的本地用户组ID
secure(默认):限制客户端只能从小于1024的tcp/ip端口连接服务器
sync 资料同步写入到内存与硬盘中
async 资料会先暂存于内存中,而非直接写入硬盘
insecure 允许从这台机器过来的非授权访问
wdelay(默认):检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率
no_wdelay:若有写操作则立即执行,应与sync配合使用
subtree_check(默认) :若输出目录是一个子目录,则nfs服务器将检查其父目录的权限
no_subtree_check :即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率
单台主机ip或域名:192.168.137.211(test.nfs.com)
子网中的所有主机:192.168.0.0/24 或 192.168.0.0/255.255.255.0
域中的所有主机:*.nfs.com
所有主机:*
配置完成后查看共享目录:
[root@vmftp ~]# exportfs
/HA 192.168.137.211
exportfs 命令的相关选项如下:
-a 全部挂载或卸载 /etc/exports中的内容
-r 重新读取/etc/exports 中的信息并更新/etc/exports、/var/lib/nfs/xtab
-u 卸载单一目录(和-a一起使用为卸载所有/etc/exports文件中的目录)
-v 在export的时候,将详细的信息输出到屏幕上。
-其他可能会用到命令:
nfsstat
查看NFS的运行状态
rpcinfo
查看rpc服务注册情况
相关选项:
-p 显示所有的端口与程序信息
showmount
-a 显示客户端连接的目录信息
-e IP或者hostname 显示此IP地址分享出来的目录
---------------------------------------------------------------------
-修改 hosts.deny和hosts.allow 文件来控制访问源
[root@vmftp ~]# vi /etc/hosts.deny
portmap:ALL
[root@vmftp ~]# vi /etc/hosts.allow
portmap:192.168.137.211
---------------------------------------------------------------------
-在系统运行级别自动启动 NFS 服务
[root@vmftp ~]# chkconfig nfs on
[root@vmftp ~]# chkconfig portmap on
查看启动级别:
[root@vmftp ~]# chkconfig --list nfs
nfs 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
[root@vmftp ~]# chkconfig --list portmap
portmap 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
[root@vmftp ~]# /etc/init.d/portmap start
启动 portmap: [确定]
[root@vmftp ~]# /etc/init.d/nfs start
启动 NFS 服务: [确定]
关掉 NFS 配额: [确定]
启动 NFS 守护进程: [确定]
启动 NFS mountd: [确定]
---------------------------------------------------------------------
-客户端配置
新建挂载点:
[root@client ~]# mkdir /MQHA
使用nfsv4 协议挂载服务器端的目录 /HA 到新建挂载点下:
[root@client /]# mount -t nfs4 -o hard,intr 192.168.137.240:/ /MQHA
查看挂载:
[root@client /]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/VolGroup00-LogVol00
18G 2.5G 14G 16% /
/dev/sda1 99M 13M 81M 14% /boot
tmpfs 499M 0 499M 0% /dev/shm
.host:/ 203G 129G 74G 64% /mnt/hgfs
192.168.137.240:/ 18G 5.4G 12G 33% /MQHA
然后配置自动挂载,修改 /etc/fstab 文件:
[root@client /]# vi /etc/fstab
192.168.137.240:/ /MQHA nfs4 defaults 0 0
第一列为设备号或该设备的卷标
第二列为挂载点
第三列为文件系统
第四列为文件系统参数
第五列为是否可以用demp命令备份。0:不备份
第六列为是否在系统启动的时候,用fsck检验分区。0:不检验
---------------------------------------------------------------------
---------------------------------------------------------------------
可能会遇到的问题:
1、我们在挂载的文件系统下新建文件时出现 Permission denied
我们在服务器端建立了文件系统 /HA 但是它的属主是 root:root,假设我们在客户端使用 test 这个用户来操作,
就会出错,因为 NFS 要求服务器端和客户端的 UID 和 GID 必须一致,所以我们可以在服务端新建 test 用户,并将 /HA 目录的权限赋给它,
或者直接 chmod 777 /HA 更改权限,但是文件的属主会变成 nobody,所以最好是建立相同的用户和组,并确保 UID 和 GID 一致。
2、mount.nfs: Stale NFS file handle
重新挂载
3、mount.nfs4: 192.168.137.240:/HA failed, reason given by server: No such file or directory
服务端文件系统存在的时候,还是会报错,注意配置 fsid=0 和挂载的命令 mount -t nfs4 192.168.137.240:/ /MQHA
192.168.137.240:/ 这个是根目录 不是 /HA
------------------------------------------------------------------------
当客户机挂载了远程nfs服务器时,会发现一个问题。当你用一个普通用户的身份去挂载nfs时,你可能会发现文件的UID和GID发生了变化,是因为NFS本身没有身份认证机制。如果nfs服务器和客户机都有相同的账号和组时,就不会有这样的问题(/etc/passwd和/etc/group相同)
所以在用cat /etc/passwd | grep nfsnobody 会发现有一个nfsnobody这样用户,
1、在上面的操作过程中,如果你不幸遇到下面这个问题的话,可以尝试更新 Linux kernel 或通过打开 IPv6 来解决这个问题,这是1个 bug:
# mount -t nfs4 172.16.20.1:/ /home/vpsee/bak/
mount.nfs4: Cannot allocate memory
2、如果遇到如下问题,可能是因为你的 mount -t nfs 使用的是 nfsv3 协议,需要明确指出使用 nfsv4 协议挂载 mount -t nfs4:
# mount -t nfs 172.16.20.1:/ /home/vpsee/bak/
mount: mount to NFS server '172.16.20.1' failed: RPC Error: Program not registered.
# mount -t nfs4 172.16.20.1:/ /home/vpsee/bak/
mount.nfs: Stale NFS file handle
需要重新挂载
后来查了一些资料,说是“ 当我们已mount 上的file or directory ,在server上突然被remove or unexport ,就会出现此讯息“。
就是说,假如client端mount上了server端的directory之后,假如server端又将这个directory unshare了,那么就会在client端出现这个错误。
正文:
其实解决办法很简单,就是在client上把那个文档unmount掉。
可是其实做起来很难,因为经常会得到 is busy的错误。
能够用下面的三个方法:
1)用fuser杀掉占用那个目录的进程
fuser -k /directory
2)在启动的进程里面查找
ps -ef |awk '{print }' |grep -v PID |xargs /usr/proc/bin/pwdx
这种方法只能在solaris8及以上版本使用
3)umount -f /directory
强制umount