目录
1. 环境
2. NFS介绍
3. 下载安装服务端
4. 客户端安装
5. 测试
6. Window上挂载NFS
1. 环境
CentOS7.6
以2台机器为例,服务端:172.20.32.219 客户端:172.20.32.218
2. NFS介绍
NFS(Network File System):它最大的功能就是可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。
NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中来看,那个远程主机的目录就好像是自己的一个磁盘分区一样,在使用上相当便利;
NFS一般用来存储共享视频,图片等静态数据。
RPC(Remote Procedure Call)——远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。NFS 服务器在启动的时候就得要向 RPC 注册,所以 NFS 服务器也是一种 RPC server。.
3. 下载安装服务端
1) 安装NFS和rpc,服务端和客户端必须软件nfs-utils
# yum -y install nfs-utils
2) 启动服务端的nfs和rpcbind服务,并设置开机启动
注意:先启动rpc服务,再启动nfs服务。
# systemctl start rpcbind #先启动rpc服务
# systemctl enable rpcbind #设置开机启动
# systemctl start nfs
# systemctl enable nfs
# systemctl status nfs
3) 服务端创建共享目录,编辑配置文件
# mkdir /public //首先创建共享目录
# vim /etc/exports 修改服务端配置文件/etc/exports
如果有网段限制增加如下一行: /public 172.20.32.0/24(rw,no_root_squash,insecure,sync)
任意IP访问增加如下一行: /public *(rw,no_root_squash,insecure,sync)
参数值 | 内容说明 |
rw ro | 该目录分享的权限是rw可擦写 (read-write) 或ro只读 (read-only),但最终能不能读写,还是与文件系统的 rwx及身份有关 |
sync async | sync 代表数据会同步写入到内存与硬盘中,async 则代表数据会先暂存于内存当中,而非直接写入硬盘 |
no_root_squash root_squash | 客户端使用 NFS 文件系统的账号若为 root 时,客户端 root 的身份会由 root_squash 的设定压缩成 nfsnobody,如此对服务器的系统会较有保障。但如果你想要开放客户端使用 root 身份来操作服务器的文件系统,那么这里就得要开 no_root_squash 才行 |
all_squash | 不论登入 NFS 的使用者身份为何, 他的身份都会被压缩成为匿名用户,通常也就是 nobody(nfsnobody) |
anonuid anongid | anon 意指 anonymous (匿名者) 前面关于 *_squash 提到的匿名用户的 UID 设定值,通常为 nobody(nfsnobody),但是你可以自行设定这个 UID 的值!当然,这个 UID 必需要存在于你的 /etc/passwd 当中!anonuid 指的是 UID 而 anongid 则是群组的 GID |
注意 :如果在启动了NFS之后又修改了/etc/exports,可以用exportfs 命令来使改动立刻生效,该命令格式如下:
# exportfs -rv //重新共享所有目录并输出详细信息
# exportfs -au //卸载所有共享目录
-a 全部挂载或卸载 /etc/exports中的内容
-r 重新读取/etc/exports 中的信息 ,并同步更新/etc/exports、/var/lib/nfs/xtab
-u 卸载单一目录(和-a一起使用为卸载所有/etc/exports文件中的目录)
-v 在export的时候,将详细的信息输出到屏幕上。
4) 依次重启服务端rpcbind、nfs服务
重启
# systemctl restart rpcbind
# systemctl restart nfs
查看状态
# systemctl status rpcbind
# systemctl status nfs
5) 配置服务端防火墙
# firewall-cmd --add-service=nfs --permanent
# firewall-cmd --reload
6) 补充命令
# nfsstat 查看NFS的运行状态
# rpcinfo 查看rpc执行信息,可以用于检测rpc运行情况的工具,利用rpcinfo -p 可查看出RPC开启的端口所提供的程序
# showmount
-a 显示已经于客户端连接上的目录信息
-e IP或者hostname 显示此IP地址分享出来的目录
4. 客户端安装
启动客户端nfs服务(客户端可以不启动rpcbind服务),挂载服务端nfs目录
# yum install -y nfs-utils //安装nfs服务
# systemctl start nfs
# mount -t nfs 172.20.32.219:/public /mnt //挂载服务端public目录
解释: -t nfs 指定要挂载的设备上的文件系统类型
/mnt 挂载到本地目录
如果客户端需要卸载共享目录,可使用
# umount /mnt
5. 测试
客户端查看一下挂载情况
# df -Th
注意:在服务端及客户端分别写入数据,发现只能在服务端对/public目录进行读写,而在客户端只能读取。因为都是使用root账户进行操作的,在客户端看到的root是指服务端的root而并非客户端的root。在服务端将/nfs目录的权限设置为7(chmod 777 -R 文件夹的绝对路径),但这并不严谨,不是我们想要达到的目标。
# touch 1.txt //客户端创建文件写入内容
# echo "NFS Client wirte">/mnt/1.txt
这时, 我们就可以通过客户端操作NFS服务端的共享目录。
6. Window上挂载NFS
1) 在win7控制面板下开启nfs功能
2) 挂载NFS服务端共享目录: mount \\172.20.32.219\public x:
如果挂载发生网络错误-53的解决方法:
由于NFS服务器有一个”在非安全模式工作(允许更高的端口号)“的选项。Windows NFS客户端经常使用的是大的端口号。需要在NFS服务端添加insecure选项,如: /public *(rw,no_root_squash,insecure,sync)
3) 查看
如果需要卸载共享目录: umount x: