NFS配置使用
目录
一、概述
服务器环境:CentOS7
NFS服务器ip:192.168.1.100
客户端ip:192.168.1.101
期望:在NFS服务器上共享一个目录,在客户端上可以直接操作NFS服务器上的这个共享目录下的文件。
--
部署NFS服务所需用到的软件
nfs-utils:NFS服务的全程序,包括rpc.nfsd、rpc.mountd这两个daemons和相关文档说明,以及执行命令文件等。
rpcbind:Centos.x下面RPC的主程序。NFS可视为一个rpc程序,在互动任何一个RPC程序之前,需要做好端口和功能的对应映射工作,这个映射工作就是由RPCBIND服务来完成的。因此,在提供NFS服务之前必须先启动RPCBIND服务。
二、NFS服务器端安装和配置
2.1.服务端安装
yum install -y rpcbind nfs-utils
2.2.服务端配置
mkdir -p /data/nfs
chown -R nfsnobody.nfsnobody /data/nfs
echo "/data/nfs 192.168.1.101(rw,sync)">/etc/exports
2.3.防火墙安全配置
2.3.1.方案一、关闭防火墙或对内网所有端口开放
#关闭防火墙-firewalld方式配置
systemctl stop firewalld #停止firewall
systemctl disable firewalld #禁止firewall开机启动
#关闭防火墙-iptables方式配置
systemctl stop iptables #停止iptables
systemctl disable iptables #禁止iptables开机启动
#指定ip开放所有端口-firewall方式配置
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.101" accept'
firewall-cmd --reload
#指定ip开放所有端口-iptables方式配置
iptables -A INPUT -s 192.168.1.101 -p all -j ACCEPT
service iptables save
2.3.2.方案二、防火墙不关闭,开放指定端口号
由于rpc和nfs除了使用111和2049端口号外,还会部分端口号是动态的,故需要先配置为静态端口
编辑/etc/sysconfig/nfs,末尾增加如下内容
RQUOTAD_PORT=30001
LOCKD_TCPPORT=30002
LOCKD_UDPPORT=30002
MOUNTD_PORT=30003
STATD_PORT=30004
#firewall方式配置开放端口111,2049,30001,30002,30003,30004
firewall-cmd --zone=public --add-port=111/tcp --add-port=111/udp --add-port=2049/tcp --add-port=2049/udp --add-port=30001/tcp --add-port=30001/udp --add-port=30002/tcp --add-port=30002/udp --add-port=30003/tcp --add-port=30003/udp --add-port=30004/tcp --add-port=30004/udp --permanent
firewall-cmd --reload
#iptables方式配置开放端口111,2049,30001,30002,30003,30004
iptables -I INPUT -s 192.168.1.101 -p tcp -m multiport --dports 111,2049,30001,30002,30003,30004 -m comment --comment "NFS服务" -j ACCEPT
service iptables save
systemctl restart iptables.service
2.4.启动NFS服务
systemctl start rpcbind #启动rpcbind
systemctl enable rpcbind #配置rpcbind开机启动
systemctl start nfs-server #启动nfs
systemctl enable nfs-server #配置nfs开机启动
rpcinfo -p localhost #查看注册端口情况
showmount -e localhost #查看自己共享的服务
三、NFS客户端安装和配置
3.1.客户端安装
yum install -y rpcbind nfs-utils
systemctl stop rpcbind
systemctl enable rpcbind
3.2.客户端配置
#客户端查看服务器共享目录
showmount -e 192.168.1.100
#挂载目录
mkdir -p /data/uploads
mount -t nfs 192.168.1.100:/data/nfs /data/uploads
#查看挂载情况
df -h
#配置开机自动挂载
echo "mount -t nfs 192.168.1.100:/data/nfs /data/uploads" >>/etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
3.3.测试验证
#测试验证
客户端 echo 'hello'> /data/uploads/hello.txt
服务端查看 ls /data/nfs/
3.4.其他
#解除挂载:
umount /data/uploads
四、/etc/exports参数说明
/data/nfs 192.168.1.101(rw,sync)
的意思是把共享目录/data/nfs共享给192.168.1.101这个客户端ip,只允许192.168.1.101这个主机有访问权限,后面括号里的内容是权限参数,其中:
rw 表示设置目录可读写。
sync 表示数据会同步写入到内存和硬盘中,相反 async 表示数据会先暂存于内存中,而非直接写入到硬盘中。
如果想让另外一台主机也可以挂载这个目录,那么直接在后面追加即可,比如:
/data/nfs 192.168.1.101(rw,sync) 192.168.1.102(rw,sync)
多个目录可以每行配置一个,如果想让这个网段的主机都可以访问,
假如此时子网掩码是255.255.255.0,网关是192.168.1.0,那么ip那里可以写成192.168.1.0/24表示允许地址段的所有主机访问
/data/nfs 192.168.1.0/24(rw,sync)
也可以这种格式配置
/data/nfs 192.168.1.*(rw,sync)
客户端常用的指定方式
指定ip地址的主机:192.168.1.101
指定子网中的所有主机:192.168.0.0/24 192.168.0.0/255.255.255.0
指定域名的主机:david.bsmart.cn
指定域中的所有主机:*.bsmart.cn
所有主机:*
访问权限选项
设置输出目录只读:ro
设置输出目录读写:rw
用户映射选项
all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody);
no_all_squash:与all_squash取反(默认设置);
root_squash:将root用户及所属组都映射为匿名用户或用户组(默认设置),即如果访问NFS Server共享目录的用户是root,则它的权限将压缩成匿名用户,同时它的UID和GID通常会变成nfsnobody账号身份。;
no_root_squash:与rootsquash取反,访问NFS Server共享目录的用户如果是root的话,它对该共享目录具有root权限,这个配置原本是为无盘客户端准备的。谨慎使用;
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服务器也不检查其父目录的权限,这样可以提高效率;