昨天想挂载SATA硬盘时,看了一下我的开发板的硬盘,只剩下1.2G了,所以就想起挂载nfs网络文件系统,这样就不会出现硬盘空间不足了。
网络文件系统,常被称为NFS(Network File System),它是一种非常便 捷的在服务器与客户端通过网络共享文件的方式,具体见下图。
开启了NFS服务后,客户端访问服务器共享的文件时如同访问本 地存储器(磁盘/SD卡/NAND FLASH等)上的文件一样,对于上层应用来说没有 任何差别,在嵌入式开发时,我们常常利用这个特性在主机上共享文件,主要应用场景如下:
我们常常通过NFS给开发板共享开发主机编写的应 用程序,在本节内容将介绍如何在开发板和开发主机之间共享目录。我们要构 建的使用NFS文件系统的实验环境架构如下图所示。
在这样的环境中,开发板与开发主机接入到同一个局域网中,然后开发主机 提供NFS服务,开发板通过NFS与开发主机连接共享文件。开发主机生成的目标板应 用程序放在NFS的共享文件夹内,开发板访问该文件夹执行应用程序进行测试。
如何利用NFS搭建NFS环境。主要包含连接网络、主机开启NFS服务 以及开发板挂载文件系统三个步骤。
在虚拟机上创建共享目录:/home/developer/linux/nfs
开发板的挂载目录:/mnt
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)
修改完/etc/exports文件并保存后,可使用exportfs命令更新配置:
#以下命令在主机上运行
sudo exportfs -arv
该命令的参数说明如下:
若配置正常,该命令执行后会列出共享的目录项,本示例的执行结果见下图。
使用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 *
使用mount命令挂载NFS服务器的共享目录到开发板/mnt目录下:
注意:需要把下面的192.168.3.186设置为用户实际网络环境下的NFS服务器IP
#以下命令在开发板上运行
/mntmyd-y6ull14x14:~# sudo mount -t nfs 192.168.3.186:/home/developer/linux/nfs
以上命令使用的各个参数如下:
若挂载成功,终端不会有输出,Linux的哲学思想是“没有消息便是好消息
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操作。
最后感谢野火、原子哥的网站提供详细的教程。
更多回帖