NFS服务的工作原理
第一步:首先服务器端启动RPC服务,并开启端口
第二步:服务器端启动NFS服务,并向RPC注册端口信息
第三步:客户端启动RPC,并向服务端的RPC服务请求服务端的NFS端口;
第四步:服务端的RPC服务反馈NFS端口信息给客户端
第五步:客户端通过获得的NFS端口来建立和服务端的NFS连接并进行数据的传输。
1. 安装NFS
sudo apt-get install nfs-kernel-server
2. 创建共享文件夹
在home目录创建,
sudo mkdir nfs
3. 配置NFS
exports只用在你安装了NFS才出现。主要配置文件/etc/exports之后,先启动rpcbind(若已经启动了,就不要重新启动),然后再启动nfs,NFS就成功了。具体配置参考https://www.cnblogs.com/me80/p/7464125.html
sudo gedit /etc/exports
在末尾处添加/home/nfs *(rw,sync,no_subtree_check,no_root_squash)
常用选项 描述
rw 允许读写
ro 只读
sync 同步写入
async 先写入缓冲区,必要时才写入磁盘,速度快,但会丢数据
subtree_check 若输出一个子目录,则nfs服务将检查其父目录权限
no_subtree_check 若输出一个字目录,不检查父目录,提高效率
no_root_squash 客户端以root登录时,赋予其本地root权限
oot_squash 客户端以root登录时,将其映射为匿名用户
all_squash 将所有用户映射为匿名用户
4. 启动NFS服务器
启动 portmap 和 nfs-kernel-server 服务:
sudo service portmap start
sudo service nfs-kernel-server start
注:如果开发板不能挂载到宿主机可以试下以下方式:
sudo exportfs –a
sudo /etc/init.d/portmap restart
sudo /etc/init.d/nfs-kernel-server restart
查看rpc、 nfs-kernel-server 状态:
systemctl status rpcbind
systemctl status nfs-kernel-server
5. 客户端配置
下载:
sudo apt-get install nfs-kernel-server
启动:
sudo service nfs-kernel-server start
exportfs -v //查看详细的nfs信息
exportfs -r //重读配置文件
showmount -e //查看本机发布的NFS共享目录
showmount -e +IP //查看IP地址发布的NFS共享目录
mount -t nfs 192.168.48.6:/opt /mnt //将NFS服务端192.168.48.6下的/opt挂载到/mnt下
rpcinfo -p localhost //查看rpc注册的端口信息
5. 本地验证,是否能挂载
查看nmt文件夹内容;
在home/nfs/创建文件a.txt文件,
之后执行:sudo mount localhost:/home/nfs /mnt
我的报错了:
原因是我的linux版本和内核参数问题。因为同一个软件在不同版本、内核有差异。我的RPC是rcpbind,并不是步骤4中的portmap;具体可以在/etc/init.d/中查看。
所以重新执行步骤4:
启动RPC、启动NFS服务器
sudo service rpcbind start
sudo service nfs-kernel-server start
挂载:
挂载结果:
查看端口
rpcinfo -p localhost