igozhang

——

    NFS使用

    环境: CentOS 7.6
    全称: Network File System(网络文件系统)


    3. NFS 共享的实现

    3.1 需求

    在虚拟机 server0 上配置 NFS 服务:

    共享目录 权限 访问范围
    /public 只读(ro) 仅 example.com 域内系统可访问
    /protected 可读写(rw) example.com 域内系统可访问

    在虚拟机 desktop0 上访问 NFS 共享:

    项 要求
    挂载 将 server0 的 /public 挂到本地 /mnt/nfsmount
    开机挂载 系统启动时自动挂载

    说明: 实验网段通常为 172.25.0.0/24,对应 example.com 域主机。
    /etc/exports 中常用该网段表示“域内可访问”;也可写成 *.example.com(需 DNS/主机名可解析)。

    3.2 方法

    普通 NFS 共享要点:

    • 服务端需运行 nfs-server.service
    • 客户端一般不必单独常驻特定业务服务(使用 mount / fstab 即可;涉及开机挂载网络盘时注意 _netdev)

    /etc/exports 记录格式:

    共享目录绝对路径  客户地址1(ro|rw,...)  客户地址2(ro|rw,...) ...
    

    常用参数:

    参数 含义
    ro 只读
    rw 读写
    sync 请求写入完成后再返回(更稳妥,默认策略因版本而异)
    no_root_squash 客户端 root 不映射为 nfsnobody(安全性低,一般不滥用)

    3.3 步骤

    步骤一:在 server0 上发布 NFS 共享

    1)准备共享目录

    [root@server0 ~]# mkdir /public
    [root@server0 ~]# mkdir /protected
    

    补充: 若需客户端可写 /protected,除 exports 中 rw 外,目录本身权限也要允许写入,例如:
    chmod 777 /protected 或按业务设置属主/属组(考试环境常放宽权限)。

    2)编写 NFS 共享配置

    [root@server0 ~]# vim /etc/exports
    

    内容示例(网段方式,与常见实验环境一致):

    /public    172.25.0.0/24(ro)
    /protected 172.25.0.0/24(rw)
    

    若按域名通配(需名字解析正常):

    /public    *.example.com(ro)
    /protected *.example.com(rw)
    

    修改后可立即生效(无需重启服务时):

    [root@server0 ~]# exportfs -r
    # 或 exportfs -a
    

    3)启动 nfs-server 并设置开机自启

    [root@server0 ~]# systemctl restart nfs-server
    [root@server0 ~]# systemctl enable nfs-server
    # enable 成功后会创建类似如下的符号链接(路径以系统提示为准)
    # ln -s '/usr/lib/systemd/system/nfs-server.service' '/etc/systemd/system/nfs.target.wants/nfs-server.service'
    

    可选补充(防火墙): 若启用 firewalld,可放行 NFS 相关服务,例如:
    firewall-cmd --permanent --add-service=nfs --add-service=mountd --add-service=rpc-bind && firewall-cmd --reload

    可选补充(SELinux): 若共享非默认策略目录且被拒绝,可结合 ausearch/setsebool 排查;简单实验环境有时会临时 setenforce 0(生产不推荐)。

    步骤二:在 desktop0 上挂载 /public

    1)创建挂载点

    [root@desktop0 ~]# mkdir /mnt/nfsmount
    

    2)查看 server0 导出的共享

    [root@desktop0 ~]# showmount -e server0.example.com
    Export list for server0.example.com:
    /protected 172.25.0.0/24
    /public    172.25.0.0/24
    

    也可使用 IP:showmount -e 172.25.0.11(以 server0 实际地址为准)。

    3)配置开机自动挂载

    [root@desktop0 ~]# vim /etc/fstab
    

    追加(注意是 _netdev,不是转义后的 \_netdev):

    server0.example.com:/public  /mnt/nfsmount  nfs  _netdev  0  0
    
    字段 说明
    server0.example.com:/public 远端共享
    /mnt/nfsmount 本地挂载点
    nfs 文件系统类型(也可写 nfs4)
    _netdev 等待网络就绪后再挂载,避免开机失败
    0 0 不做 dump;不做 fsck(网络文件系统常见写法)

    4)测试挂载

    [root@desktop0 ~]# mount -a
    [root@desktop0 ~]# df -hT /mnt/nfsmount/
    Filesystem                 Type  Size  Used Avail Use% Mounted on
    server0.example.com:/public nfs4   10G  3.2G  6.8G  32% /mnt/nfsmount
    

    临时挂载(不写 fstab)可用:

    mount -t nfs server0.example.com:/public /mnt/nfsmount
    

    配置对照

    角色 主机 操作要点
    服务端 server0 /etc/exports 导出 /public(ro)、/protected(rw);systemctl enable --now nfs-server
    客户端 desktop0 showmount -e 确认;fstab 挂载 :/public → /mnt/nfsmount,选项含 _netdev

    本题客户端要求只挂载 /public;/protected 在服务端已发布,需要时可另行挂载测试读写。


    常见问题

    1. showmount 无输出或失败: 检查服务端 nfs-server 状态、/etc/exports 语法、防火墙、以及客户端到 server0 的网络/DNS。
    2. mount -a 卡住或失败: 确认 _netdev、主机名可解析、服务端导出与权限;可先用 IP 挂载排查 DNS。
    3. 可读不可写 /protected: 检查 exports 是否为 rw,以及目录本地权限/SELinux。
    4. 修改 exports 不生效: 执行 exportfs -r 或重启 nfs-server。

    MP3