NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
Server:
[root@app home]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
Client:
[root@app home]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
[root@app home]# rpm -aq | grep nfs
[root@app home]# rpm -aq | grep rpcbind
rpcbind是一个RPC服务,主要是在nfs共享时候负责通知客户端,服务器的nfs端口号的
[root@app home]# yum install nfs-utils rpcbind
[root@app home]# vi /etc/exports
#重新export一次
[root@app home]#exportfs -rv
添加共享信息:
/home/adam/static 192.168.0.2(rw)
/home/adam/static:共享文件夹
192.168.0.2:可以挂载服务器目录的客户端ip
(rw):该客户端对共享的文件具有读写权限
[root@app home]# vi /etc/hosts
192.168.0.1 hostname
192.168.0.1:服务器本机的ip地址
hostname:服务器的机器名
在SUSE上,服务名为nfsserver,不是nfs。
必须先启动rpcbind,再启动nfs,才能让NFS在rpcbind上注册成功
[root@app home]# service rpcbind start
[root@app home]# service nfs start
查看启动状态:
[root@app home]# service rpcbind status
[root@app home]# service nfs status
注意,RPC的状态是Active: active (running);而NFS的状态是Active: active (exited)。
查看自己共享的服务:
[root@app home]# showmount -e
/home/adam/static 192.168.0.2
[root@app home]# rpcinfo -p localhost
NFS服务使用的111和2049端口是固定的,mountd端口是动态的,需要固定,然后在防火墙放行。
[root@app home]# vi /etc/sysconfig/nfs
1.添加:
RQUOTAD_PORT=30001
LOCKD_TCPPORT=30002
LOCKD_UDPPORT=30002
MOUNTD_PORT=30003
STATD_PORT=30004
2.重启nfs和rpcbind:
[root@app home]# service rpcbind restart
[root@app home]# service nfs restart
(端口并未修改,reboot系统后才修改)
1.查看防火墙是否开启:
[root@app home]# firewall-cmd --state
2.设置防火墙(如果访问ip没有限制,就不需要添加-s ip地址):
[root@app home]# iptables -A INPUT -s 192.168.0.2 -p tcp --dport 111 -j ACCEPT
[root@app home]# iptables -A INPUT -s 192.168.0.2 -p udp --dport 111 -j ACCEPT
[root@app home]# iptables -A INPUT -s 192.168.0.2 -p tcp --dport 2049 -j ACCEPT
[root@app home]# iptables -A INPUT -s 192.168.0.2 -p udp --dport 2049 -j ACCEPT
[root@app home]# iptables -A INPUT -s 192.168.0.2 -p tcp --dport 30001:30004 -j ACCEPT
[root@app home]# iptables -A INPUT -s 192.168.0.2 -p udp --dport 30001:30004 -j ACCEPT
[root@app home]# service iptables save
tips:
在centos7中用iptables命令配置完策略规则后,需要保存策略永久生效,执行service iptables save时提示:
[root@app home]# service iptables save
The service command supports only basic LSB actions (start, stop, restart, try-restart, reload, force-reload, status). For other actions, please try to use systemctl.
解决方法:
[root@app home]# systemctl stop firewalld
[root@app home]# systemctl mask firewalld
#安装iptables services
[root@app home]# yum install iptables-services
#设置开机启动
[root@app home]# systemctl enable iptables
#重启iptables service
[root@app home]# systemctl restart iptables
#执行保存配置命令
[root@app home]#service iptables save
[root@app home]# service rpcbind start
[root@app home]# service nfs start
[root@app home]# service rpcbind status
[root@app home]# service nfs status
[root@app home]# showmount -e 192.168.0.1
Export list for192.168.10.1:
/home/adam/static 192.168.0.2
[root@app home]# showmount #显示NFS客户端信息
[root@app home]# showmount 192.168.0.1 #显示指定NFS服务器连接NFS客户端的信息
[root@app home]# showmount -e #显示输出目录列表
[root@app home]# showmount -e 192.168.1.1 #显示NFS服务器共享目录列表
[root@app home]# showmount -d #显示被挂载的共享目录
[root@app home]# showmount -a #显示客户端信息和共享目录
[root@app home]# showmount -a 192.168.1.1 #显示指定NFS服务器的客户端信息和共享目录
[root@app adam]# mkdir static
[root@app adam]# mount -t nfs -o nolock,nfsvers=3,vers=3 192.168.0.1:/home/adam/static /home/adam/static
查看挂载的状态
[root@app adam]# mount | grep nfs
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)
nfsd on /proc/fs/nfsd type nfsd (rw,relatime)
192.168.0.1:/home/adam/static on /home/adam/static type nfs (rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,nolock,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.0.1,mountvers=3,mountport=30003,mountproto=udp,local_lock=all,addr=192.168.0.1)
[root@app adam]# vi /etc/fstab
192.168.0.1:/home/adam/static /home/adam/static nfs defaults 0 0
[root@app adam]# cd static
[root@app static]# ll #可以看到服务端共享目录中文件
[root@app adam]# systemctl list-unit-files | grep nfs
proc-fs-nfsd.mount static
var-lib-nfs-rpc_pipefs.mount static
nfs-blkmap.service disabled
nfs-config.service static
nfs-idmap.service static
nfs-idmapd.service static
nfs-lock.service static
nfs-mountd.service static
nfs-rquotad.service disabled
nfs-secure.service static
nfs-server.service disabled
nfs-utils.service static
nfs.service disabled#开机不启动
nfslock.service static
nfs-client.target enabled
[root@app adam]# ll #systemctl enable nfs
rpcbind不需要开机启动
[root@app adam]# systemctl list-unit-files | grep rpcbind
rpcbind.service indirect#间接启动(无法编辑)
rpcbind.socket enabled
rpcbind.target static
#系统服务未完全启动,挂载会失败,在系统启动以后,再挂载
[root@app adam]# vi /etc/rc.local
#添加
sleep 30
mount -t nfs 192.168.0.1:/home/adam/static /home/adam/static
#赋予可执行权限
[root@app adam]# chmod +x /etc/rc.local
查看是否挂载上
[root@app adam]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/vda1 79G 1.8G 74G 3% /
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 8.4M 3.9G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
192.168.0.1:/home/adam/static 79G 1.9G 74G 3% /home/adam/static
tmpfs 799M 0 799M 0% /run/user/0