NFS和autofs
前言
在NFS文件系统的使用过程中,客户端要使用服务端所提供的文件系统,可以在/etc/rc.d/rc.local中设置开机时自动挂载(在/etc/rc.d/rc.local文件中写入的命令,每次系统在操作系统启动时就会执行一次),也可以在登录系统后手动利用mount来挂载
一、NFS
1. 简介
NFS(Network File
System)网络文件系统,最早由Sun公司发展出来的,也是FreeBSD支持的文件系统中的一个,它允许网络中的计算机之间通过TCP/IP网络共享资源。NFS可以通过网络让不同的主机、不同的操作系统可以共享存储。
NFS的优点:
- 节省本地存储空间
- 用户不需要再网络中的每个机器上都创建一个家目录,家目录可以放在NFS服务器上,通过网络访问家目录
- 一些存储设备CDROM和Zip(一种高储存密度的磁盘驱动器与磁盘)等都可以在网络上被别的机器使用。这可以减少整个网络上可移动介质设备的数量。
2. 原理
NFS本身的服务并没有提供数据传递的协议,而是通过使用RPC(远程过程调用 Remote Procedure Call)来实现。当NFS启动后,会随机的使用一些端口,NFS就会向RPC去注册这些端口。RPC就会记录下这些端口,RPC会开启111端口。通过client端和sever端端口的连接来进行数据的传输。在启动nfs之前,首先要确保rpc服务启动。
1. 本地用户要访问nfs服务器中文件,先向内核发起请求,内核处理调用nfs模块及rpc client
2. rpc client向rpc server发起连接
3. 在连接之前,NFS服务除了启动nfsd本身监听的端口2049/tcp和2049/udp,还会启动其它进程(如mountd,statd,rquotad等)以完成文件共享,这些进程的端口是不固定的;是每次NFS服务启动时向RPC服务注册的,RPC服务会随机分配未使用的端口
4. 完成连接,接受访问请求
5. nfs应用程序向内核发起请求
6. 内核调用文件系统
7. client端通过获取的NFS端口来建立和server端的NFS连接并进行数据的传输。
nfs启动各服务的作用:
rpc:远程过程调用协议,是实现本地调用远程主机实现系统调用的协议。
portmapper:负责分配rpc server的端口,并在client端请求时,负责响应目的rpc server端口返回给client端,工作在tcp与udp的111端口上。
mountd:是nfs服务的认证服务的守护进程,client在收到返回的真正端口时,就会去连接mountd,认证取得令牌。
nfsd:nfs的守护进程,负责接收到用户的调用请求后与内核发出请求并得到调用结果响应给用户,工作在tcp和udp的2049端口。
idmapd:是NFS的一个程序,用来负责远程client端创建文件后的权限问题。
==quotad==:用用于实现磁盘配额,当client端挂载nfs后可以限制磁盘空间的大小。
3. 配置
软件包名:nfs-utils
服务名:nfs-server
主要配置文件:/etc/exports
服务端配置
-
创建共享目录
mkdir /share -
编辑配置文件 /etc/exports
格式为: 共享目录 允许访问的主机(访问权限)
例:/share 192.168.1.0/24(rw) 172.16.1.0/24(rw)
不同主机之间用空格分隔
访问权限
ro:只读 rw:读写 sync:同步,数据同步写到内存与硬盘中 async:异步,数据先暂存内存 root_squash:将root用户映射为来宾账号 no_root_squash:远程主机用root访问,远程root用户映射为本地root用户 all_squash:共享文件的UID和GID映射匿名用户anonymous,适合公用目录,即全部映射为来宾账号 no_all_squash:远程主机普通用户访问,映射为本地同UID的用户 anonuid=xxx,anongid=xxx:指定映射的来宾账号的UID和GID secure:nfs通过1024以下的安全TCP/IP端口发送 insecure:nfs通过1024以上的端口发送 wdelay:如果多个用户要写入nfs目录,则归组写入(默认) no_wdelay:如果多个用户要写入nfs目录,则立即写入,当使用async时,无需此设置 hide:在nfs共享目录中不共享其子目录 no_hide:共享nfs目录的子目录 subtree_check:如果共享/usr/bin之类的子目录时,强制nfs检查父目录的权限(默认) no_subtree_check:不检查父目录权限
-
使配置文件生效
-
重启服务
systemctl restart nfs-server
-
使用exportfs命令:
exportfs -rv
exportfs命令
-r:重新导出,使配置文件生效 -u:取消导出 -v:显示详细信息,即生效的nfs共享 -a:跟-r或-u选项同时使用,表示重新挂载所有文件系统;
-
-
放通防火墙
firewall-cmd --permanent --add-service=nfs firewall-cmd --permanent --add-service=rpc-bind firewall-cmd --permanent --add-service=mountd firewall-cmd --reload
-
重启服务
systemctl restart nfs-server.service
-
配置实例
客户端配置
-
查看NFS服务器共享的文件系统
showmount -e servera
showmount命令
-e:查看NFS服务器开放("导出")的文件系统 -a:查看NFS服务器所有被挂载的文件系统及其挂载的客户端对应关系列表 -d:显示NFS服务器所有导出的文件系统被客户端挂载了的文件系统列表
-
挂载文件系统
临时挂载mount -t nfs servera:/share /mnt
永久挂载
echo '192.168.0.1:/share /mnt nfs defaults 0 0' >> /etc/fstab
客户端挂载时,可以指定挂载选项
echo '192.168.0.1:/share /mnt nfs defaults,(挂载选项) 0 0' >> /etc/fstab
挂载选项
suid/nosuid:文件系统是否支持suid功能 ro/rw:只读或者读写 dev/nodev:是否支持设备文件 exec/noexec:是否支持可执行文件执行 user/nouser:是否支持用户挂载系统 auto/noauto:是否支持自动挂载,即mount -a或者系统启动时自动挂载
-
配置实例
二、autofs
1. 简介
NFS存在的问题:
由于网络问题,NSF服务器与客户端的连接不会一直存在,当客户端挂载了NFS服务器之后,任何一方脱机都可能造成另一方等待超时。
autofs解决方案:
- 当客户端在有使用NFS文件系统的需求时才让系统自动挂载。
- 当NFS文件系统使用完毕后,让NFS自动卸载。超过5分钟空闲状态,则会自动解除挂载
自动挂载的优势:
1. 自动挂载的NFS共享可以供计算机上的所有用户使用
2. NFS共享不像/etc/fstab中的条目一样永久挂载,从而可以释放网络和系统资源。
3. 自动挂载是在客户端,不需要服务端配置
4. NFS是默认的文件系统的挂载,但也可以用来自动挂载其它的文件系统
5. autofs是一种服务,可以像其它系统服务一样管理
2. autofs配置
-
客户端安装软件包:
yum -y install autofs
-
启动autofs服务
systemctl enable --now autofs
-
编辑配置文件/etc/auto.master或者在/etc/auto.master.d/下创建一个以.autofs结尾的文件
echo '/share /etc/auto.nfs' >> /etc/auto.master.d/nfs.autofs
/share 为监听目录,此目录不需要事先存在,因为autofs会自动建立该目录
/etc/auto.nfs为规则目录,可自定义文件名称 -
建立映射文件
echo 'nfs -rw servera.example.com:/share' >> /etc/auto.nfs
nfs:本地挂载点,是监听目录的子目录
-rw:挂载参数
servera.example.com:/share:服务器所提供的目录 -
重启服务
systemctl restart autofs
监听目录会自动创建出来
-
触发挂载
cd /share/nfs
-
配置案例
-
应用场景
用户不需要再网络中的每个机器上都创建一个家目录,家目录可以放在NFS服务器上,通过网络访问家目录
本文来自博客园,作者:未来的你!,转载请注明原文链接:https://www.cnblogs.com/frost-descent/p/16651055.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?