米尔电子
直播中

华仔stm32

3年用户 2953经验值
擅长:嵌入式技术
私信 关注
[技术]

【米尔王牌产品MYD-Y6ULX-V2开发板试用体验】挂载NFS网络文件系统

昨天想挂载SATA硬盘时,看了一下我的开发板的硬盘,只剩下1.2G了,所以就想起挂载nfs网络文件系统,这样就不会出现硬盘空间不足了。

网络文件系统,常被称为NFS(Network File System),它是一种非常便 捷的在服务器与客户端通过网络共享文件的方式,具体见下图。
image.png
开启了NFS服务后,客户端访问服务器共享的文件时如同访问本 地存储器(磁盘/SD卡/NAND FLASH等)上的文件一样,对于上层应用来说没有 任何差别,在嵌入式开发时,我们常常利用这个特性在主机上共享文件,主要应用场景如下:

  • 在NFS服务器上编译应用软件,客户端(开发板)通过NFS访问并运行应用程序进行测试。
  • 把NFS作为根文件系统来启动

我们常常通过NFS给开发板共享开发主机编写的应 用程序,在本节内容将介绍如何在开发板和开发主机之间共享目录。我们要构 建的使用NFS文件系统的实验环境架构如下图所示。

image.png

在这样的环境中,开发板与开发主机接入到同一个局域网中,然后开发主机 提供NFS服务,开发板通过NFS与开发主机连接共享文件。开发主机生成的目标板应 用程序放在NFS的共享文件夹内,开发板访问该文件夹执行应用程序进行测试。

搭建NFS环境

如何利用NFS搭建NFS环境。主要包含连接网络、主机开启NFS服务 以及开发板挂载文件系统三个步骤。
在虚拟机上创建共享目录:/home/developer/linux/nfs
开发板的挂载目录:/mnt

在开发主机开启NFS服务

Ubuntu系统默认没有安装NFS服务,需要使用如下命令安装NFS服务端软件:

#以下命令在主机上运行
sudo apt install nfs-kernel-server

安装NFS服务后,会新增一个/etc/exports文件(即/etc目录下名字为exports的文件),NFS服务根 据它的配置来运行,其默认内容可通过命令cat /etc/exports查看,它默认包含了一些配置 的范例,内容如所示。
在/etc/exports文件末尾添加如下语句并保存, 注意如下语句写到/etc/exports文件是在同一行 "/home/developer/linux/nfs"为主机共享目录的绝对地址
/home/developer/linux/nfs *(rw,sync,no_root_squash)
image.png
修改完/etc/exports文件并保存后,可使用exportfs命令更新配置:

#以下命令在主机上运行
sudo exportfs -arv

该命令的参数说明如下:

  • -a:全部mount或umount文件/etc/exports中的内容。
  • -r:重新mount文件/etc/exports中的共享内容。
  • -u:umount目录。
  • -v:在exportfs的时候,将详细的信息输出到屏幕上。

若配置正常,该命令执行后会列出共享的目录项,本示例的执行结果见下图。
image.png

使用showmount –e 可查看当前NFS服务器的加载情况,具体见下图。

#以下命令在主机上运行
developer@EASY-EAI-Develop:~/linux/nfs$ showmount -e
Export list for EASY-EAI-Develop:
/home/developer/linux/nfs *

开发板上的固件已经安装好了nfs客户端了。如果没有,则sudo apt install nfs-common -y就可以

在开发板上执行“showmount -e +“NFS服务器IP””命令。注意在不同网络环境下,NFS服务器IP可能不一样,以实际情况为准。

root@myd-y6ull14x14:~# showmount -e 192.168.3.186
Export list for 192.168.3.186:
/home/developer/linux/nfs *

临时挂载NFS文件系统

使用mount命令挂载NFS服务器的共享目录到开发板/mnt目录下:

注意:需要把下面的192.168.3.186设置为用户实际网络环境下的NFS服务器IP

#以下命令在开发板上运行

/mntmyd-y6ull14x14:~# sudo mount -t nfs 192.168.3.186:/home/developer/linux/nfs

以上命令使用的各个参数如下:

  • -t nfs:指定挂载的文件系统格式为nfs。
  • 192.168.3.186:指定NFS服务器的IP地址。
  • /home/embedfire/workdir:指定NFS服务器的共享目录。
  • /mnt:本地挂载目录,即要把NFS服务器的共享目录映射到开发板的/mnt目录下。

若挂载成功,终端不会有输出,Linux的哲学思想是“没有消息便是好消息

测试NFS共享目录

root@myd-y6ull14x14:~# cd /mnt
root@myd-y6ull14x14:/mnt# ls
root@myd-y6ull14x14:/mnt# sudo touch test.txt
root@myd-y6ull14x14:/mnt# ls
test.txt

在主机界面上看:

developer@EASY-EAI-Develop:~/linux/nfs$ ls
test.txt

说明nfs服务挂载成功。

取消挂载

当客户机在网络上无法找到NFS共享的目录时,如开发主机关机时,在NFS的客户机 的终端常常会输出一些提示,或在使用ls命令查看共享目录会导致长时间等待,这时可以对目录使用umount命令取消挂载,示例如下:

#以下命令在开发板上运行
sudo umount /mnt
```使用该命令时以要取消挂载的目录作为参数即可,没有输出表示执行正常。如果 在当前挂载的目录进行umount操作,会提示“device is busy”。建议取消挂 载时,先切换到家目录“~”,在进行umount操作。

最后感谢野火、原子哥的网站提供详细的教程。

更多回帖

发帖
×
20
完善资料,
赚取积分