跳转到内容
搜索 RunEntLinux 文档

仅搜索 RunEntLinux 通用文档,各发行版文档使用各自的搜索入口。

    浏览当前文档目录

    NFS(Network File System,网络文件系统)允许不同主机之间通过网络共享目录和文件。它是 Linux/Unix 环境下最常用的网络存储共享协议之一,广泛应用于集群共享存储、开发环境协作、集中化日志存储等场景。

    NFS 服务端 NFS 客户端
    /data/shared ----网络导出----> /mnt/nfs_share(挂载点)
    192.168.1.10 192.168.1.20
    Terminal window
    sudo dnf install nfs-utils -y
    Terminal window
    sudo systemctl enable --now nfs-server

    验证服务状态:

    Terminal window
    sudo systemctl status nfs-server
    Terminal window
    sudo mkdir -p /data/shared
    sudo chown nobody:nobody /data/shared
    sudo chmod 755 /data/shared

    /etc/exports 是 NFS 的核心配置文件,定义了哪些目录共享给哪些客户端以及相关权限。

    Terminal window
    sudo vi /etc/exports

    添加导出配置:

    /data/shared 192.168.1.0/24(rw,sync,no_root_squash,no_subtree_check)

    基本格式:

    共享目录 客户端地址(选项1,选项2,...)

    客户端地址格式:

    格式说明示例
    单个 IP只允许一个主机192.168.1.20
    子网允许整个子网192.168.1.0/24
    主机名指定主机名client.example.com
    通配符匹配域名*.example.com
    全部允许所有主机*

    常用选项:

    选项说明
    rw读写权限
    ro只读权限
    sync同步写入,数据安全性高
    async异步写入,性能更好但不安全
    no_root_squash客户端 root 拥有服务端 root 权限
    root_squash客户端 root 映射为 nobody(默认)
    all_squash所有用户映射为 nobody
    anonuid=N匿名用户映射为指定 UID
    anongid=N匿名用户映射为指定 GID
    no_subtree_check不检查子目录权限,提升性能
    # 读写共享,允许整个子网
    /data/shared 192.168.1.0/24(rw,sync,no_subtree_check)
    # 只读共享,允许特定主机
    /data/public 192.168.1.0/24(ro,sync,no_subtree_check)
    # 多客户端不同权限
    /data/project 192.168.1.20(rw,sync,no_root_squash) 192.168.1.30(ro,sync)
    # 映射所有用户为指定 UID/GID
    /data/upload *(rw,sync,all_squash,anonuid=1000,anongid=1000)

    修改 /etc/exports 后需要重新导出:

    Terminal window
    sudo exportfs -ra

    查看当前导出列表:

    Terminal window
    sudo exportfs -v

    exportfs 常用参数:

    参数说明
    -a导出或取消导出所有目录
    -r重新导出所有目录
    -v详细输出
    -s显示当前导出列表

    NFS 需要开放多个端口才能正常工作。使用 firewalld 的服务规则是最简单的方法。

    Terminal window
    sudo firewall-cmd --permanent --add-service=nfs
    sudo firewall-cmd --permanent --add-service=rpc-bind
    sudo firewall-cmd --permanent --add-service=mountd
    sudo firewall-cmd --reload
    Terminal window
    sudo firewall-cmd --list-all
    Terminal window
    sudo dnf install nfs-utils -y
    Terminal window
    showmount -e 192.168.1.10
    Terminal window
    sudo mkdir -p /mnt/nfs_share
    sudo mount -t nfs 192.168.1.10:/data/shared /mnt/nfs_share

    验证挂载:

    Terminal window
    df -hT /mnt/nfs_share
    mount | grep nfs
    Terminal window
    # 使用 NFS v4
    sudo mount -t nfs -o vers=4 192.168.1.10:/data/shared /mnt/nfs_share
    # 使用 NFS v3
    sudo mount -t nfs -o vers=3 192.168.1.10:/data/shared /mnt/nfs_share
    Terminal window
    sudo umount /mnt/nfs_share

    编辑 /etc/fstab:

    Terminal window
    sudo vi /etc/fstab

    添加:

    192.168.1.10:/data/shared /mnt/nfs_share nfs defaults,_netdev 0 0
    192.168.1.10:/data/shared /mnt/nfs_share nfs rw,hard,timeo=600,retrans=2,_netdev 0 0
    选项说明
    _netdev标记为网络设备,在网络就绪后才挂载
    hard服务端无响应时持续重试(默认)
    soft服务端无响应时超时后返回错误
    timeo=N超时时间(单位:0.1秒)
    retrans=N重试次数
    rsize=N读缓冲区大小
    wsize=N写缓冲区大小
    vers=4指定 NFS 版本
    noatime不更新访问时间
    nosuid禁止 SUID
    noexec禁止执行
    Terminal window
    sudo mount -a
    df -hT /mnt/nfs_share

    autofs 可以在访问目录时自动挂载 NFS 共享,不使用时自动卸载,减少资源占用。

    Terminal window
    sudo dnf install autofs -y
    1. 编辑主配置文件 /etc/auto.master,添加自动挂载点:

      Terminal window
      sudo vi /etc/auto.master

      添加如下行:

      /mnt/auto /etc/auto.nfs --timeout=300

      这表示 /mnt/auto 下的子目录将根据 /etc/auto.nfs 中的规则自动挂载,300 秒无访问后自动卸载。

    2. 创建映射文件 /etc/auto.nfs:

      Terminal window
      sudo vi /etc/auto.nfs

      添加映射规则:

      shared -rw,soft,timeo=300 192.168.1.10:/data/shared
      public -ro,soft,timeo=300 192.168.1.10:/data/public

      这意味着访问 /mnt/auto/shared 时会自动挂载 192.168.1.10:/data/shared。

    3. 启动 autofs 服务:

      Terminal window
      sudo systemctl enable --now autofs
    4. 验证自动挂载:

      Terminal window
      # 访问目录触发自动挂载
      ls /mnt/auto/shared
      # 查看挂载状态
      mount | grep auto

    如果需要自动挂载服务端的所有导出目录,可以使用通配符:

    /etc/auto.master
    /mnt/auto /etc/auto.nfs --timeout=300
    # /etc/auto.nfs
    * -rw,soft 192.168.1.10:/data/&

    & 会被替换为访问的子目录名。例如访问 /mnt/auto/shared 会自动挂载 192.168.1.10:/data/shared。

    NFS + autofs 常用于集中管理用户家目录:

    /etc/auto.master
    /home /etc/auto.home --timeout=600
    # /etc/auto.home
    * -rw,soft nfs-server:/home/&

    用户登录时,家目录 /home/username 会自动从 NFS 服务端挂载。

    Terminal window
    # 检查网络连通性
    ping 192.168.1.10
    # 检查 NFS 服务是否运行
    sudo systemctl status nfs-server # 服务端执行
    # 检查 RPC 服务
    rpcinfo -p 192.168.1.10
    # 检查服务端导出列表
    showmount -e 192.168.1.10
    # 检查防火墙
    sudo firewall-cmd --list-all # 服务端执行
    Terminal window
    # 服务端统计
    nfsstat -s
    # 客户端统计
    nfsstat -c
    # 查看已挂载的 NFS 信息
    nfsstat -m
    Terminal window
    # 查看服务端支持的 NFS 版本
    cat /proc/fs/nfsd/versions
    # 查看客户端挂载使用的版本
    nfsstat -m
    1. 安装并启动 NFS 服务:

      Terminal window
      sudo dnf install nfs-utils -y
      sudo systemctl enable --now nfs-server
    2. 创建共享目录:

      Terminal window
      sudo mkdir -p /data/shared /data/readonly
      sudo chown nobody:nobody /data/shared
      sudo chmod 755 /data/shared /data/readonly
    3. 配置导出:

      Terminal window
      cat <<EOF | sudo tee /etc/exports
      /data/shared 192.168.1.0/24(rw,sync,no_subtree_check)
      /data/readonly 192.168.1.0/24(ro,sync,no_subtree_check)
      EOF
      sudo exportfs -ra
      sudo exportfs -v
    4. 配置防火墙:

      Terminal window
      sudo firewall-cmd --permanent --add-service=nfs
      sudo firewall-cmd --permanent --add-service=rpc-bind
      sudo firewall-cmd --permanent --add-service=mountd
      sudo firewall-cmd --reload
    1. 安装 NFS 工具:

      Terminal window
      sudo dnf install nfs-utils autofs -y
    2. 验证服务端导出:

      Terminal window
      showmount -e 192.168.1.10
    3. 创建挂载点并通过 fstab 挂载:

      Terminal window
      sudo mkdir -p /mnt/shared /mnt/readonly
      cat <<EOF | sudo tee -a /etc/fstab
      192.168.1.10:/data/shared /mnt/shared nfs rw,_netdev,hard 0 0
      192.168.1.10:/data/readonly /mnt/readonly nfs ro,_netdev,hard 0 0
      EOF
      sudo mount -a
      df -hT /mnt/shared /mnt/readonly
    4. 测试读写:

      Terminal window
      echo "NFS test" | sudo tee /mnt/shared/test.txt
      cat /mnt/shared/test.txt

    NFS 是企业环境中简单高效的共享存储方案。合理配置权限、选项和防火墙规则,结合 autofs 实现按需挂载,可以构建灵活可靠的网络存储基础设施。