NFS(NetworkFileSystem)即网络文件系统,是Linux/Unix支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
RPC(Remote Procedure Call Protocol远程过程调用协议):
简单的说是函数调用(远程主机上的函数) 一部分功能由本地程序完成 另一部分功能由远程主机上的函数完成。客户端挂载了nfs服务器的文件系统时,进行一些操作,但是这些操作服务端如何知道呢??这可是在内核级别上实现协议。RPC就解决了这个问题,它会将客户端的操作的函数调用发送到服务器端,由服务器端执行这些函数调用。
下面进行一个实例来完成nfs共享的完成
需求
在虚拟机 server0 上配置NFS服务,完成以下任务:
1.只读的方式共享目录 /public,只能被 example.com 域中的系统访问
2.可读写共享目录/protected,能被 example.com 域中的系统访问
然后在虚拟机 desktop0 上访问NFS共享目录
1.将 server0 的 /public 挂到本地 /mnt/nfsmount
2.这些文件系统在系统启动时自动挂载
解决方案
1.服务端需要运行系统服务 nfs-server.service
2.客户端不需要运行特定的系统服务
3.配置NFS共享目录的记录格式:
文件夹绝对路径 客户地址1(ro或rw等控制参数) 客户地址2(ro或rw等控制参数) … …
步骤
步骤一:在server0上发布NFS共享目录
1)准备需要共享的文件夹
[root@server0 桌面]# mkdir /public
[root@server0 桌面]# mkdir /protected
2)建立NFS共享配置
[root@server0 桌面]# vim /etc/exports
/public 192.168.82.0/24(ro)
/protected 192.168.82.0/24(rw)
3)启动系统服务nfs-server,并设置开机自启
[root@server0 桌面]# systemctl restart nfs-server
[root@server0 桌面]# systemctl enable nfs-server
步骤二:在desktop0上挂载NFS共享目录/public
1)创建挂载点
[root@desktop0 桌面]# mkdir /mnt/nfsmount
2)列出server0上提供的NFS共享资源
[root@desktop0 桌面]# showmount -e 192.168.82.76
Export list for 192.168.82.76:
/protected 192.168.82.0/24
/public 192.168.82.0/24
3)配置开机挂载server0的NFS共享目录/public
192.168.82.76:/public /mnt/nfsmount nfs _netdev 0 0
4)测试挂载配置
[root@desktop0 桌面]# mount -a
[root@desktop0 桌面]# df -hT /mnt/nfsmount/
文件系统 类型 容量 已用 可用 已用% 挂载点
192.168.82.76:/public nfs4 18G 4.5G 14G 26% /mnt/nfsmount
[root@server0 桌面]# ps -ef |egrep "rpc|nfs" #查看nfs的相进程
root 740 2 0 07:56 ? 00:00:00 [rpciod]
rpcuser 6011 1 0 09:48 ? 00:00:00 /usr/sbin/rpc.statd --no-notify
rpc 6013 1 0 09:48 ? 00:00:00 /sbin/rpcbind -w
root 6014 1 0 09:48 ? 00:00:00 /usr/sbin/rpc.mountd
root 6023 1 0 09:48 ? 00:00:00 /usr/sbin/rpc.idmapd
root 6028 2 0 09:48 ? 00:00:00 [nfsd4]
root 6029 2 0 09:48 ? 00:00:00 [nfsd4_callbacks]
root 6033 2 0 09:48 ? 00:00:00 [nfsd]
root 6034 2 0 09:48 ? 00:00:00 [nfsd]
root 6035 2 0 09:48 ? 00:00:00 [nfsd]
root 6036 2 0 09:48 ? 00:00:00 [nfsd]
root 6037 2 0 09:48 ? 00:00:00 [nfsd]
root 6038 2 0 09:48 ? 00:00:00 [nfsd]
root 6039 2 0 09:48 ? 00:00:00 [nfsd]
root 6040 2 0 09:48 ? 00:00:00 [nfsd]
root 6161 5747 0 09:54 pts/0 00:00:00 grep -E --color=auto rpc|nfs
nfs的端口映射
[root@server0 桌面]# rpcinfo -p localhost
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 53698 status
100024 1 tcp 50475 status
100005 1 udp 20048 mountd
100005 1 tcp 20048 mountd
100005 2 udp 20048 mountd
100005 2 tcp 20048 mountd
100005 3 udp 20048 mountd
100005 3 tcp 20048 mountd
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 3 tcp 2049 nfs_acl
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 3 udp 2049 nfs_acl
100021 1 udp 45742 nlockmgr
100021 3 udp 45742 nlockmgr
100021 4 udp 45742 nlockmgr
100021 1 tcp 37199 nlockmgr
100021 3 tcp 37199 nlockmgr
100021 4 tcp 37199 nlockmgr