NFS网络文件系统

本文详细介绍了如何在RHEL8和Debian系统上安装和配置NFS服务端,包括设置防火墙策略、端口管理和权限控制。讲解了NFS的常用端口、配置参数以及服务端配置文件/etc/exports的使用。此外,还阐述了客户端如何挂载NFS、检查服务器连接及持久挂载的方法,并提供了NFS性能优化和常见问题的解决方案。最后,提到了NFS的备份方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安装NFS服务端

系统版本声明: RHEL8

参考链接: 博哥爱运维

NFS缺点: 自身不支持高可用,单节点部署生产环境风险高.

RHEL安装NFS服务端

# rhel安装NFS服务端
yum -y install nfs-utils rpcbind 

# 按需安装autofs
yum install -y autofs

# 启动并开机自启nfs-server和rpcbind服务
## rhel8依赖的服务
systemctl enable --now nfs-server rpcbind nfs-utils 


## Centos7依赖的服务
systemctl enable --now rpcbind nfs
systemctl enable --now  autofs

Debian安装NFS服务端

# Debian系列安装NFS服务器端
apt install nfs-kernel-server -y

配置防火墙放行策略

  • portmapper 端口:111 udp/tcp
  • nfs/nfs_acl 端口:2049 udp/tcp
  • 4001——4004

服务端权限详解

NFS服务端/etc/exports中,配置参数如下:

参数解释
ro只读方式共享(默认策略)
rw读写方式共享
root_squash客户机用root用户访问该共享文件夹时,将root用户映射成匿名用户
no_root_squash客户端使用root用户连接NFS时,依然映射为root用户(相当于在服务器上用root身份访问该目录)
all_squash客户机上的所有用户访问该共享目录时都映射成匿名用户(nfsnobody)
no_all_squash客户机上的所有用户访问共享文件的均保留原UID原GID(默认策略)
anonuid将客户机上的用户映射成NFS服务器上指定的用户UID(UID=xxx)
anongid将客户机上的用户GID映射成NFS服务器上指定的用户GID(GID=xxx)
sync数据实时落盘,同步写入到内存与硬盘中,效率低,但可以保证数据一致性
async资料会先暂存于内存中,数据延迟落盘,async相比sync性能高
subtree_check如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)
写操作之前,检查客户端访问的目录是否是共享目录的子目录。
no_subtree_check写操作之前,不检查客户端访问的目录是否是共享目录的子目录。
wdelay指定等待写入数据的时间,检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置)
no_wdelay如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。若有写操作则立即写入sync配合使用
hide隐藏共享目录中的指定文件或目录;
在NFS共享目录中不共享其子目录
no_hide不隐藏共享目录中的指定文件或目录(默认设置)
secure允许NFS客户端通过安全TCP端口2049(默认)连接NFS服务器;
如需使用其他端口或协议,可以通过修改 /etc/nfs.conf 配置文件来指定。
insecure允许NFS客户端通过不安全UDP端口2049(默认)连接NFS服务器;
如需使用其他端口或协议,可以通过修改 /etc/nfs.conf 配置文件来指定。

在这里插入图片描述


NFS使用的端口

参考: https://blog.51cto.com/u_15127582/3383593

# 查看NFS启动后的端口
rpcinfo -p localhost

## 验证服务是否正在运行
rpcinfo -p $nfs_server

NFS 使用是:2049
RPC 端口:111
RPC client :随机端口

  • 1)portmapper(RPC) 端口:111 udp/tcp
  • 2)nfs/nfs_acl 端口:2049 udp/tcp
  • 3)mountd 端口:32768--65535 udp/tcp
  • 4)nlockmgr 端口:32768--65535 udp/tcp
    系统RPC服务nfs服务启动时默认会给 mountdnlockmgr 动态选取一个随机端口来进行通讯。

设置NFS固定端口

vim /etc/sysconfig/nfs 在最后添加

# RPC配额守护程序的TCP端口号
RQUOTAD_PORT=4001

# NFS文件锁定程序的TCP和UDP端口号
LOCKD_TCPPORT=4002
LOCKD_UDPPORT=4002

