ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

运维常见面试题_05_NFS 与共享存储

运维常见面试题_05_NFS 与共享存储 Q102. NFS v3 和 NFS v4 的主要区别是什么1. 是什么NFSNetwork File System是网络文件共享协议。v3RFC 1813是经典的 RPC 版 NFSv4RFC 7530含 v4.1/4.2是一次协议重构在传输、端口、认证、锁等方面做了大量简化与增强。2. 为什么用它选型直接影响性能、安全性和部署复杂度。理解 v3/v4 差异才能决定防火墙复杂环境用什么、高安全/高性能场景用什么也是排查挂载问题的前提——如 v3 报portmap/rpc 相关错、v4 报不支持的协议。3. 怎么用它关键差异对比维度NFS v3NFS v4端口与 rpcbind依赖rpcbind/portmappermountd/nlockmgr/statd 用动态端口防火墙难放行固定 TCP 2049无需 rpcbind防火墙只开 2049传输协议支持 TCP/UDP仅TCP面向连接更可靠文件锁独立lockd statdNLM服务重启会丢锁需手工恢复内置锁管理无需额外服务认证安全基于 IP 的弱认证secsys内置RPCSEC_GSSKerberos 等强认证性能单次请求/响应、无状态服务器COMPOUND 复合操作减少往返元数据操作更高效状态无状态stateless有状态stateful基于 lease 租约管理大文件/挂载需手工配 rsize/wsize 等参数自动协商最优参数挂载端口多路复用兼容性NFSv4 服务端通常兼容 v2/v3可RPCNFSDARGS-N 2 -N 3关闭客户端mount -t nfs默认可能协商到 v3需-o vers4显式指定。选型建议新环境优先 NFSv4安全、简单、防火墙友好、性能好v3 在存量老系统、部分仅支持 v3 的 NAS/集群文件系统上仍有使用。4. 使用场景新旧环境选型、跨机房防火墙场景v4 只需开 2049、安全要求高的共享目录v4 Kerberos。面试要点核心差异四句话——v4 固定 2049 不需要 rpcbind、锁内置无需 statd、支持 Kerberos 强认证、COMPOUND 复合操作性能更好。Q103. NFS 依赖的 rpcbind 服务的作用是什么1. 是什么rpcbind早期叫 portmapper端口映射器是一个 RPC 服务维护RPC 程序号 → 端口号的映射关系NFS v3 的 mountd、nlockmgr、statd 等组件端口是动态分配的客户端必须通过 rpcbindUDP/TCP 111查询它们实际监听的端口。2. 为什么用它NFSv3 的每个子服务rpc.mountd 处理挂载请求、rpc.statd 处理锁恢复、nlockmgr 处理文件锁启动时随机分配端口客户端无法预先知道端口只能先问 rpcbind这个程序号现在监听哪个端口。没有 rpcbind客户端连端口 111都连不上NFSv3 挂载必然失败。3. 怎么用它# 1) 查看 rpcbind 服务状态与当前注册的 RPC 映射systemctl status rpcbind rpcinfo-p# 列出所有注册的 RPC 程序、版本、协议、端口# 输出示例portmapper 100000 / nfs 100003 / mountd 100005 / nlockmgr 100021 / status 100024 ...# 2) 服务器端必须启动 rpcbindNFSv4 不依赖但通常一起装systemctlenable--nowrpcbind# 3) 防火墙放行v3 需要 111 动态端口范围firewall-cmd --add-servicerpc-bind--permanent# 并固定 mountd/statd 端口/etc/sysconfig/nfs 或 /etc/nfs.conf便于防火墙精确放行常见故障mount: RPC: Port mapper failure或rpcbind: RPC: Remote system error——通常是rpcbind 未启动、防火墙挡了 111或 mountd 等动态端口未放行用rpcinfo -p server从客户端测即可确认。4. 使用场景NFSv3 服务搭建、挂载失败排查“RPC: Port mapper failure”、防火墙放行规划。面试要点一句话——“rpcbind 是 NFSv3 的’端口总机’把 RPC 程序号翻译成实际端口”答出rpcinfo -p查看、放行 111、NFSv4 不需要它这三点。Q104. 如何配置 NFS 服务器和客户端1. 是什么NFS 服务器通过/etc/exports声明哪些目录共享给哪些主机/网段、以什么权限共享并启动 nfs/rpcbind 服务客户端用mount把远端共享目录挂载到本地即可像本地目录一样读写。2. 为什么用它NFS 是 Linux/Unix 环境最常用的共享文件系统用于多台机器共享同一份数据源码、数据目录、共享磁盘、K8s PV配置简单、原生支持、无需额外软件。3. 怎么用它服务器端CentOS/RHEL 为例# 1) 安装软件yuminstall-ynfs-utils# 2) 创建共享目录并设权限mkdir-p/data/sharedchownnfsnobody:nfsnobody /data/shared# 3) 编辑 /etc/exports 声明共享cat/etc/exportsEOF /data/shared 192.168.1.0/24(rw,sync,no_root_squash) /data/shared 10.0.0.5(rw,sync,all_squash) EOF# 4) 启动服务并生效配置systemctlenable--nowrpcbind nfs-server exportfs-r# 重新读取 exports使配置立即生效exportfs-v# 查看当前生效的共享及权限showmount-elocalhost# 列出本机共享的目录客户端# 1) 安装yuminstall-ynfs-utils# 2) 查看服务器共享了哪些目录showmount-e192.168.1.10# 3) 挂载v3/v4mount-tnfs192.168.1.10:/data/shared /mnt/shared# 自动协商版本mount-tnfs4192.168.1.10:/data/shared /mnt/shared# 强制 NFSv4mount-tnfs-overs4,rsize1048576,wsize1048576192.168.1.10:/data/shared /mnt/shared# 4) 验证df-h/mnt/sharedmount|grepshared配置要点exports 语法为共享目录 客户端(选项...)客户端可用主机名、IP、网段192.168.1.0/24、通配符*.example.com每次改/etc/exports都要exportfs -r生效无需重启服务。4. 使用场景多台 Web/应用服务器共享上传目录、K8s NFS PV、开发环境共享代码、日志集中目录。面试要点服务器端三步装 nfs-utils → 写 /etc/exports → systemctl enable nfs-server exportfs -r客户端三步装包 → showmount -e 看共享 → mount 挂载记住 exports 语法与exportfs -r。Q105. 如何配置 NFS 的共享权限和用户映射1. 是什么NFS 的权限分两层——exports 的共享级权限ro/rw控制客户端对共享目录整体能否写用户映射squash 机制决定客户端访问时的 UID/GID 在服务器端被翻译成什么身份避免客户端 root 在服务器端拥有 root 权限。2. 为什么用它不配置用户映射会带来两大问题客户端 root 默认在服务器端仍以 root 写入危险客户端普通用户 UID 与服务器端不一致导致属主错乱、没权限、写入变成 nobody。映射是 NFS 安全与权限正确的关键。3. 怎么用它exports 选项# /etc/exports 示例/data/shared192.168.1.0/24(rw,sync,root_squash,all_squash,anonuid1000,anongid1000)/data/readonly10.0.0.0/24(ro,sync)核心选项共享权限ro只读/rw读写sync写请求同步落盘后才响应数据更安全生产推荐/async先响应后落盘性能好但掉电有丢数据风险。用户映射squashroot_squash默认客户端 rootUID 0在服务器端被映射为nfsnobody匿名用户禁止 root 越权no_root_squash客户端 root 在服务器端保持 root 权限——仅限可信环境否则客户端可随意写任意文件危险all_squash所有客户端用户一律映射为匿名用户通常配合anonuid/anongid指定成特定 UID如 app 用户 1000anonuid1000,anongid1000指定匿名用户映射到的 UID/GID默认是 nfsnobody。固定映射的推荐做法客户端与服务器端用户 UID 不一致时最稳妥是两侧统一 UID创建相同 UID 的用户做不到时用all_squash,anonuid1000把所有客户端用户统一映射成服务器端同一个 UID避免属主错乱。验证权限映射# 客户端侧创建文件后在服务器端看属主确认映射是否符合预期touch/mnt/shared/testls-ln/mnt/shared/test# 看 UID 是否被映射4. 使用场景Web 应用共享上传目录统一映射成 www 用户、跨团队共享目录控制只读、多用户数据盘避免 UID 错乱。面试要点区分两类选项——ro/rw/sync管能不能写root_squash/all_squash/anonuid管以谁的身份写强调默认root_squash是为了防客户端 root 越权all_squash anonuid是解决 UID 不一致的通用手段。Q106. 如何让客户端开机自动挂载 NFS1. 是什么把 NFS 挂载写入客户端的/etc/fstab系统启动时自动执行挂载配合_netdev选项确保网络就绪后才挂载避免网络未通导致挂载失败拖慢开机。2. 为什么用它mount挂载是一次性的重启后失效。生产环境共享目录必须开机自动挂载否则服务器重启后应用因找不到挂载点而报错fstab 是实现持久化挂载的标准方式。3. 怎么用它# /etc/fstab 末尾追加一行# 字段文件系统 挂载点 类型 选项 备份(0) 检查顺序(0)192.168.1.10:/data/shared /mnt/shared nfs defaults,_netdev,noatime00常用选项说明_netdev告诉 systemd这是网络文件系统等网络就绪后再挂载防止开机时网络未起导致挂载失败阻塞启动NFS 必须加noatime不更新访问时间减少 NFS 写开销性能更好vers4/vers3指定协议版本避免协商到预期外的版本auto默认表示开机自动挂载noauto表示不自动挂载bg首次挂载失败后转入后台重试fg默认前台重试会阻塞开机生产常用bgrsize,wsize传输块大小如rsize1048576,wsize1048576大文件传输场景可提升性能。验证与应用mount-a# 重新挂载 fstab 中所有未挂载的条目改完 fstab 后立即验证df-h|grepshared# 确认挂载成功# fstab 写错可能导致开机失败/进入紧急模式改完务必先 mount -a 验证再重启注意fstab 写错IP、目录、选项错误可能导致开机失败/进入紧急模式因此改完 fstab 先mount -a验证再重启若希望访问时才挂载可用 systemd automount 实现按需挂载。4. 使用场景共享数据盘/上传目录持久挂载、Web 集群自动挂载共享存储、K8s 节点挂载 NFS 数据卷。面试要点答出 fstab 三要素远端路径、挂载点、nfs 类型 两个关键选项——_netdev网络就绪后再挂和bg失败后台重试不卡开机并提醒改完先mount -a验证再重启。Q107. NFS 客户端挂载失败如何排查1. 是什么NFS 挂载失败即mount -t nfs报错常见如RPC: Port mapper failure、No route to host、Permission denied、mount.nfs: Connection timed out等排查按网络 → rpcbind → exports 权限 → 挂载参数/日志逐层定位。2. 为什么用它NFS 挂载故障是共享存储环境最高频问题报错信息往往只给方向不给原因掌握一套固定排查顺序能快速区分是网络不通、服务没起、防火墙拦截、权限被拒还是参数写错。3. 怎么用它按序排查# ① 网络连通性ping192.168.1.10# 服务器 IP 是否可达nc-vz192.168.1.10111# TCP 111rpcbind是否通nc-vz192.168.1.102049# TCP 2049NFS是否通NFSv4 必需# ② 服务器端 RPC 服务是否正常rpcinfo-p192.168.1.10# 应能看到 portmapper/nfs/mountd/nlockmgr/statd# 连接失败 → 服务器上 systemctl status rpcbind nfs-server 看服务是否 running# rpcinfo -p 里没有 mountd/nlockmgr 条目 → NFS 相关服务没起# ③ 服务器端共享是否配置正确showmount-e192.168.1.10# 客户端查询服务器共享了哪些目录# Export list 为空 → /etc/exports 没写或 exportfs -r 没生效# 报 Permission denied → 客户端 IP 不在 exports 允许范围内或选项不匹配# ④ 防火墙/安全组很常见# 服务器端NFSv4 放行 2049NFSv3 放行 111 mountd/statd/nlockmgr 动态端口firewall-cmd --list-all# 服务器上查看已放行服务# 若为固定动态端口在 /etc/sysconfig/nfs 指定 mountd/statd 端口并放行# ⑤ 权限问题# 客户端 IP 在 exports 里但目录本身权限不对# 服务器端 chmod -R 755 /data/shared确认映射用户root_squash/all_squash# 客户端 mount -o rw 但 exports 是 ro → 报 Permission denied# ⑥ 看日志定位tail-f/var/log/messages# 服务器端含 rpc.mountd 报错journalctl-urpc-mountd-unfs-serverdmesg|grep-infs# 客户端内核日志按报错归类速查报错主要可能原因RPC: Port mapper failure / Remote system errorrpcbind 未起、111 端口被防火墙拦、服务器 IP 错mount.nfs: Connection timed out2049/动态端口被防火墙拦、服务器 nfs 服务没起Permission denied客户端 IP 不在 exports 里、exports 是 ro、squash 映射导致没权限No such file or directory服务器共享路径拼错、或共享目录已删除Operation not permitted挂载点/参数问题或 NFSv4 与 v3 版本不匹配4. 使用场景任何共享目录挂不上的线上故障、新装环境首次挂载 NFS。面试要点报错先对号入座按ping → rpcinfo -p → showmount -e → 防火墙 → exports 权限 → 日志六步排查记住三类最常见根因——防火墙111/2049/动态端口、exports 里没包含客户端、rpcbind/nfs 服务没起。
返回列表