Zenith Horizon

Linux 系统安装配置 NFS 详解

2026/03/20
loading

在Debian系统上配置NFS共享,主要分为服务端设置和客户端挂载两大步骤。下面是一个清晰、详细的配置指南。

🚀 第一部分:配置NFS服务端(共享目录的机器)

1. 安装NFS内核服务器

首先,更新软件包列表并安装 nfs-kernel-server​ 包。如果计划使用NFSv2或NFSv3,rpcbind​ 也会作为依赖被安装。

sudo apt update
sudo apt install nfs-kernel-server

2. 创建并准备共享目录

创建一个你想通过网络共享的目录,并设置适当的权限。一个常见的做法是将其所有者和组设置为 nobody:nogroup​,并赋予读写权限。

sudo mkdir -p /srv/nfs/share
sudo chown nobody:nogroup /srv/nfs/share
sudo chmod 755 /srv/nfs/share

3. 配置文件 /etc/exports​

这是NFS服务端最核心的配置文件,用于定义哪些目录共享给谁以及有什么权限。使用文本编辑器打开它:

sudo nano /etc/exports

在该文件中,每一行代表一个共享配置,基本语法如下:

<共享目录> <客户端1>(选项1,选项2,...) <客户端2>(选项,...)
  • ​共享目录​:你要分享的路径,例如 /srv/nfs/share​。

  • ​客户端​:可以是一个IP地址(如 192.168.1.100​)、一个网段(如 192.168.1.0/24​ 或 192.168.1.0/255.255.255.0​)或者一个域名(如 *.example.com​)。

​常用选项说明​:

  • ​rw​:允许客户端读写。

  • ​ro​:只读。

  • ​sync​:确认数据写入磁盘后才响应客户端,保证数据一致性(推荐)。

  • ​no_subtree_check​:禁用子树检查,通常可以提高可靠性并减少警告。

  • ​root_squash​:将客户端的root用户映射为匿名用户(nobody​),这是重要的安全特性,防止客户端以root权限修改服务端文件。

  • ​no_root_squash​:允许客户端root用户保留服务端的root权限,​风险极高,请勿在非信任网络使用​。

  • ​all_squash​:将所有客户端用户都映射为匿名用户。

​配置示例​:
假设你想把 /srv/nfs/share​ 共享给 192.168.1.0/24​ 网段的所有机器,允许读写,并且安全地隔离root权限,可以添加如下行:

/srv/nfs/share 192.168.1.0/24(rw,sync,no_subtree_check,root_squash)

4. 应用配置并启动服务

配置文件修改后,需要导出共享并重启NFS服务使其生效。

# 导出所有在 /etc/exports 中配置的目录
sudo exportfs -a

# 重启NFS内核服务器
sudo systemctl restart nfs-kernel-server

# 设置NFS服务开机自启
sudo systemctl enable nfs-kernel-server

5. (可选)配置防火墙

如果你的系统启用了防火墙(如 ufw​),需要允许NFS流量。NFSv4主要使用​2049端口​。

# 允许来自内网网段的NFS流量
sudo ufw allow from 192.168.1.0/24 to any port nfs

如果使用NFSv3,还需要开放 rpcbind​(端口111)和其他动态端口,配置会更复杂一些。

💻 第二部分:配置NFS客户端(挂载共享的机器)

1. 安装NFS客户端工具

在客户端机器上,需要安装 nfs-common​ 软件包。

sudo apt update
sudo apt install nfs-common

2. 创建本地挂载点

创建一个本地目录,用于连接远程的共享目录。

sudo mkdir -p /mnt/nfs_share

3. 手动挂载NFS共享

使用 mount​ 命令将服务端的共享目录挂载到本地。

# 格式:sudo mount -t nfs <服务端IP>:<共享目录> <本地挂载点>
sudo mount -t nfs 192.168.1.100:/srv/nfs/share /mnt/nfs_share

可以指定NFS协议版本,例如强制使用NFSv4:

sudo mount -t nfs -o vers=4 192.168.1.100:/srv/nfs/share /mnt/nfs_share

挂载成功后,可以用 df -h​ 命令查看是否成功。

4. 测试读写

在挂载点创建或编辑文件,验证读写权限是否正常。

touch /mnt/nfs_share/test.txt

5. 设置开机自动挂载(可选)

编辑 /etc/fstab​ 文件,添加一条规则,使系统启动时自动挂载:

sudo nano /etc/fstab

添加如下行:

192.168.1.100:/srv/nfs/share  /mnt/nfs_share  nfs  defaults,_netdev  0  0
  • ​_netdev​ 选项非常重要,它告诉系统这是一个网络设备,需要在网络就绪后再尝试挂载,避免开机时因网络未准备好而卡住。
    配置好后,可以通过 sudo mount -a​ 测试 /etc/fstab​ 中的条目是否正确无误。

🔍 第三部分:验证与故障排查

验证服务端配置

  • 在服务端运行 exportfs -v​ 可以查看当前有效的导出列表及其选项。

  • 运行 rpcinfo -p​ 可以查看RPC服务是否正常注册。从客户端运行 rpcinfo -p 192.168.1.100​ 可以检查服务端的RPC端口是否可达。

检查客户端挂载

  • 运行 mount | grep nfs​ 可以查看已挂载的NFS文件系统。

  • 如果挂载失败,可以查看系统日志获取详细错误信息:journalctl -xe​ 或 dmesg | grep nfs​。

权限问题

  • 如果客户端挂载后只能读不能写,或者文件所有者显示为 nobody​,请检查服务端的 /etc/exports​ 选项(是否忘了加 rw​?)以及共享目录本身的文件系统权限(chmod​ 和 chown​ 设置是否正确)。

Author: Max

Permalink: /archives/linux-nfs

Published: 2026-03-20 11:47:24

Updated: 2026-03-20 11:44:51

License: 本文采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可

CATALOG