先简单介绍一下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是负责负责信息的传输。
sudo apt-get install nfs-kernel-server
安装完后, 一般会默认在/etc/目录下生成一个 exports文件,但我居然没有找到/etc/exports文件(已经提示安装成功,我是在树莓派4b上安装的ubuntu18.04server系统)
cd /etc
sudo touch exports // 记得修改文件权限,且只能修改本文件,/etc/下的文件不能随意修改,要不然麻烦很大
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)
重启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包
作用是修了配置后重载,不用重启服务。
sudo apt-get install nfs-common
sudo mount -t nfs 服务器IP:/home/nfs_dir /mnt
PS: 首先确保客户端和服务器端的IP在同一个网段下, 如果终端显示:
clnt_create: RPC: Program not registered
则需要在服务器端重启nfs服务。
参考资料:
NFS /etc/exports参数解释