Ubuntu NFS挂载怎么配置?Ubuntu NFS挂载是 Linux 服务器之间共享文件和目录时非常常见的一种方式,尤其适合多台 Ubuntu、Debian 或其他 Linux 服务器需要访问同一份数据的场景。NFS(Network File System)可以让客户端通过网络访问远程服务器上的目录,使用起来和本地目录比较接近,不需要每次通过 FTP、SFTP 等方式手动上传和下载文件。对于网站文件共享、备份目录、媒体文件、程序数据以及多服务器环境来说,NFS 都有比较实际的用途。本文以 Ubuntu 系统为例,从 NFS 服务端安装、共享目录配置、防火墙设置,到客户端安装 NFS 工具、创建挂载点、执行挂载、设置开机自动挂载,再到常见故障排查,完整介绍 Ubuntu NFS 挂载的配置方法,适合刚接触 NFS 的用户,也可以直接作为服务器部署时的操作参考。
一、Ubuntu NFS是什么,为什么需要挂载
NFS 的工作方式可以简单理解为,一台服务器负责提供共享目录,其他服务器通过网络连接到这个目录,然后把远程目录挂载到自己的本地文件系统中。例如,有一台服务器 IP 是 192.168.1.100,服务器上有 /data/share 目录,现在希望另外一台 Ubuntu 服务器访问这个目录,那么就可以在 NFS 服务端把 /data/share 设置为共享目录,然后在客户端创建 /mnt/share,通过 NFS 将远程目录挂载到 /mnt/share。完成以后,客户端进入 /mnt/share,看到的实际上就是 NFS 服务端 /data/share 中的文件。对于使用者来说,它和操作普通本地目录非常接近,但数据实际存储在 NFS 服务端。
需要注意的是,NFS 本身并不是一种把文件复制到客户端的工具,而是一种网络文件系统。客户端执行挂载以后,对共享目录中的读取、创建、修改和删除等操作,都可能通过网络发送到服务端。因此,NFS 的实际体验不仅取决于服务器磁盘性能,也和客户端与服务端之间的网络延迟、带宽、丢包情况以及 NFS 参数有关。如果只是两台同机房服务器之间共享文件,NFS 通常比较方便;如果跨公网使用,则需要更加重视网络安全、访问控制和稳定性,不建议直接把 NFS 服务端口暴露给整个互联网。
二、在Ubuntu服务器安装NFS服务端
首先需要确定哪台服务器作为 NFS 服务端。服务端负责存储实际的数据,并将指定目录通过 NFS 协议共享出去。假设服务端使用 Ubuntu 22.04 或 Ubuntu 24.04,可以先更新软件包列表,然后安装 nfs-kernel-server。
sudo apt update
sudo apt install nfs-kernel-server -y
安装完成后,可以检查 NFS 服务状态:
sudo systemctl status nfs-server
如果看到 active (exited) 或服务处于正常运行状态,一般说明 NFS 服务已经安装并启动。也可以直接执行:
sudo systemctl enable --now nfs-server
这条命令会同时设置 NFS 服务开机启动并立即启动服务。对于服务器来说,建议安装完成后就确认一下服务状态,因为如果 NFS 服务没有正常启动,后面客户端即使配置完全正确,也无法完成挂载。
接下来准备一个用于共享的目录。例如:
sudo mkdir -p /data/share
为了测试方便,可以在目录中创建一个文件:
sudo touch /data/share/test.txt
echo "NFS test" | sudo tee /data/share/test.txt
查看目录:
ls -lah /data/share
如果能够看到 test.txt,说明共享目录已经准备好了。实际生产环境中,/data/share 可以替换成真正的数据目录,例如网站上传目录、备份目录或者专门的数据盘挂载目录,但不建议一开始就直接共享整个 / 根目录。NFS 共享目录应该尽可能限定在实际需要使用的范围内,这样后续权限控制和安全管理都会更加简单。
三、配置NFS共享目录
NFS 服务端最重要的配置文件是:
/etc/exports
可以使用 nano 编辑:
sudo nano /etc/exports
例如只允许 192.168.1.200 这台客户端服务器访问 /data/share,可以添加:
/data/share 192.168.1.200(rw,sync,no_subtree_check)
保存以后,执行:
sudo exportfs -rav
然后查看当前 NFS 导出的目录:
sudo exportfs -v
如果能够看到 /data/share 以及对应的客户端 IP,说明 NFS 共享目录已经成功发布。
/etc/exports 中的配置格式非常重要。前面的 /data/share 是服务端需要共享的目录,后面的 192.168.1.200 是允许访问的客户端 IP,括号里面则是共享参数。rw 表示客户端拥有读写权限,sync 表示服务器同步处理数据写入,通常更适合需要保证数据写入可靠性的场景,no_subtree_check 可以避免部分目录检查带来的问题,也是比较常见的配置方式。
如果需要允许整个局域网访问,例如局域网网段是 192.168.1.0/24,可以写成:
/data/share 192.168.1.0/24(rw,sync,no_subtree_check)
这样该网段中的客户端都可以根据 NFS 权限访问共享目录。生产环境中更建议按照实际需求限制 IP 或网段,而不是直接使用:
/data/share *(rw,sync,no_subtree_check)
虽然 * 配置简单,但是意味着来源范围非常宽,尤其是在服务器存在公网网络连接的情况下,这种配置并不适合作为默认方案。
四、NFS常用参数怎么选择
NFS 的 /etc/exports 可以配置很多参数,但并不是参数越多越好。普通 Ubuntu 服务器做文件共享时,先使用相对简单、容易维护的配置即可。例如:
/data/share 192.168.1.200(rw,sync,no_subtree_check)
其中 rw 是读写权限;如果客户端只需要读取数据,可以使用 ro,这样可以降低客户端误修改文件的风险。sync 主要用于控制服务端写入行为,在对数据可靠性有要求的场景中比较常见。no_subtree_check 则可以避免子目录检查带来的额外问题。
如果需要让客户端以 root 身份操作共享目录时仍然受到普通用户权限限制,可以关注 root_squash。默认情况下,NFS 通常会将客户端 root 用户映射成匿名用户,以减少客户端 root 权限直接作用于服务端文件的风险。例如:
/data/share 192.168.1.200(rw,sync,no_subtree_check,root_squash)
相反,no_root_squash 会允许客户端 root 用户保留对应权限,这在某些特殊服务器环境中确实有用途,但安全风险也更高。除非明确知道为什么需要使用,否则不建议随意配置 no_root_squash。
修改 /etc/exports 后不要忘记重新导出:
sudo exportfs -rav
如果修改了很多配置,也可以重启 NFS 服务:
sudo systemctl restart nfs-server
不过一般修改 exports 后执行 exportfs -rav 就足够了,没有必要每次都重启整个服务。
五、Ubuntu防火墙如何放行NFS
如果 Ubuntu 服务端启用了 UFW 防火墙,还需要考虑防火墙规则。首先查看 UFW 状态:
sudo ufw status
如果没有启用防火墙,则不需要为了 NFS 强行添加规则。如果服务器启用了 UFW,建议只允许指定客户端 IP 或内部网段访问,而不是对所有来源开放。
例如客户端 IP 是 192.168.1.200,可以根据实际环境设置允许规则。NFS 具体需要放行的端口与 NFS 版本和相关服务有关,因此在实际配置时最好先确认服务器当前使用的 NFS 版本及 RPC 服务状态。
可以使用:
sudo ss -lntup | grep -E '2049|111'
查看相关网络服务。
也可以使用:
sudo rpcinfo -p
查看 RPC 注册的服务。
如果是在云服务器上部署 NFS,还需要特别注意云厂商的安全组。即使 Ubuntu 本机 UFW 已经放行,如果云服务器安全组没有允许相关流量,客户端依然可能连接失败。对于云服务器而言,安全组和操作系统防火墙需要同时检查。
六、Ubuntu客户端安装NFS工具
服务端配置完成后,就可以开始配置客户端。假设客户端也是 Ubuntu 系统,需要安装 nfs-common:
sudo apt update
sudo apt install nfs-common -y
安装完成后,可以先查看服务端提供了哪些共享目录:
showmount -e 192.168.1.100
这里的 192.168.1.100 替换成 NFS 服务端实际 IP。
正常情况下可能看到类似:
Export list for 192.168.1.100:
/data/share 192.168.1.200
如果能够看到 /data/share,说明客户端已经能够获取 NFS 服务端的导出信息。需要注意,如果服务端使用 NFSv4 或网络环境进行了特殊配置,showmount 的表现可能与传统 NFS 配置不同,所以不能仅仅根据 showmount 是否有结果判断 NFS 服务是否完全正常。

