一、NFS介绍
NFS是Network File System的缩写,它的主要功能是通过网络让不同的机器系统之间可以彼此共享文件或目录。
NFS服务器可以允许NFS客户端将远端NFS服务器端的共享目录挂载到本地的NFS客户端中。
在本地NFS客户端的机器看来,NFS服务器端共享的目录就好象是自己的磁盘分区或者目录一样。
1.1 RPC (remote procedure call 远程过程调用)
以上描述整个启动过程如下图所示: NFS工作原理简图
二、NFS Server端设置
centos 7 ,其中centos7中的已经将portmap名字改成rpcbind了。因为centos7自带了rpcbind,所以不用安装rpc服务。 端口111,rpcbind
192.168.26.136 服务端 Server
192.168.26.137 客户端Client
部署NFS服务,要安装下面两个软件包:
1、nfs-utils:NFS主程序
2、portmap:RPC主程序
yum install nfs-utils -y
2.1 先启动portmap服务 (rpcbind)
systemctl start rpcbind
systemctl status rpcbind
ss -naltp | grep rpc
lsof -i:111
2.2 开启nfs服务
systemctl start nfs
systemctl status nfs
systemctl enable nfs
2.3 修改NFS配置文件 /etc/exports
生产环境场景配置:
NFS配置权限设置
三、NFS配置实例
实例一、共享/oldboy目录给192.168.26.0/24整个网段的读写
服务端26.136操作:
systemctl start nfs
systemctl start rpcbind
mkdir -p /oldboy && cd /oldboy && touch {1..3}.txt && mkdir test1
vim /etc/exports
/oldboy 192.168.26.0/24(rw,sync)
exportfs -r
客户端26.137操作:
[root@memcache137 ~]# showmount -e 192.168.26.136
Export list for 192.168.26.136:
/oldboy 192.168.26.0/24
umount -lf /mnt/
#挂载nfs
mount -t nfs 192.168.26.136:/oldboy /mnt
df -h
此时136的 /oldboy目录权限是755, drwxr-xr-x 3 root root 67 Mar 16 17:37 oldboy 。
客户端此时无法创建文件的,会出现permission denied 。可以oldboy目录给777权限,但是不推荐这种操作。
[root@lb-136 oldboy] cat /var/lib/nfs/etab
/oldboy 192.168.26.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,no_all_squash)
cat /var/lib/nfs/rmtab
注意事项
《开机挂载mount etc/fstab与/etc/rc.d/rc.local区别》
二、实操例子
2.1考试题九:
实现当多台客户端同时挂一台NFS SERVER时,无论从哪个客户端写入数据,其它客户端同样也可以读写,即让所有nfs 客户端写入到Nfs Server 的文件或目录在NfsServer上的用户和组都是同一个名称oldboy。请给出操作步骤,并加以说明。
[root@lb-136 ~]# cat /var/lib/nfs/etab
/oldboy 192.168.26.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,no_all_squash)
grep nfsnobody /etc/passwd
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
无论什么版本的系统,nfs服务默认配置里匿名用户的uid和gid都是65534anonuid=65534,anongid=65534
方法1:
# 尽量不用777权限,因为权限过大
chmod 777 /oldboy/
这时候客户端是可以任意删除/新增文件的。创建出来的用户,用户组是nfsnobody
方法2:
136服务端操作: (该方法在32bit系统中有效, 64bit也行)
cat /etc/exports
/oldboy 192.168.26.0/24(rw,sync,all_squash)
chown -R nfsnobody /oldboy/
chown 755 /oldboy
/etc/init.d/nfs reload
[root@lb-136 /]# chown -R nfsnobody /oldboy
[root@lb-136 /]# ll -ld /oldboy/
drw-r--r-- 4 nfsnobody root 93 Mar 19 15:23 /oldboy/
万能方法:
groupadd oldboy -g 1207
useradd oldboy -u 1207 -g oldboy
chown -R oldboy /oldboy
cat /etc/exports
/oldboy 192.168.26.0/24(rw,sync,all_squash,anonuid=1207,anongid=1207)
systemctl restart nfs
#客户端挂载:
mount -t nfs 192.168.26.136:/oldboy /mnt
2.2 NFS客户端mount挂载参数
增加NFS健壮性:
优化NFS配置:
2.3 nfs server挂了, nfs client会出问题(df -h窗口会死掉)
处理方法1:
umount -lf /mnt
处理方法2:
客户端在挂载时,加上上面说的优化参数hard,intr , 这样服务端那边挂了,客户端执行df -h只会死掉几秒,会有个超时时间,中断操作。
mount -t nfs -o rw,hard,intr 192.168.26.136:/oldboy /mnt
NFS的局限:
NFS Server端的防火墙设置
iptables -A INPUT -i eth1 tcp -s 10.0.0.0/24 --dport 111 -j ACCEPT
iptables -A INPUT -i eth1 udp -s 10.0.0.0/24 --doirt 111 -j ACCEPT
3、exportfs命令
exportfs语法:
停止输出所有目录:
exportfs -auv
启用所有目录
exportfs -rv
exportfs -o rw,sync,all_squash 192.168.1.0/24:/ex