Network File System 网络文件系统
NFS基本概念
NFS(Network File System)是一种分布式文件系统协议,用于在网络上共享文件系统。它允许远程计算机系统通过网络访问共享的文件和存储资源,就好像它们是本地文件一样。NFS通常用于在UNIX和类UNIX操作系统之间共享文件,允许用户在网络上共享和访问文件。
NFS工作方式
NFS的工作方式是,服务器端将文件系统挂载(Mount)到网络上,客户端系统可以通过NFS协议访问这些挂载的文件系统。客户端可以读取、写入和执行这些文件,就像它们是本地文件一样。NFS提供了透明的访问,用户可以像操作本地文件一样操作远程文件。
NFS工作流程
- 客户端请求挂载文件系统:客户端发起一个请求,要求将远程服务器上的特定文件系统挂载到本地系统上。通常,这是通过操作系统提供的mount命令或者在系统启动时自动挂载完成的。
- 服务器确认请求:服务器收到挂载请求后,会验证客户端的身份和权限。如果客户端被授权访问该文件系统,服务器会允许挂载操作。
- 建立连接:一旦服务器确认挂载请求,它会与客户端建立连接。通常,这个连接是通过TCP/IP网络建立的,因为NFS是基于网络的。
- 传输数据:一旦连接建立,客户端可以向服务器发送文件访问请求。这包括读取、写入和执行文件等操作。客户端向服务器发送NFS请求,服务器响应并传输所需的数据。
- 断开连接:当文件访问操作完成后,或者客户端不再需要文件系统时,可以断开与服务器的连接。这通常通过取消挂载操作来完成,即使用操作系统提供的umount命令。
CentOS 7.9使用NFS
在CentOS 7系统中,需要安装nfs-utils,rpcbind软件包来提供NFS共享服务
前者用于NFS共享发布和访问,后者用于RPC支持。
手动加载NFS共享服务时,应该先启动rpcbind,再启动NFS
NFS端口为2049,RPC端口:111
NFS配置选项
- /etc/exports:这是NFS服务器的主要配置文件,用于指定要共享的文件系统以及允许访问这些文件系统的客户端。每行配置通常包括共享的路径、允许访问的客户端、权限选项等。
/shared/path *(rw,sync)
- rw:允许客户端对共享的文件系统进行读写操作。
ro:仅允许客户端对共享的文件系统进行只读操作。 - sync:同步写入操作,即在数据写入到NFS服务器之前,要求客户端确认数据已经成功写入。这可以确保数据的完整性,但可能会影响性能。
async:异步写入操作,即在数据写入到NFS服务器之后,才向客户端发送确认消息。这会提高性能,但可能会影响数据的完整性。 - root_squash:将客户端以root用户身份访问共享的文件系统时,映射为匿名用户,通常是nobody用户。这有助于防止潜在的安全风险,因为root用户可能会访问到其他客户端不应该访问的文件。
no_root_squash:允许客户端以root用户身份访问共享的文件系统,不进行映射。 - all_squash:将所有客户端的UID和GID映射为匿名用户,通常是nobody用户。
anonuid和anongid:分别指定匿名用户的UID和GID,用于替代客户端的UID和GID。 - secure:只允许使用安全的NFS协议进行访问,如NFSv3或NFSv4。
insecure:允许使用不安全的NFS协议进行访问,如NFSv2。 - fsid:用于指定唯一标识共享的文件系统。通常用于NFSv4的配置中。
- fsid=0:用于指定根文件系统,通常在NFSv4中使用。
NFS常用命令
- mount:用于将远程NFS文件系统挂载到本地文件系统上。
mount -t nfs server:/remote/path /local/mount/point
# mount -t nfs 192.168.48.6:/opt /mnt
# 将NFS服务端192.168.48.6下的/opt挂载到/mnt下
- umount:用于卸载已挂载的NFS文件系统。
umount /local/mount/point
- showmount:用于显示NFS服务器上共享的文件系统。
showmount -e # 查看本机发布的NFS共享目录
showmount -e server
# showmount -e 192.168.48.6
# 查看192.168.48.6发布的NFS共享目录
- exportfs:用于管理NFS服务器上共享的文件系统。
exportfs -a # 导出所有共享
exportfs -r # 重读配置文件(重新导出已导出的共享)
exportfs -u /path # 取消对指定路径的共享
exportfs -v # 查看详细的NFS信息
- rpcinfo:用于显示NFS服务器上的RPC信息。
rpcinfo -p server
# rpcinfo -p localhost
# 查看rpc注册的端口信息
NFS服务端配置
- 检查并安装软件
rpm -q rpcbind nfs-utils
yum install -y rpcbind nfs-utils
- 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
- 查看防火墙状态
systemctl status firewalld
4. 创建共享目录
vim /etc/exports # NFS的配置文件,默认文件内容为空(无任何共享)
/opt *(rw,sync,no_root_squash)
# 设置/opt为共享目录,允许任意网段的IP地址主机访问
- 启动NFS服务
systemctl start rpcbind # 一定要先开启rpcbind服务
systemctl start nfs # 如服务已启动,更改完配置信息后需要重启服务
- 查看服务端的共享目录及网段
showmount -e
7. 查看服务端的NFS详细信息
exportfs -v
NFS客户端配置
- 检查并安装软件
rpm -q rpcbind nfs-utils
yum install -y rpcbind nfs-utils
- 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
- 检查防火墙状态
systemctl status firewalld
4. 启动NFS服务
systemctl start rpcbind
systemctl start nfs
- 将共享目录挂载到本地
showmount -e 192.168.64.130
mount -t nfs 192.168.64.130:/opt /mnt
df -h
服务测试
- 在NFS服务端创建文件test.txt,写入内容
vim /opt/test.txt
This is a test for NFS service!
cat /opt/test.txt
2. 在NFS客户端查看test.txt文件
ls /mnt
cat /mnt/test.txt
出现的报错
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
# 服务端的防火墙没有关闭,导致RPC端口无法正确启动
- 查看服务端的防火墙
systemctl status firewalld
- 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld