NFS服务设置ARM板与Ubuntu共享文件夹
3519nfs挂载示例
linux端先下载nfs服务器
然后配置共享目录,使用命令:
sudo gedit /etc/exports
最后一行添加:
/home/lc/nfshare *(rw,sync,no_root_squash,no_subtree_check)
操作完毕后重启,并使用showmount -e 查看共享目录
在开发板端/mnt写了一个脚本文件nfs
挂载方法:
mount -t nfs -o nolock -o tcp 192.168.1.21:/home/lc/nfshare /nfsroot
mount -t nfs -o nolock -o tcp 192.168.1.21:/home/lc/nfshare /nfsroot
划线为Linux服务器的IP和挂载目录,加粗的为开发板挂载目录,中间有空格。
开机执行sh nfs 即可挂载成功,挂载文件夹nfsroot。
脚本nfs:
#!/bin/bash
#(#!/bin/bash)是指此脚本使用/bin/bash来解释执行,只能放在第一行
mount -t nfs -o nolock -o tcp 192.168.1.21:/home/lc/nfshare /nfsroot
1 NFS
NFS主要功能:通过网络,让不同机器系统之间可以彼此共享文件和目录。
主要实现方式:NFS客户端将服务器端的共享文件目录挂载到本地,然后访问服务器端的共享文件就跟访问自己的磁盘目录一样。
实现原理:NFS是通过网络来进行服务器和客户端之间的数据传输的,我们大家都知道,要想通过网络进行传输,必须得知道是通过哪一个端口进行传输的。
NFS服务器对于端口的选择是随机的,那么问题在于,服务器端随机选择的端口,客户端如何才能知道呢?
这就有了第三方的管理:
NFS服务器端,通过RPC(remote procedure call:远程过程调用)来实现,RPC统一管理NFS的端口。RPC统一对外端口是111,使用NFS的时候,必须先启动RPC,再启动NFS,这样NFS才能到RPC去注册端口信息,然后客户端向服务器的RPC请求服务器的NFS端口信息,这样就能够传输数据了
实现过程:
- 服务器端启动RPC服务,对外开放端口111
- 启动NFS服务,向RPC注册端口。
- 客户端启动RPC,向服务器端RPC请求服务器的NFS端口
- 服务器端RPC服务反馈NFS端口给客户端
- 客户端获取NFS端口,建立和服务器端的连接,进行数据传输!
2 环境要求
ARM板、主机、虚拟机(Ubuntu)之间能够相互ping通,实现过程中需要注意:
- 网线连接无误,防火墙已关闭;
- VMware虚拟机使用桥接模式,桥接的网卡选择为ARM板与主机相连的网卡;
- 三者IP地址在同一个网段;
- 实测部分网口转USB会造成ARM板与虚拟机无法ping通。
3 Ubuntu搭建NFS服务端
- NFS服务安装
sudo apt-get install nfs-kernel-server
- 选择NFS服务端文件夹
例如,选择/home/xin/work 目录作为NFS服务端目录。打开/etc/exports文件,配置NFS服务路径,在文档尾部添加
/home/xin/work *(rw,sync,no_root_squash,no_subtree_check)
- 启动NFS服务
sudo /etc/init.d/rpcbind restart #重启RPC服务 sudo /etc/init.d/nfs-kernel-server restart #重启NFS服务
4 ARM板挂载NFS服务端目录
新建一个nfs_mnt目录,执行
mount -t nfs -o nolock 192.168.0.200:/home/xin/work ./nfs_mnt/
#此处注意,执行mount -t nfs 192.168.0.200:/home/xin/work ./nfs_mnt/命令
#会报svc: failed to register lockdv1 RPC service (errno 111).错误
#据说是文件锁的问题(未深究)
挂载成功,进入目录创建文件可在服务端看到。