Ubuntu挂载nfs文件系统报错:mount.nfs: access denied by server while mounting 198.168.1.x:/mnt/nfs。

一、问题描述。

不能挂载Ubuntu下的文件夹,挂载时出现如下报错。

[ms@ubuntu 22:28:42 14# nfs]$ sudo mount -t nfs 198.168.1.x:/mnt/nfs /mnt/nfs
mount.nfs: access denied by server while mounting 198.168.1.x:/mnt/nfs
[ms@ubuntu 22:29:26 15# nfs]$

二、问题分析。

权限存在问题,NFS服务配置不合理。

三、解决方案。

1、确认Ubuntu下NFS服务已正确安装。

sudo apt-get install nfs-kernel-server -y

2、查看系统有无NFS功能。

cat /proc/filesystems
rpcinfo -p

3、重启NFS服务,确认能否成功,若不正常,可查看相应的出错信息。

sudo service nfs-kernel-server restart
tail /var/log/*

4、查看询NFS服务配置文件。

more /etc/exports

5、修改配置文件/etc/exports,在文件末尾添加如下。

/mnt    *(rw,sync,no_root_squash)

6、更新配置文件,exportfs -a表示更新所有。

sudo exportfs -rv

7、重启服务portmap服务。注:在新版本Ubuntu中,portmap被取消了,被rpcbind所代替,所以要把portmap换成rpcbind。在进行nfs-kernel-server安装时,依赖包rpcbind会自动安装。

sudo /etc/init.d/portmap restart

8、重启服务NFS服务。

sudo /etc/init.d/nfs-kernel-server restart
ms@ubuntu:/mnt$ sudo service nfs-kernel-server restart
 * Stopping NFS kernel daemon                                                                                                                          [ OK ]
 * Unexporting directories for NFS kernel daemon...                                                                                                    [ OK ]
 * Exporting directories for NFS kernel daemon...                                                                                                      [ OK ]
 * Starting NFS kernel daemon                                                                                                                          [ OK ]
ms@ubuntu:/mnt$

9、挂载测试。注意:若在挂载目标文件下进行的挂载,若不能显示文件,请切换到其它目录,再次进入即可。

sudo mount -t nfs 198.168.1.x:/mnt/nfs /mnt/nfs
sudo mount -t nfs -o nolock 198.168.1.x:/mnt/nfs/ /mnt/nfs/

10、查看挂载情况,两方案参考。

showmount
cat /proc/mounts

11、附录。

文件/etc/exports中的“/mnt    *(rw,sync,no_root_squash)”代表的意思如下:

/mnt:是要共享的目录;
*:代表允许所有的网络段访问;
rw:是可读写权限;
sync:是资料同步写入内存和硬盘;
no_root_squash:是 Ubuntu nfs 客户端分享目录使用者的权限,如果客户端使用的是root 用户,那么对于该共享目录而言,该客户端就具有 root 权限;

其它 Ubuntu nfs 常用的参数有:

ro:只读访问;
async :nfs 在写入数据前可以相应请求;
secure: nfs 通过以下的安全 TCP/IP 端口发送;
insecure: nfs 通过 1024 以上的端口发送;
wdelay:如果多个用户要写入 NFS 目录,则归组(默认);
no_wdelay:如果多个用户要写入 NFS 目录,则立即写入,当使用 async 时,无需此设置;
hide:在 nfs 共享目录中不共享妻子目录;
no_hide:共享 nfs 目录的子目录;
subtree_check:如果共享/usr/bin 之类的子目录时,强制 nfs 检查父目录的权限(默认);
no_subtree_check:和上面相对,不检查父目录权限;
all_squash:共享文件的 UID 和 GID 映射匿名用户 anonymous,适合公用目录;
no_all_squash:保留共享文件的 UID 和 GID(默认);
root_squash root:用户的所有请求映射成如 anonymous 用户一样的权限(默认);
no_root_squash root:用户具有根目录的完全管理访问权限;
anonuid=xxx:指定 nfs 服务器/etc/passwd 文件中匿名用户多的 UID;
anongid=xxx:指定 nfs 服务器/etc/passwd 文件中匿名用户的 GID;