一、基础知识
NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
NFS共享概述
• Network File System,网络文件系统
– 用途:为客户机提供共享使用的文件夹
– 协议:NFS(TCP/UDP 2049)、RPC(TCP/UDP 111)
• 所需软件包:nfs-utils
• 系统服务:nfs-server
二、环境准备
两台虚拟机,server,desktop
server ip:172.25.0.11
desktop ip:172.25.0.10
三、服务器配置
1.修改防火墙
①防火墙区域修改为trusted
[root@server0 ~]# firewall-cmd --set-defualt-zone=trusted
②将访问点的ip添加到trusted区域
[root@server0 ~]#firewall-cmd --zone=trusted --add-source=172.25.0.10
2.安装nfs-utils软件包
[root@server0 ~]# yum -y install nfs-utils
3.创建共享访问点
[root@server0 ~]# mkdir /shared
[root@server0 ~]# echo 123 > /shared/1.txt
[root@server0 ~]# ls /shared/
4.配置共享访问点
IP地址:192.168.4.0
网段地址:172.0.0.0/24或172.0.0.*
所有主机:*
允许某个域:*.com
[root@server0 ~]# vim /etc/exports
格式: 文件夹路径 客户机地址 (权限) .. ..
/shared *(rw,sync) # 主机地址为* 代表所有主机 , 权限为读写,异步操作
或
/shared 172.0.0.*(rw,sync)
5.重启服务(重启程序)
[root@server0 ~]# systemctl restart nfs-server
四、客户端配置
1.安装 nfs-utils
[root@server0 ~]# yum -y install nfs-utils
2.挂载共享目录
[root@server0 ~]# mkdir /mnt/shared #创建挂载点
[root@server0 ~]# showmount -e 172.25.0.11 #查看服务端共享内容
Export list for 172.25.0.11:
/shared *
[root@server0 ~]# mount 172.25.0.11:/shared /mnt/shared/ #挂载
[root@server0 ~]# df -h #查看disk file
[root@server0 ~]# ls /mnt/shared #查看文件内容
1.txt
3.开机自动挂载
_netdev:声明网络设备
指明挂载本设备需要有网络参数再进行挂载
[root@desktop0 ~]# vim /etc/fstab
172.25.0.11:/shared /mnt/a nfs defaults,_netdev 0 0
四、NFS配置权限设置常用参数说明
参数名称 | 参数用途 |
---|---|
rw | 读写权限 |
ro | 只读权限 |
sync | 请求或写入数据时,数据同步写入到NFS Server的硬盘后才返回。优点:数据安全不会丢;缺点:性能比不启动该参数要差 |
async | 写入时数据会先写入到内存缓冲区,直到硬盘有空档才会再写入磁盘,这样可以提升写入效率!风险为若服务器宕机或不正常关机,不会缓冲未写入磁盘的数据(解决办法:服务器主板电池或UPS不间断电源) |
no_root_squash | 访问NFS Server共享目录的用户如果是root的话,它对该共享目录具有root权限。这个配置原本是为无盘客户端准备的。用户应避免使用。 |
root_squash | 如果访问NFS Server共享目录的用户时root,则它的权限将被压缩成匿名用户,同时它的UID和GID通常会变成nfsnobody账号身份。 |
all_squash | 不管访问NFS Server共享目录的用户身份如何,它的权限都将被压缩成匿名用户,同时它的UID和GID都会变成nfsnobody帐号身份。在早期多个NFS 客户端同时读写NFS Server数据时,这个参数很有用。 在生产中配置NFS 的重要技巧: l)确保所有客户端服务器对NFS共享目录具备相同的用户访问权限 a.all_squash 把所有客户端都压缩成固定的匿名用户(UID相同) b.就是anonuid,anongid 指定的UID和GID的用户。 2)所有的客户端和服务端都需要有一个相同的UID和GID的用户,即nfsnobody(UID必须相同)。 |
anonuid | 参数以anon*开头即指anonymous匿名用户,这个用户的UID设置值通常为nfsnobody的UID值,当然也可以自行设置这个UID值。但是,UID必须存在于/etc/passwd 中。在多NFS Clients时,如多台Web Server共享一个NFS目录,通过这个参数可以使得不同的NFS Clients写入的数据对所有NFS Clients保持同样的用户权限,即为配置的匿名UID对应用户权限,这个参数很有用,一般默认即可。 |
anongid | 同anonuid,区别就是把uid(用户id)换成gid(组id)。 |
带底纹标记的表示为常用参数,更多可以参考man exports |