ubuntu开启NFS网络文件共享服务,并使用windows访问及排错过程
系统环境
nfs服务器
ubuntu server 22.04
要共享的文件路径为:~/,其对应的绝对路径为/home/ken
nfs客户端
windows 11 24h2工作站专业版
NFS服务器设置
安装NFS服务
sudo apt update
sudo apt install nfs-kernel-server
配置共享目录
打开配置文件
sudo nano /etc/exports
在文件末尾加入以下内容
/home/ken *(rw,sync,no_subtree_check,no_root_squash)
rw
表示读写权限。sync
表示数据会同步写入。no_subtree_check
禁用子目录检查,防止错误。* 表示任何客户端IP都允许
其中no_root_squash参数非常重要(没有的话,windows下挂载目录时,能正常挂载但不显示该目录下的文件,而且在该目录下也无法创建文件!!!),no_root_squash:root用户具有对根目录的完全管理访问权限。
重新加载NFS服务
sudo exportfs -ra
sudo systemctl restart nfs-kernel-server
加入开机自启
sudo systemctl enable nfs-kernel-server
检查共享
可以通过以下命令查看共享目录是否配置正确
sudo exportfs -v
客户端挂载
windows(11)方式
安装NFS客户端
在控制面板中开启即可,如下图所示:
访问NFS共享
先在windows地址栏输入共享路径,看看是否能访问:\\192.168.70.182\home\ken
直接显示没有访问权限的错误,如下图所示:
上述错误解决办法:在注册表该路径下:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default
加入以下两个QWORD键值:AnonymousGid和AnonymousUid,值为0即可
如下图所示:
或者在powershell(以管理员方式运行)中执行以下命令也可:
# 设置注册表路径
$regPath = "HKLM:\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default"# 确保该路径存在,如果不存在则创建
if (-not (Test-Path $regPath)) {New-Item -Path $regPath -Force
}# 创建 AnonymousGid 和 AnonymousUid 注册表项并赋值为 0
New-ItemProperty -Path $regPath -Name "AnonymousGid" -Value 0 -PropertyType QWord -Force
New-ItemProperty -Path $regPath -Name "AnonymousUid" -Value 0 -PropertyType QWord -Force
记得重新电脑。
现在可以正常浏览和创建文件了:
也可以通过以下命令挂载到映射驱动器Z:
mount 192.168.70.182:/home/ken Z:
卸载映射驱动器命令为
umount z:
查看共享目录挂载信息命令为
mount
linux(ubuntu)方式
安装NFS客户端
sudo apt update
sudo apt install nfs-common
挂载NFS共享
记得要替换一下服务器ip
(为什么不需要任何用户认证方面的信息,因为前面创建共享目录时设置了允许任何客户端读写)
sudo mount 192.168.70.182:/home/ken /mnt
测试文件浏览与创建
cd /mnt
ls -lah
nano new_file.txt
备注
上面的配置在安全性方面有所欠缺,如果在生产环境中使用NFS,要确认在该方面考虑周全。
关于如何设置用户认证等安全相关的配置,可参考网上其他文章。
常见问题
(1) 如果在配置共享目录时,即该行:/home/ken *(rw,sync,no_subtree_check,no_root_squash)
没有指定no_root_squash,那么在windows挂载时可能会出现能成功挂载目录,但无法浏览和创建文件的情况,如下图所示: