ARTICLE DETAIL

资讯详情

深耕网站SEO优化与搜索引擎排名提升的一线实战洞察。

别慌,NFS 还能救:挂载失败后我又重启了服务

别慌,NFS 还能救:挂载失败后我又重启了服务 NFS 网络文件系统完整实战教程说明本文档已适配 Typora 渲染所有命令以bash代码块呈现附带详细注释。全文保留原文全部代码并在此基础上丰富内容、优化排版。目录一、NFS 服务介绍1.1 NFS 的核心架构1.2 NFS 的工作原理1.3 NFS 的数据传输特点1.4 NFS 的优势1.5 NFS 的局限性1.6 NFS 的典型应用场景1.7 总结二、NFS 服务实战部署2.1 实验节点规划2.2 三台主机基础环境配置2.3 NFS 服务端安装部署2.4 配置 NFS 导出2.5 监视 NFS 导出2.6 客户端挂载共享目录2.7 持久化挂载开机自动挂载一、NFS 服务介绍在计算机网络存储领域NFSNetwork File System网络文件系统是经典的跨主机文件共享协议由 Sun Microsystems 于 1984 年提出。它可以让客户端像访问本地硬盘一样直接读写远程服务器的共享目录无需通过 FTP 等工具传输文件极大地简化了集群、办公服务器的数据统一管理。 提示NFS 适用于内网环境不适合公网直接暴露。如需跨公网共享建议搭配 VPN 或改用 SFTP/SSHFS。1.1 NFS 的核心架构NFS 采用标准的C/S客户端/服务端架构分为服务端和客户端两部分NFS 服务端存放原始文件资源运行nfs-server、rpcbind两大守护进程配置共享目录与访问权限接收客户端读写请求校验 IP / 权限后响应操作。NFS 客户端本地挂载远程共享目录挂载完成后可直接读写远程文件所有读写操作通过 RPC 远程调用发送至 NFS 服务端用户无感知远程存储。┌─────────────────┐ ┌─────────────────┐ │ NFS 服务端 │◀──── RPC ───────▶ │ NFS 客户端 │ │ │ (TCP/UDP) │ │ │ /shares/webapp │ │ /var/www/html │ │ nfs-server │ │ mount -t nfs │ │ rpcbind │ │ │ └─────────────────┘ └─────────────────┘1.2 NFS 的工作原理NFS 依赖RPCRemote Procedure Call远程过程调用协议完成通信完整工作流程如下步骤说明服务注册NFS、mountd 等服务启动时向rpcbind注册自身端口号地址查询客户端先连接服务端rpcbind查询 NFS 服务监听端口挂载请求客户端携带本机 IP 发送挂载申请服务端匹配/etc/exports权限规则权限校验IP、读写权限校验通过返回挂载成功标识文件操作客户端增删改查文件时通过 RPC 封装请求发送至服务端执行UID/GID 控制服务端对比客户端操作用户 ID限制文件读写、创建、删除权限 提示NFSv4 协议已内置 RPC 支持无需单独运行rpcbind但 CentOS 7 默认使用 NFSv3仍需rpcbind。1.3 NFS 的数据传输特点1.3.1 无状态NFSv3 及以下服务端不会保存客户端连接会话网络断开、服务重启后客户端可直接重连无需恢复会话容错简单。1.3.2 双传输协议支持协议特点适用场景UDP低延迟、开销小适合内网小型共享丢包无重传不稳定小文件、低延迟要求的内网共享TCP面向连接、丢包重传、数据可靠生产环境统一使用 TCP⚠️ 注意CentOS 7 默认同时支持 UDP 和 TCP但生产环境强烈建议仅启用 TCP。1.4 NFS 的优势优势说明访问透明操作远程文件和本地完全一致无需额外上传下载跨平台兼容Linux、Windows、macOS、嵌入式设备均可挂载性能优秀内核级文件传输读写速度远高于 FTP/SMB配置极简仅需修改/etc/exports一行配置即可开放共享运维成本低1.5 NFS 的局限性局限性说明应对方案原生安全性差早期 NFS 无加密、弱身份校验仅依靠 IP 限制公网使用需搭配防火墙 / VPN重度依赖网络高延迟、丢包场景会直接卡顿甚至读写失败确保内网千兆以上带宽多客户端文件锁多机器同时修改同一文件容易出现数据覆盖需业务层加锁UID/GID 同步客户端与服务端用户 ID 不一致会出现权限报错统一域控或手动对齐 UID/GID1.6 NFS 的典型应用场景企业办公内网统一存放文档、安装包多员工主机访问Web 集群共享静态资源所有业务服务器挂载同一静态目录文件只存一份数据库集群共享备份目录多台数据库服务器共享备份存储嵌入式设备、小型 NAS简易文件共享场景。1.7 总结NFS 凭借轻量化、高性能、易部署的特点是内网共享的首选存储方案。但在公网、高安全场景下建议搭配权限加固或替换为分布式存储方案如 Ceph、GlusterFS。二、NFS 服务实战部署2.1 实验节点规划系统统一使用CentOS 7三台克隆虚拟机节点名称IP 地址主机角色nfs-server10.1.8.20/24NFS 服务端提供共享目录/shares/webappnfs-client110.1.8.21/24Web 客户端 1挂载共享到/var/www/htmlnfs-client210.1.8.22/24Web 客户端 2挂载共享到/var/www/html 提示三台主机需确保网络互通建议在同一虚拟交换机下。2.2 三台主机基础环境配置2.2.1 nfs-server 服务端配置# 修改永久主机名重启后依然生效hostnamectl set-hostname nfs-server# 重新登录终端使主机名立即生效# 退出当前终端并重新 SSH 连接即可# 配置静态网卡 ens33固定 IP 防止共享挂载因 IP 变化而失效nmcli connection modify ens33 ipv4.method manual\ipv4.addresses10.1.8.20/24\ipv4.gateway10.1.8.2\ipv4.dns10.1.8.2\autoconnectyes# 重载网卡配置使静态 IP 立即生效nmcli connection up ens332.2.2 nfs-client1 客户端配置# 修改主机名hostnamectl set-hostname nfs-client1# 静态网络配置nmcli connection modify ens33 ipv4.method manual\ipv4.addresses10.1.8.21/24\ipv4.gateway10.1.8.2\ipv4.dns10.1.8.2\autoconnectyes# 启用网卡nmcli connection up ens332.2.3 nfs-client2 客户端配置# 修改主机名hostnamectl set-hostname nfs-client2# 静态 IP 配置nmcli connection modify ens33 ipv4.method manual\ipv4.addresses10.1.8.22/24\ipv4.gateway10.1.8.2\ipv4.dns10.1.8.2\autoconnectyes# 生效网络nmcli connection up ens332.3 NFS 服务端安装部署注释nfs-utils为 NFS 核心工具包rpcbind依赖会自动安装httpd用来生成apache业务运行用户用于网页目录权限匹配。# 安装 NFS 核心软件包自动包含 rpcbindyuminstall-ynfs-utils# 安装 Apache生成 apache 用户UID48用于网页目录权限匹配yuminstall-yhttpd# 创建 Web 业务共享根目录mkdir-p/shares/webapp# 查看 apache 用户 UID/GID确认共享目录归属idapache# 输出示例uid48(apache) gid48(apache)# 修改共享目录属主为 apache确保网页服务可正常读写chownapache /shares/webapp# 设置 nfs-server 开机自启并立即启动systemctlenablenfs-server--now# 防火墙放行 NFS 相关服务nfs、rpc-bind、mountd 为 NFS 必须端口服务firewall-cmd --add-servicenfs --add-servicerpc-bind --add-servicemountd# 永久保存防火墙规则重启不失效firewall-cmd --add-servicenfs --add-servicerpc-bind --add-servicemountd--permanent# 实验环境快速关闭防火墙生产环境禁止systemctl stop firewalld⚠️ 安全警告生产环境务必保持防火墙开启仅放行必要的 IP 和端口。2.4 配置 NFS 导出NFS 主配置文件/etc/exports扩展配置目录/etc/exports.d/*.exports后缀为.exports的配置文件同样生效适合多共享拆分管理。⚠️ 重要警告NFS 目录禁止同时作为 SMB 共享会产生文件锁冲突导致文件损坏2.4.1 /etc/exports 配置语法详解单行标准格式共享目录 客户端地址(权限参数)客户端支持匹配格式匹配格式示例完整域名/shares/webapp hyc-cloud.com泛域名通配/shares/webapp *.hyc.cloud单个 IPv4/shares/webapp 10.1.8.21网段 CIDR/shares/webapp 10.1.8.0/24IPv6 单地址 / 网段/shares/webapp fde2:6494:1e09:2::/64多客户端空格分隔/shares/webapp 10.1.8.0/24 *.hyc.com2.4.2 常用权限参数说明参数说明ro只读权限客户端只能读取不能修改默认rw读写权限允许增删改文件no_root_squash关闭 root 压制客户端 root 操作服务端仍为 root 权限慎用root_squash默认行为客户端 root 映射为nobody用户无写入权限sync同步写入数据落盘后返回成功数据安全默认async异步写入性能高但断电丢数据生产慎用2.4.3 实战配置 exports 文件# 编辑 NFS 共享配置文件vim/etc/exports# 配置内容共享 /shares/webapp10.1.8.0/24 网段全部客户端拥有读写权限/shares/webapp10.1.8.0/24(rw)2.4.4 重载生效导出配置修改exports后必须重载配置三种方式任选其一# 方式一重载所有共享配置增量更新推荐exportfs-r# 方式二重载 NFS 服务自动加载配置systemctl reload nfs-server# 方式三完整导出查看所有共享同步生效exportfs-av2.5 监视 NFS 导出# 简单查看已生效共享目录exportfs# 详细输出打印全部权限默认参数排错专用exportfs-v输出示例/shares/webapp 10.1.8.0/24(sync,wdelay,hide,no_subtree_check,secsys,rw,secure,no_root_squash,no_all_squash) 排错技巧exportfs -v输出的参数中secsys表示使用安全 ID 模式默认no_root_squash表示未开启 root 压制。2.6 客户端挂载共享目录2.6.1 nfs-client1 完整挂载流程# 临时关闭 SELinux避免挂载权限拦截生产环境建议配置 SELinux 策略而非关闭setenforce0# 客户端安装 NFS 工具包用于挂载、查看共享yuminstall-ynfs-utils# 安装 httpd统一 apache 用户 ID保证文件权限一致yuminstall-yhttpd# 开机启动 Apache 网页服务systemctlenablehttpd--now# 实验环境关闭防火墙systemctl stop firewalld# 查询 NFS 服务端开放的共享目录showmount-e10.1.8.20# 挂载远程共享到本地网页根目录# -t nfs 指定文件系统类型为 NFSmount-tnfs10.1.8.20:/shares/webapp /var/www/html# 查看挂载结果验证共享是否生效df-h|grepwww# 测试 root 用户创建文件默认 root_squash 模式下权限不足touch/var/www/html/root-f1# 输出touch: cannot touch /var/www/html/root-f1: Permission denied# 切换 apache 用户测试写入apache 有目录权限su-l-s/bin/bash apache# 写入测试页面echoapache website/var/www/html/web1.html2.6.2 权限参数 no_root_squash 测试修改服务端exports开启 root 不压制# 编辑共享配置增加 no_root_squash 参数vim/etc/exports# 修改为/shares/webapp10.1.8.0/24(rw,no_root_squash)# 重载共享配置exportfs-r# 查看更新后的权限参数exportfs-v客户端重新测试 root 创建文件# 现在 root 可正常创建文件touch/var/www/html/root-f1# 查看目录文件两个文件均存在ls/var/www/html# 输出root-f1 web1.html⚠️ 安全警告no_root_squash会赋予客户端 root 用户与服务端 root 相同的权限生产环境严禁使用除非有严格的网络隔离。2.6.3 nfs-client2 挂载与多客户端共享验证# 客户端 2 安装依赖yuminstall-ynfs-utils httpd# 启动网页服务systemctlenablehttpd--now# 关闭防火墙systemctl stop firewalld# 查询服务端共享列表showmount-e10.1.8.20# 挂载相同共享目录mount-tnfs10.1.8.20:/shares/webapp /var/www/html# 验证挂载成功df-h|grepwww# 在 client2 创建测试文件多客户端实时同步touch/var/www/html/data# 查看文件client1 创建的 web1.html、root-f1 全部可见ls/var/www/html# 输出data root-f1 web1.html 验证要点在任意客户端创建的文件其他客户端可立即看到证明 NFS 共享目录实现了实时同步。2.7 持久化挂载开机自动挂载注释NFS 属于网络存储/etc/fstab无需添加_netdev参数系统启动网络就绪后自动挂载。nfs-client1 配置# 编辑 fstab 配置文件vim/etc/fstab# 在文件末尾追加以下行# 格式说明服务端共享路径 本地挂载点 文件系统 挂载参数 备份 自检10.1.8.20:/shares/webapp /var/www/html nfs defaults00# 重启验证自动挂载reboot# 重启后查看挂载是否自动生效df-h|grepwwwnfs-client2 配置# 编辑 fstab 配置文件vim/etc/fstab# 在文件末尾追加以下行10.1.8.20:/shares/webapp /var/www/html nfs defaults00# 重启机器测试reboot# 校验开机挂载状态df-h|grepwww 排错技巧若重启后挂载失败可执行mount -a手动挂载并查看错误信息。常见问题包括服务端 IP 变更、防火墙未放行、/etc/exports未重载等。附录常见问题排查挂载失败排查步骤# 1. 检查服务端 NFS 服务是否运行systemctl status nfs-server# 2. 检查服务端共享列表exportfs-v# 3. 检查客户端能否连接服务端端口rpcinfo-p10.1.8.20# 4. 检查防火墙规则firewall-cmd --list-services# 5. 检查 SELinux 状态getenforce# 6. 手动测试挂载mount-tnfs-overs310.1.8.20:/shares/webapp /mntNFSv3 vs NFSv4 对比特性NFSv3NFSv4传输协议UDP / TCP仅 TCPRPC 依赖需 rpcbind内置 RPC无需 rpcbind端口动态端口固定端口 2049文件锁需 mountd内置锁服务安全性较弱支持 Kerberos 认证 建议CentOS 7 默认使用 NFSv3如需使用 NFSv4可在/etc/exports中添加vers4参数。
返回列表