文章目录
NFS 概要
网络文件系统,常被称为 NFS(Network File System),它是一种非常便 捷的在服务器与客户端通过网络共享文件的方式,
开启了 NFS 服务后,客户端访问服务器共享的文件时如同访问本地存储器(磁盘/SD卡/NAND FLASH等)上的文件一样,对于上层应用来说没有任何差别,在嵌入式开发时,我们常常利用这个特性在主机上共享文件,主要应用场景如下:
- 在 NFS 服务器上编译应用软件,客户端(开发板)通过 NFS 访问并运行应用程序进行测试。
- 把 NFS 作为根文件系统来启动
ubuntu虚拟机配置
网络配置
NFS服务器程序安装在虚拟机中,虚拟机的网络配置改成 “桥接网卡” 模式,并配置虚拟机静态ip,保证虚拟机、主机、开发板三个设备在同一网段并能相互ping通,但是这种配置无法联网,本次配置网络ip如下:
- 开发板:192.168.1.230
- 主机: 192.168.1.105
- 虚拟机:192.168.1.10
创建共享目录
mkdir /mnt/nfs-shared
安装 NFS 服务
Ubuntu 系统默认没有安装 NFS 服务,需要使用如下命令安装 NFS 服务端软件:
sudo apt install nfs-kernel-server
查看用户 id
在配置 NFS 时需要使用到用户 uid 和组 gid,可使用 id 命令查看,在Ubuntu的终端输入如下命令:
id
使用 id 命令得到用户 id 和组 id在下面的配置文件中将会使用到。
配置 NFS
sudo vim /etc/exports
在 / etc/exports 文件末尾添加如下语句并保存,注意如下语句写到 / etc/exports 文件是在同一行。
/mnt/nfs-shared 192.168.1.230/24(rw,sync,all_squash,anonuid=1000,anongid=1000,no_subtree_check)
注意具体的配置需要根据自己的环境进行配置:
-
/mnt/nfs-shared :要共享的开发主机目录,注意使用空格与后面的配置隔开。
-
192.168.1.0/24:配置谁可以访问,其中的 / 24 是掩码,此处表示 24 个 1,即 11111111.11111111.11111111.00000000, 即掩码是 255.255.255.0。结合前面 192.168.1.0 表示此处配置 IP 为 192.168.1.* 的主机均可以访问该目录,即局域网上的所有主机。
-
若局域网是其它网段,请参考此处的配置,不能直接用星号表示,如欲配 置 192.168.0.* 的局域网下所有机器都可以访问,则配置为 192.168.0.0/24。
-
这个配置域也可以直接写可访问的主机名
-
rw: 表示客户机的权限,rw 表示可读写,具体的权限还受文件系统的 rwx 及用户身份影响。
-
sync:资料同步写入到内存与硬盘中。
-
anonuid=1000:将客户机上的用户映射成指定的本地用户 ID 的用户,此处 1000 是开 发主机 embedfire 用户的 uid,此处请根据具体的主机用户 uid 进行配置。
-
anongid=1000: 将客户机上的用户映射成属于指定的本地用户 组 ID,此处 998 是开发主机 embedfire 用户组 gid,此处请根据具体的主机用户组 gid 进行配置。
-
no_subtree_check:不检查子目录权限,默认配置。
本配置中的 anonuid 和 anongid 把客户机的用户映射成本地 uid/gid 为 1000 的用户,即开发 主机的 embedfire,那么当在开发板上使用与开发主机不同的用户访问 NFS 共享目录时,都会 具有 embedfire 的权限,方便互相访问。如开发板上的 root 用户创建文件,在开发主机上会被认为是 embe dfire 创建的;在开发主机上仅 embedfire 能读写的文件,在开发板上的 root 或其它用户也 能对该文件进行读写(被当成了 embedfire)。当然这并不是一种安全的访问设置方式,不过 这用在我们的开发中是非常方便的配置。
更新 exports 配置
修改完 / etc/exports 文件并保存后,可使用 exportfs 命令更新配置:
sudo exportfs -arv
该命令的参数说明如下:
-
-a:全部 mount 或 umount 文件 / etc/exports 中的内容。
-
-r:重新 mount 文件 / etc/exports 中的共享内容。
-
-u:umount 目录。
-
-v:在 exportfs 的时候,将详细的信息输出到屏幕上。
查看 NFS 共享情况
showmount -e
开发板配置
安装 NFS 客户端
开发主机开启 NFS 服务后,我们还需要在开发板安装 NFS 客户端,来让开发板使用 NFS 服务。
执行安装 NFS 客户端命令:
sudo apt install nfs-common -y
查看 NFS 服务器共享目录
在开发板上执行 “showmount -e +“NFS 服务器 IP”” 命令。注意在不同网络环境下,NFS 服务器 IP 可能不一样,以实际情况为准。
showmount -e 192.168.1.10
临时挂载 NFS 文件系统
mount -t nfs 192.168.1.10:/mnt/nfs-shared /mnt
以上命令使用的各个参数如下:(运行有错误 “mount.nfs: an incorrect mount option was specified
”)
-
-t nfs:指定挂载的文件系统格式为 nfs。
-
192.168.1.10:指定 NFS 服务器的 IP 地址。
-
/mnt/nfs-shared:指定 NFS 服务器的共享目录。
-
/mnt:本地挂载目录,即要把 NFS 服务器的共享目录映射到开发板的 / mnt 目录下。
需要修改为这样才可以正常的临时挂载:
mount -t nfs -o nolock,nfsvers=3 192.168.1.10:/mnt/nfs-shared /mnt
使用这种方式挂载目录只是临时的,开发板在重启后需要重新挂载该 NFS 目录才能访问。
取消挂载
当客户机在网络上无法找到 NFS 共享的目录时,如开发主机关机时,在 NFS 的客户机 的终端常常会输出一些提示,或在使用 ls 命令查看共享目录会导致长时间等待,这时可以对目录使用 umount 命令取消挂载,示例如下:
umount /mnt
使用该命令时以要取消挂载的目录作为参数即可,没有输出表示执行正常。如果 在当前挂载的目录进行 umount 操作,会提示 “device is busy”。建议取消挂 载时,先切换到家目录 “~”,在进行 umount 操作。