# NFS挂载守护程序的端口号
MOUNTD_PORT=4003

# NFS状态守护程序的端口号
STATD_PORT=4004

重启rpcbindnfs服务

# 重启rpcbind和nfs服务
systemctl restart rpcbind nfs

服务端配置(生产环境示例)

NFS服务端配置文件为 /etc/exports (默认是空文件),此处要注意三台服务器开放的ip限制有区别,除了exports文件外,其他配置完全一样.

async延迟落盘,sync实时落盘,async相比sync性能要高一些.
在这里插入图片描述

例如: NFSserver/nfsshare目录共享给192.168.186.0 网段

# 创建/nfsshare目录
mkdir /nfsshare

# 设置目录属主和属组为nobody
chown nobody.nobody /nfsshare

# 设置nfsshare目录其他人拥有写权限,否则客户端不可写
chmod o+w /nfsshare

# 修改服务端配置文件
vim /etc/exports

配置内容如下:

# 在/etc/exportfs中增加以下一行内容
## 注意:网段和(权限)中间没有空格
## insecure允许客户端使用非特权端口(大于1024)
## async相比sync性能要高一些
## no_root_squash避免root越权
# /nfsshare *(insecure,rw,async,no_root_squash)
# /nfsshare 192.168.32.0/24(rw,async,no_root_squash)

## 快捷编辑
echo '/nfsshare 192.168.32.0/24(rw,async,no_root_squash)' > /etc/exports

共享目录共享给哪些客户端权限
/nfsshare192.168.32.0/24(rw,async,no_root_squash)
/nfsshare*(insecure,rw,async,no_root_squash)

使服务端配置生效

每次修改/etc/exports文件时,都需要运行下面的命令使配置生效。如果有任何错误或警告,它们将显示在终端上。

exportfs命令用来管理当前NFS共享的文件系统列表.
常用参数:

参数解释
-a打开或取消所有目录共享。
-o options,...指定一列共享选项,与 exports(5) 中讲到的类似。
-i忽略 /etc/exports 文件,从而只使用默认的和命令行指定的选项。
-r重新共享所有目录。它使 /var/lib/nfs/xtab/etc/exports 同步。它将 /etc/exports 中已删除的条目从 /var/lib/nfs/xtab 中删除,将内核共享表中任何不再有效的条目移除。
-u取消一个或多个目录的共享。
-f在“新”模式下,刷新内核共享表之外的任何东西。任何活动的客户程序将在它们的下次请求中得到 mountd 添加的新的共享条目。
-v输出详细信息。当共享或者取消共享时,显示在做什么。显示当前共享列表的时候,同时显示共享的选项。
# -ar使共享配置生效(可以不重启nfs-server服务)
## -v查看当前的活动出口及其状态
exportfs -arv

在这里插入图片描述


使用exportfs命令查看已共享的资源

# 在服务器查看已共享的资源
exportfs

在这里插入图片描述

# 刷新显示已共享的资源
exportfs -rv

在这里插入图片描述


客户端挂载nfs

# 安装nfs客户端
## rhel系列安装nfs客户端
yum install -y nfs-utils

## Debian系列安装nfs客户端
apt update && apt install -y nfs-common

检查和测试nfs服务器是否可以连通

# 验证NFS是否可被export和挂载
## -e:显示NFS服务器上所有的共享目录。
showmount -e $nfs_server_ip

在这里插入图片描述

## -d:仅显示已被NFS客户端加载的目录
showmount -d 192.168.32.131

在这里插入图片描述


挂载NFS

# 客户端临时挂载NFS
mount -t nfs 192.168.32.131:/nfsshare /mnt/nfs

# 查看是否挂载
df -Th

在这里插入图片描述


持久挂载

https://blog.youkuaiyun.com/omaidb/article/details/120091688

# 将nfs挂载写入/etc/fstab中持久挂载,需要加_netdev,防止客户端在网络就绪之前开始挂载文件系统
## _netdev 声明网络存储,网络就绪后才会执行挂载
192.168.32.131:/nfsshare /mnt/nfs defaults,_netdev	0 0

