NFS服务设置ARM板与Ubuntu共享文件夹

通过NFS服务使arm板与虚拟机共享文件夹

3519nfs挂载示例

linux端先下载nfs服务器

然后配置共享目录,使用命令:

  1. sudo gedit /etc/exports

最后一行添加:

  1. /home/lc/nfshare *(rw,sync,no_root_squash,no_subtree_check)

操作完毕后重启,并使用showmount -e 查看共享目录

在开发板端/mnt写了一个脚本文件nfs

挂载方法:

  1. 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:

  1. #!/bin/bash
  2. #(#!/bin/bash)是指此脚本使用/bin/bash来解释执行,只能放在第一行
  3. 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端口信息,这样就能够传输数据了

实现过程:

  1. 服务器端启动RPC服务,对外开放端口111
  2. 启动NFS服务,向RPC注册端口。
  3. 客户端启动RPC,向服务器端RPC请求服务器的NFS端口
  4. 服务器端RPC服务反馈NFS端口给客户端
  5. 客户端获取NFS端口,建立和服务器端的连接,进行数据传输!

2 环境要求

ARM板、主机、虚拟机(Ubuntu)之间能够相互ping通,实现过程中需要注意:

  1. 网线连接无误,防火墙已关闭;
  2. VMware虚拟机使用桥接模式,桥接的网卡选择为ARM板与主机相连的网卡;
  3. 三者IP地址在同一个网段;
  4. 实测部分网口转USB会造成ARM板与虚拟机无法ping通。

3 Ubuntu搭建NFS服务端

  • NFS服务安装
  1. sudo apt-get install nfs-kernel-server
  • 选择NFS服务端文件夹

例如,选择/home/xin/work 目录作为NFS服务端目录。打开/etc/exports文件,配置NFS服务路径,在文档尾部添加

  1. /home/xin/work *(rw,sync,no_root_squash,no_subtree_check)
  • 启动NFS服务
  1. sudo /etc/init.d/rpcbind restart #重启RPC服务 sudo /etc/init.d/nfs-kernel-server restart #重启NFS服务

4 ARM板挂载NFS服务端目录

新建一个nfs_mnt目录,执行

  1. mount -t nfs -o nolock 192.168.0.200:/home/xin/work ./nfs_mnt/
  2. #此处注意,执行mount -t nfs 192.168.0.200:/home/xin/work ./nfs_mnt/命令
  3. #会报svc: failed to register lockdv1 RPC service (errno 111).错误
  4. #据说是文件锁的问题(未深究)

挂载成功,进入目录创建文件可在服务端看到。