七、创建挂载目录并测试NFS挂载
客户端需要先创建一个本地目录作为挂载点:
sudo mkdir -p /mnt/share
然后执行 NFS 挂载:
sudo mount -t nfs 192.168.1.100:/data/share /mnt/share
如果没有出现任何报错,可以检查:
df -h
或者:
mount | grep nfs
也可以直接进入目录:
cd /mnt/share
ls -lah
如果能够看到服务端刚刚创建的 test.txt,说明基本挂载成功。
为了进一步确认客户端确实可以写入,可以测试:
echo "Hello NFS" | sudo tee /mnt/share/client-test.txt
然后回到服务端:
ls -lah /data/share
如果能够看到 client-test.txt,说明客户端的读写权限已经正常。
需要特别注意,NFS 挂载目录中的文件权限依然和 Linux 用户、用户组以及 UID/GID 有关系。很多新手在这里容易遇到一个问题:客户端用户看起来和服务端用户名一样,但实际 UID 不一样,最终导致文件显示为数字 UID 或者出现没有权限修改文件的情况。因此,如果 NFS 用于多服务器之间共享需要严格控制权限的数据,除了 NFS 本身的 exports 配置,还应该提前规划服务器之间的用户和组 UID/GID。
八、查看NFS当前挂载状态
NFS 挂载成功以后,可以使用下面这些命令确认状态:
df -hT
这个命令可以看到文件系统类型。如果挂载成功,一般会出现 nfs、nfs4 等相关类型。
也可以使用:
mount | grep nfs
或者:
findmnt -t nfs,nfs4
findmnt 在排查挂载问题时比较方便,因为它可以比较直观地显示挂载点、源地址和文件系统类型。
例如:
192.168.1.100:/data/share /mnt/share nfs4
这就表示客户端 /mnt/share 当前挂载的是服务端 192.168.1.100 的 /data/share。
九、设置Ubuntu开机自动挂载NFS
如果手动 mount 成功,服务器重启之后默认不会自动恢复挂载,因此生产环境一般需要配置 /etc/fstab。
编辑:
sudo nano /etc/fstab
添加:
192.168.1.100:/data/share /mnt/share nfs defaults,_netdev 0 0
这里的 _netdev 非常重要,它可以告诉系统这个文件系统依赖网络,在系统启动过程中不要把它当成普通本地磁盘处理。
保存以后,不要马上重启服务器,先执行:
sudo mount -a
如果没有报错,再检查:
df -hT
确认 /mnt/share 已经正常挂载。
如果服务器经常出现网络启动较慢、NFS 服务端暂时不可用等情况,还可以根据具体需求考虑 systemd automount 等方式,让访问目录时再建立挂载。对于普通服务器而言,先使用 fstab + _netdev 就已经可以满足很多场景,不需要一开始就把配置做得过于复杂。
十、Ubuntu NFS挂载失败常见问题
Ubuntu NFS 挂载最常见的问题之一就是客户端连接不到服务端。例如执行:
sudo mount -t nfs 192.168.1.100:/data/share /mnt/share
提示 Connection timed out,这时候不要马上修改 NFS 参数,应该先从网络开始检查。客户端可以测试:
ping 192.168.1.100
然后测试 NFS 相关端口:
nc -zv 192.168.1.100 2049
如果网络本身不通,就应该先检查服务器 IP、路由、安全组和防火墙。如果 TCP 2049 无法连接,则需要重点检查 NFS 服务是否启动以及防火墙是否放行。
另一个常见问题是:
mount.nfs: access denied by server while mounting
这种情况通常与 /etc/exports 中的客户端 IP、网段或权限配置有关。例如服务端配置的是:
/data/share 192.168.1.200(rw,sync,no_subtree_check)
但实际客户端 IP 是 192.168.1.201,那么服务端自然不会允许访问。修改配置后记得执行:
sudo exportfs -rav
然后再次测试。
如果出现:
mount.nfs: No such file or directory
则需要检查服务端共享路径是否写错。例如服务端实际目录是:
/data/share
客户端却写成:
/data/shares
自然无法正常挂载。可以通过服务端:
sudo exportfs -v
确认实际导出的目录。
如果挂载成功,但是客户端无法创建文件,则重点检查 Linux 文件权限。服务端执行:
ls -ld /data/share
查看目录所有者和权限:
ls -lah /data/share
同时检查客户端用户 UID:
id
以及服务端对应用户的 UID:
id username
如果两边 UID/GID 不一致,即使用户名相同,也可能出现权限问题。NFS 并不是通过“用户名字符串”来判断用户身份,而是依赖 UID/GID 等身份信息,因此多服务器环境下统一 UID/GID 往往比单纯创建相同名称的用户更加重要。
十一、NFS挂载后如何卸载
如果需要临时取消挂载,可以使用:
sudo umount /mnt/share
如果提示目标目录正在使用,例如:
target is busy
说明当前还有程序正在访问这个目录。可以先退出 /mnt/share:
cd ~
然后检查哪些进程正在使用:
sudo lsof +D /mnt/share
也可以:
sudo fuser -vm /mnt/share
找到占用目录的进程后,再根据实际情况处理。不要为了快速卸载就直接强制结束重要业务进程,尤其是 NFS 被网站程序、数据库备份程序或者其他生产任务使用的时候。
十二、NFS版本怎么选择
现在 Ubuntu 系统通常支持 NFSv3 和 NFSv4 等版本。实际使用中可以明确指定版本进行测试,例如:
sudo mount -t nfs -o vers=4 192.168.1.100:/data/share /mnt/share
也可以测试 NFSv3:
sudo mount -t nfs -o vers=3 192.168.1.100:/data/share /mnt/share
如果默认挂载失败,可以分别测试不同版本,从而判断是不是 NFS 版本兼容或者服务配置导致的问题。NFSv4 在现代 Linux 环境中使用比较普遍,而且架构与传统 NFSv3 有一些区别,因此不要简单地把两种版本的目录结构和网络行为完全当成一样。
如果你的服务器全部是较新的 Ubuntu 系统,而且没有特殊的旧设备兼容要求,可以优先围绕 NFSv4 进行配置;如果是老旧设备、多种 Linux 发行版混合环境,则应该结合实际系统版本进行测试。
十三、生产环境使用NFS需要注意什么
NFS 最大的优势是使用方便,但它并不意味着可以把任意目录直接暴露给公网。尤其是云服务器环境,不建议简单地把 NFS 共享配置成 *,然后开放相关端口给整个互联网。更合理的方式是让 NFS 服务端和客户端处于可信的私有网络、VPC 或专用网络环境中,并在安全组和防火墙层面限制来源 IP。对于跨公网的文件共享需求,也应该结合 VPN、专用网络或者其他安全传输方式进行设计,而不是直接把内部 NFS 服务暴露出来。
另外,NFS 共享目录最好不要直接作为数据库的数据目录使用,除非你非常清楚数据库和 NFS 所使用的文件锁、缓存以及一致性机制。数据库对于磁盘延迟和一致性的要求与普通文件共享不同,直接把 MySQL、PostgreSQL 等数据库的数据目录放到 NFS 上,可能带来性能和稳定性问题。NFS 更适合图片、视频、备份文件、安装包、共享文档、网站静态资源以及多个服务器共同访问的普通文件。
如果 NFS 用于网站文件,例如多个 Web 服务器共同使用一个上传目录,还需要考虑网络延迟和大量小文件访问带来的性能影响。用户上传一张图片和网站后台同时处理大量缩略图时,对 NFS 的读写请求可能会明显增加。如果发现网站访问速度突然受到影响,可以使用 iostat、nload、iftop 等工具分别观察磁盘、网络和服务器负载,而不要简单认为“服务器配置不够”。
十四、完整配置示例
最后把整个流程串起来,假设 NFS 服务端 IP 为 192.168.1.100,客户端 IP 为 192.168.1.200,服务端共享 /data/share,客户端挂载到 /mnt/share。
服务端首先安装:
sudo apt update
sudo apt install nfs-kernel-server -y
创建共享目录:
sudo mkdir -p /data/share
编辑:
sudo nano /etc/exports
加入:
/data/share 192.168.1.200(rw,sync,no_subtree_check)
应用配置:
sudo exportfs -rav
确认:
sudo exportfs -v
客户端安装:
sudo apt update
sudo apt install nfs-common -y
查看共享:
showmount -e 192.168.1.100
创建挂载点:
sudo mkdir -p /mnt/share
手动挂载:
sudo mount -t nfs 192.168.1.100:/data/share /mnt/share
检查:
df -hT
测试写入:
echo "NFS test" | sudo tee /mnt/share/test.txt
确认无误以后配置开机自动挂载:
sudo nano /etc/fstab
添加:
192.168.1.100:/data/share /mnt/share nfs defaults,_netdev 0 0
最后测试:
sudo umount /mnt/share
sudo mount -a
df -hT
如果 /mnt/share 可以正常出现,并且能够读取服务端文件,那么整个 Ubuntu NFS 挂载流程就基本完成了。
对于大多数 Ubuntu 服务器来说,NFS 配置本身并不复杂,真正容易出问题的地方主要集中在三个方面:第一是 /etc/exports 的客户端 IP 和权限设置,第二是服务器安全组、UFW 以及网络连接,第三是客户端和服务端的 UID/GID 与文件权限。只要按照“先配置服务端共享目录,再通过 exportfs 发布,然后客户端安装 nfs-common,手动挂载测试,最后写入 /etc/fstab”这个顺序进行,排查问题会简单很多。对于个人服务器、小型网站、多台 Linux 服务器之间共享文件,NFS 是一种比较直接的方案;而如果涉及公网、大规模数据、高并发访问或者数据库存储,则应该根据网络、存储和安全需求进一步选择合适的架构,而不是单纯把所有数据目录都放到 NFS 上。

djvps820








