NFS离线部署

NFS 服务端 + 客户端离线部署

内网环境,几台机器都不通外网,rpm 包提前在外面下好拷进来的。NAS 那台和客户端都是 RHEL 7.9,用的包版本和 CentOS 7.9.2009 base 源一致,两边通用。

涉及机器:

  • NAS 服务端:10.2.200.117
  • 客户端:10.2.200.113

0. 离线包

服务端和客户端装的是同一份包,拷到每台机器的 /root/nfs_rpm 下:

复制代码
nfs-utils-1.3.0-0.68.el7.x86_64.rpm
rpcbind-0.2.0-49.el7.x86_64.rpm
libtirpc-0.2.4-0.16.el7.x86_64.rpm
libnfsidmap-0.25-19.el7.x86_64.rpm
keyutils-1.5.8-3.el7.x86_64.rpm
keyutils-libs-1.5.8-3.el7.x86_64.rpm
nfs4-acl-tools-0.3.3-21.el7.x86_64.rpm

包来源:CentOS 7.9.2009 base 源(阿里云镜像),和 RHEL 7.9 兼容。nfs4-acl-tools 是客户端查 NFSv4 ACL 用的,服务端可以不装。

装包用 yum localinstall,让它自己处理包与包之间的依赖:

复制代码
yum localinstall -y /root/nfs_rpm/*.rpm

哪台机器连 yum 都没有、或者 localinstall 报源有问题,退一步用 rpm:

复制代码
rpm -Uvh /root/nfs_rpm/*.rpm  --nodeps --force

注意:nfs-utils 还依赖 glibc、libcap、libuuid、krb5-libs 这些基础库,正常 RHEL 7.9 最小化安装都自带;万一报缺,从机器已有的 base 源里补。

1. 服务端(NAS,10.2.200.117)

1.1 建共享目录

先想好要共享哪个目录,比如新建一个:

复制代码
mkdir -p /data/nas

1.2 配置 exports

编辑 /etc/exports,加一行:

复制代码
/data/nas 10.2.200.0/24(rw,sync,no_root_squash)

字段意思:

  • 10.2.200.0/24:允许挂载的网段,只给单台就写 10.2.200.113/32
  • rw:读写;sync:数据落盘;no_root_squash:客户端的 root 保持 root 权限(内网自己人无所谓,对外别开这个)

改完加载:

复制代码
exportfs -rv

1.3 固定 NFS 相关端口

NFSv3 的 mountd、statd 默认用随机高位端口,防火墙没法放。编辑 /etc/sysconfig/nfs,把下面几行前面的 # 去掉:

复制代码
MOUNTD_PORT=892
STATD_PORT=662
RQUOTAD_PORT=875

RQUOTAD_PORT 没有就算了,那是配额服务用的,不是每台机器都有,挂载也用不上。关键的只有 MOUNTD_PORT。

1.4 启动服务

复制代码
systemctl enable --now rpcbind nfs-server nfs-lock nfs-idmap

如果是在 1.3 之后改过 /etc/sysconfig/nfs,要先重启 rpcbind 再重启 nfs-server,否则注册的还是旧端口:

复制代码
systemctl restart rpcbind
systemctl restart nfs-server

1.5 防火墙

确认 firewalld 在跑,然后放行:

复制代码
systemctl status firewalld
firewall-cmd --permanent --add-service=rpc-bind
firewall-cmd --permanent --add-service=nfs
firewall-cmd --permanent --add-service=mountd
firewall-cmd --permanent --add-service=statd
firewall-cmd --reload

这几个服务名对应的端口:rpc-bind=111,nfs=2049,mountd=892,statd=662。没装 firewalld、用 iptables 的机器,手动开对应端口:

复制代码
iptables -I INPUT -p tcp --dport 111 -j ACCEPT
iptables -I INPUT -p udp --dport 111 -j ACCEPT
iptables -I INPUT -p tcp --dport 2049 -j ACCEPT
iptables -I INPUT -p tcp --dport 892 -j ACCEPT
iptables -I INPUT -p udp --dport 892 -j ACCEPT
service iptables save

1.6 SELinux

RHEL7 默认 SELinux 是 Enforcing,导出非标准目录会被拦。先看状态:

复制代码
getenforce

是 Enforcing 的话,放行导出:

复制代码
setsebool -P nfs_export_all_rw 1

1.7 服务端自检

复制代码
showmount -e localhost
rpcinfo -p localhost

showmount 能列出 /data/nas 就说明服务端好了。

2. 客户端(10.2.200.113)

2.1 装包

和上面一样:

复制代码
yum localinstall -y /root/nfs_rpm/*.rpm

2.2 启动客户端服务

复制代码
systemctl enable --now rpcbind
systemctl enable --now nfs-client.target

2.3 测试连通

先看 111 通不通,再列共享:

复制代码
rpcinfo -p 10.2.200.117
showmount -e 10.2.200.117
  • rpcinfo 通、showmount 报错:一般是 mountd 端口没放行(892),回服务端 1.5 步查
  • 都连不上:先 ping,再查防火墙是不是只开了 tcp 没开 udp

2.4 挂载

挂载点路径不是固定的,就是个空目录,建哪都行,习惯放 /mnt 下:

复制代码
mkdir -p /mnt/nas
mount -t nfs 10.2.200.117:/data/nas /mnt/nas

验证:

复制代码
df -h | grep nas
ls /mnt/nas

需要加挂载参数(超时、NFSv4 等)时:

复制代码
mount -t nfs -o rw,hard,timeo=600,retrans=2,noatime 10.2.200.117:/data/nas /mnt/nas
mount -t nfs4 10.2.200.117:/data/nas /mnt/nas

2.5 开机自动挂载

写进 /etc/fstab,挂载点要和上面实际建的一致:

复制代码
10.2.200.117:/data/nas  /mnt/nas  nfs  defaults,_netdev,nofail  0 0

_netdev 等网络起来再挂,nofail 挂不上也不影响开机。加完验证一下配置:

复制代码
mount -a

3. 卸载

复制代码
umount /mnt/nas

4. 排障记录

  • showmount 报 no route to host / Port mapper failure:先 ping。通的话查 NAS 防火墙 111 有没有放 tcp+udp 两个;不通的话查 IP 和网段
  • rpcinfo 通,showmount 空或报错:mountd 端口被挡。要么固定 MOUNTD_PORT=892 后放行 892,要么看 rpcinfo -p 里 mountd 当前端口直接放那个
  • 挂载卡住不动:2049 没放行,或两端版本协商有问题,用 dmesg 看报错
  • Permission denied:exports 里没允许这台客户端的 IP,或者共享路径写错
  • SELinux 拦截:setsebool -P nfs_export_all_rw 1 后重试
相关推荐
苏生Susheng2 小时前
【软件实施】Linux企业运维常用命令手册
java·linux·运维·服务器·springboot·springcloud·软件实施
想要成为老金高手2 小时前
Kubernetes 调度器详解:从 nodeName 到污点容忍
java·容器·kubernetes
吴长建先生重名了2 小时前
ElasticSearch 检索系统性能优化实战:基准测试
java
西索斯coding2 小时前
doubao-seed-2.1-turbo 调用一直 401 怎么办?pro 版同样的 Key 却正常——5 分钟排查定位指南
java·服务器·数据库·ai
旧梦95272 小时前
Java SortedMap 接口详解:从入门到实战
java·开发语言
莫陌尛.2 小时前
Java_this构造方法
java·开发语言
2601_962297253 小时前
C# vs Java vs Python:YOLO工业部署性能对比实战
java·python·c·工业视觉·性能对比
计算机毕设定制辅导-无忧学长3 小时前
《基于SpringBoot的马术俱乐部管理系统》
java·spring boot·后端
Dreams°1233 小时前
【Java后端+Vue前后端分离:内网正常、公网访问异常|5个高频经典踩坑完整复盘】
java·开发语言·vue.js
学长毕业设计3 小时前
基于SpringBoot的民间艺术传承管理系统(源码+文档+讲解视频)
java·spring boot·后端