Linux安装使用NFS
起因
台式机存了很多模型,500G硬盘不够用了,为了读取速度,还不能把模型放到其他机器上,那就把一些读取速度要求不高的放出去吧。 Samba搞一堆缓存,文件权限还有点乱,不太舒服,还是换NFS吧,NFS是专为Linux设计的,速度快,配置简单。
安装
服务端
sudo apt update
sudo apt-get install nfs-kernel-server
修改/etc/exports,写入如下配置
/srv/nfs4 192.168.1.0/24(rw,sync,fsid=0,crossmnt,no_subtree_check)
然后使用如下命令,动态生效。
sudo exportfs -arv
以下配置说明来自AI
配置结构拆解
/srv/nfs4 192.168.1.0/24(rw,sync,fsid=0,crossmnt,no_subtree_check)
└── 1 ──┘ ─── 2 ──┘ ────────────────────── 3 ──────────────────────
/srv/nfs4(共享路径):服务器上实际存在的本地目录,被指定为 NFSv4 导出的基础根路径。192.168.1.0/24(客户端限制):指定允许连接的客户端IP范围。- (…)(挂载选项):定义了该共享目录的访问控制、性能和行为参数。
核心参数详细说明
- 安全与认证 (
192.168.1.0/24):基于网络的信任。只要客户端的 IP 地址在这个网段内,服务器就直接信任该机器。
常规控制参数 (rw, sync)
rw (Read-Write):允许客户端对该共享目录进行读写访问。sync:同步写入模式。服务器收到客户端的数据写入请求后,必须将数据同步写入到物理磁盘中才向客户端返回确认。这种方式数据更安全,但写入性能比async(异步)稍低。
NFSv4 特有参数 (fsid=0, crossmnt)
fsid=0(或fsid=root):将此目录指定为 NFSv4 导出的虚拟根目录(伪根)。- NFSv4 要求所有导出的目录都必须处于一个统一的目录树下。
- 客户端在挂载时,不需要写绝对路径
/srv/nfs4,只需挂载服务器的/根路径即可(例如:mount -t nfs4 server_ip:/ /mnt/nfs)。
crossmnt (Cross Mount):允许客户端透明地复制和访问子挂载点。- 如果你在
/srv/nfs4/目录下又挂载了其他的独立硬盘分区(例如/srv/nfs4/data1),设置此参数后,客户端访问到该子目录时,NFS 会自动在后台帮客户端把它也挂载上,无需客户端手动逐个挂载。
- 如果你在
性能与底层参数 (no_subtree_check)
no_subtree_check:禁用子树检查。- 如果一个共享目录只是某分区下的一个普通子目录,NFS 默认会检查客户端请求的文件是否真的在该子树内,这会消耗额外的 CPU 并引发一些文件句柄问题。
- 由于此处
/srv/nfs4已经是专用的导出根目录,禁用子树检查可以提升文件操作的吞吐性能并提高连接稳定性。
客户端
sudo apt update
sudo apt install nfs-common
挂载
先创建挂载点
sudo mkdir -p /mnt/nfs
执行mount挂载
sudo mount -t nfs4 192.168.1.2:/ /mnt/nfs
自动挂载
也可以写入/etc/fstab,开机自动挂载
192.168.1.2:/ /mnt/nfs nfs4 defaults,_netdev,noatime 0 0
注意点
fsid=0会导致NFSv4的挂载路径是根目录/,并且如果其他挂载点不在/srv/nfs4下,客户端是无法访问的,所以如果有其他挂载点需要共享,必须在/srv/nfs4下创建目录,然后挂载到这个目录下。
简单点的话,可以去掉这个fsid=0虚拟根目录,直接是什么目录就写什么路径。
最后修改于 2026-07-23