Linux 下 NFS 服务器的安装与配置


-安装所需的软件包
[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

你可能感兴趣的:(Linux)