nfs服务挂载问题及解决方法

先简单介绍一下NFS服务器是什么?

NFS server可以看作是一个FILE SERVER,它可以让你的PC通过网络将远端的NFS SERVER共享出来的档案MOUNT到自己的系统中,在CLIENT看来使用NFS的远端文件就象是在使用本地文件一样。

RPC(Remote Procedure Call)

NFS本身是没有提供信息传输的协议和功能的,但NFS却能让我们通过网络进行资料的分享,这是因为NFS使用了一些其它的传输协议。而这些传输协议用到这个RPC功能的。可以说NFS本身就是使用RPC的一个程序。或者说NFS也是一个RPC SERVER.所以只要用到NFS的地方都要启动RPC服务,不论是NFS SERVER或者NFS CLIENT。这样SERVER和CLIENT才能通过RPC来实现PROGRAM PORT的对应。可以这么理解RPC和NFS的关系:NFS是一个文件系统,而RPC是负责负责信息的传输。

服务器端

1.Debian/Ubuntu上默认是没有安装NFS服务器的,首先要安装NFS服务:

sudo apt-get install nfs-kernel-server  

安装完后, 一般会默认在/etc/目录下生成一个 exports文件,但我居然没有找到/etc/exports文件(已经提示安装成功,我是在树莓派4b上安装的ubuntu18.04server系统)

2. 确定安装成功后,如果找不到/etc/exports文件,没办法,只能自己手动创建一个exports文件

cd /etc
sudo touch exports    //  记得修改文件权限,且只能修改本文件,/etc/下的文件不能随意修改,要不然麻烦很大

3.修改配置文件

vim /etc/exports

添加一行:/home/nfs_dir *(rw,sync,no_root_squash,no_subtree_check) 

/home/nfs_dir :NFServer的根目录,既nfs客户端挂载目录
‘ * ’ :允许所有的网段访问,也可以使用具体的IP

rw :挂接此目录的客户端对该共享目录具有读写权限

sync :资料同步写入内存和硬盘

no_root_squash :root用户具有对根目录的完全管理访问权限。

no_subtree_check:不检查父目录的权限。

PS: 如果想挂载多个目录,方法一样
/home/nfs_dir_1 *(rw,sync,no_root_squash,no_subtree_check)
/home/nfs_dir_2 *(rw,sync,no_root_squash,no_subtree_check)

4. 重启nfs服务,并查看nfs状态

重启nfs服务

service nfs-kernel-server restart

如果没有重启成功,终端则会报错:Job for nfs-server.service canceled

查看nfs状态

service nfs-kernel-server status

终端显示:

Active:failed
exportfs:  /etc/exports syntax err...

我打开exports文件,没有发现语法错误啊,我开始怀疑是不是nfs安装不完整导致的,况且exports文件还是我自己手动创建的,于是我卸载nfs后重装安装,结果还是一样。我在网上找了一个多小时资料,没什么收获,我又仔细对比了我的exports文件内容和网上的exports文件内容。

我的exports文件内容:/home/nfs_dir *(rw, sync, no_root_squash, no_subtree_check) 
而网上的exports文件内容:/home/nfs_dir *(rw,sync,no_root_squash,no_subtree_check) 

仔细对比后发现, 内容上没什么区别,只有在格式上有点区别我括号中的每项都隔了一个空格,难道是这个原因。
于是我严格按照格式改完后,重启nfs服务,就ok了, nfs状态也是 active , 对于这个问题,我晕…

PS: 利用命令:

exportfs -arv 

可以不用重启nfs服务,配置文件就会生效
nfs服务不能随便重启,重启服务会对挂载了nfs的客户端有影响,
exportfs来自nfs-utils包
作用是修了配置后重载,不用重启服务。

客户端

1. 安装 nfs-common

sudo apt-get install nfs-common

2. 将服务器目录/home/nfs_dir挂载到到当前 /mnt 目录下

sudo mount -t nfs 服务器IP:/home/nfs_dir /mnt 

PS: 首先确保客户端和服务器端的IP在同一个网段下, 如果终端显示:

clnt_create: RPC: Program not registered

则需要在服务器端重启nfs服务。

参考资料:
NFS /etc/exports参数解释

你可能感兴趣的:(linux,网络通信)