# 或者
<本地挂载点> -rw,sync <远程nfs服务器>:/路径

NFS挂载示例

# 将远程NFS共享目录挂载到本地文件系统,这里将远程NFS共享目录的根目录挂载到本地文件系统的/hdfs_2目录下

# -t nfs:指定文件系统类型为NFS
# -o:指定挂载选项,包括:
##     vers=3:指定NFS版本为3
##     proto=tcp:指定NFS使用TCP协议进行通信
##     nolock:禁用NFS文件锁定机制
##     noacl:禁用ACL(访问控制列表)
##     sync:强制NFS挂载同步,确保数据的一致性
# 10.0.1.31:/:远程NFS服务器IP地址和共享目录路径
# 10.1.1.36:/hdfs_2:本地文件系统上的目标路径

mount -t nfs -o vers=3,proto=tcp,nolock,noacl,sync 10.0.1.31:/ 10.1.1.36:/hdfs_2

挂载时debug

## -v 显示挂载过程
mount -v 

在这里插入图片描述


NFS常用测试命令


验证NFS服务是否正在运行

# 验证NFS服务是否正在运行
rpcinfo -p $nfs_server

在这里插入图片描述


验证NFS空间是否可被export和挂载

# 验证NFS空间是否可被export和挂载
## -d:仅显示已被NFS客户端加载的目录;
## -e:显示NFS服务器上所有的共享目录。
showmount -e $nfs_server_ip

在这里插入图片描述


在服务器查看已共享的资源

# 使NFS配置热生效
## -ar使共享配置生效(可以不重启nfs-server服务)
## -v查看当前的活动出口及其状态
exportfs -arv
# 在服务器查看已共享的资源
exportfs

在这里插入图片描述

# 刷新显示已共享的资源
exportfs -rv

在这里插入图片描述


nfsstat列出NFS统计信息

https://www.linuxcool.com/nfsstat

常用参数:

参数解释
-s仅列出NFS服务器端状态
-c仅列出NFS客户端状态
-n仅列出NFS状态,默认显示nfs客户端和服务器的状态
-m打印以加载的nfs文件系统状态
-r仅打印rpc状态

参考实例 :

# 查看nfs版本
nfsstat -m <nfs服务器>

在这里插入图片描述

# 要显示关于客户机发送和拒绝的RPC和NFS调用数目的信息
nfsstat -c

# 要显示和打印与客户机NFS调用相关的信息
nfsstat -cn

# 要显示和打印客户机和服务器的与RPC调用相关的信息: 
nfsstat -r

# 要显示关于服务器接收和拒绝的RPC和NFS调用数目的信息:
nfsstat –s

NFS常见问题


Linux操作系统上NFS客户端运行性能差?

参考: https://help.aliyun.com/document_detail/65228.html


问题描述:

Linux操作系统中出现NFS客户端读写速度只有几MB/s。


问题原因:

在Linux操作系统中,NFS客户端对于同时发起的NFS请求数量进行了控制,默认编译的内核中此参数值为2,严重影响性能。


解决方案:

https://help.aliyun.com/document_detail/184789.htm?spm=a2c4g.11186623.0.0.5b618325eOZdpO#section-o97-87k-mdw

修改同时发起的NFS请求数量,提高NFS性能。
NFS客户端对同时发起的NFS请求数量进行了控制,默认编译的内核中此参数值为2,严重影响性能,建议您将该参数值修改为128

echo "options sunrpc tcp_slot_table_entries=128" >> /etc/modprobe.d/sunrpc.conf

echo "options sunrpc tcp_max_slot_table_entries=128" >>  /etc/modprobe.d/sunrpc.conf

sysctl -w sunrpc.tcp_slot_table_entries=128

## 可选
reboot

执行以下命令查看修改结果。
如果返回值为128,则说明修改成功。

# 查看NFS客户端对同时发起的NFS请求数量
cat /proc/sys/sunrpc/tcp_slot_table_entries

NFS备份方案

可以使用sersync方案来实时备份数据
https://blog.youkuaiyun.com/omaidb/article/details/133091969

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

教Linux的李老师

赞赏是第一生产力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值