一 exportfs命令
exportfs命令是和nfs-utils这个包一起安装的
使用场景:比如我们已经配置并挂载好了一些机器,隔了一段时间后我们又需要新增加一些机器来访问服务端或者是增加共享的目录,那此时呢,我们就需要更改配置文件然后重启nfs服务,但如果远程客户端正在使用我们这个nfs服务或者说正在挂载着,这时候如果我们停止了nfs服务的话,那么远程客户端就会挂起,这个影响就比较大了,因为此时客户端上还挂载着这个共享目录,由于不能正常访问,加上客户端服务器读写非常频繁,那这就会导致客户端读写这个目录的进程,比如nginx、php就会挂起,我们知道,当这个进程停止的话,状态就会变成d,而d表示这个进程不能停,一旦变成d,客户端上的这个进程就不正常了,这个进程杀不死也重启不了,最终导致这个服务异常,甚至死机。
很明显,nfs这个服务是不能随便停的,如果要停的话,需要将客户端挂载的目录先卸载下来
# umount /mnt //从挂载点卸载目录
但是系统提示磁盘忙,这是因为我们现在还处于被卸载的磁盘目录下,我们有两种方式解决,
一是退出待卸载的目录,# cd # umount /mnt
二是使用懒汉模式 # umount -l /mnt //其中l表示lazy
上面是卸载一台机器上的目录,但是我们如果有很多台机器,要一台一台地去卸载就会很麻烦,这个时候比较好的方法就是在服务端使用exportfs命令重新来加载一下配置文件,而不用重启nfs服务
1、exportfs常用选项
-a 全部挂载或全部卸载
-r 重新挂载
-u 卸载某一个目录
-v 显示共享目录
一般情况下如果要重新加载配置文件,可以像下面这样使用
# exportfs -arv
2、修改下配置文件来测试验证
为了测试验证exportfs这个命令,我们在服务端配置文件/etc/exports中增加如下配置内容:
/tmp 192.168.75.130(rw,sync,no_root_squash)
再来执行下面的命令
# exports -arv
然后到客户端执行下面的命令
# showmount -e 192.168.75.136 //查看共享目录权限
我们再来将新增的共享目录挂载到客户端
# mount -t nfs 192.168.75.136:/tmp /mnt //挂载后使用df -h命令查看是否挂载成功
现在服务端的目录/tmp就是客户端的/mnt目录# ls /mnt
我们来到客户端,在共享目录下创建一个文件并写入一些内容# vim /mnt/1212.txt
# ls -l /mnt/1212.txt //客户端查看这个新建文件的详细信息
# ls -l /tmp/1212.txt //服务端查看这个新建文件的详细信息
对比上面2张图片可以看到,1212.txt这个文件的属主和属组都是root,这是因为我们在配置文件/etc/exports中设置了不限制root用户no_root_squash,通常情况下,我们不限制root的情况多
二 NFS客户端问题
centos6遇到比较多的一个问题,NFS4的版本会有这个问题:客户端挂载共享目录后,不管是root用户还是普通用户,创建新文件时属主、属组为nobody,而不是我们在配置文件中规定的属主、属组
解决以上问题有两种方案
方案一:在客户端挂载的时候指定nfs的版本号为3,也就是说在挂载命令中加入 -o nfsvers=3,下面两条命令适用于不同的场景
# mount -t nfs-o nfsvers=3192.168.75.136:/tmp/ /mnt/ //执行这条命令的前提是nfs已经停止
# mount -t nfs-oremount nfsvers=3192.168.75.136:/tmp/ /mnt///执行这条命令的话不需要nfs处于停止运行状态
方案二:修改文件/etc/idmapd.conf,将'#Domain = local.domain.edu'改为‘Domain = xxx.com’的格式,其中xxx可以随意定义,修改完成后要重启rpcbind服务
修改前
修改后
# systemctl restart rpcbind //重启rpcbind服务