参考:
1.百度百科–nfs
2.NFS exports参数说明
3.uboot 无法通过 nfs 启动 Ubuntu 18.04 内的根文件目录
什么是nfs?
NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
nfs的应用
在嵌入式中的应用:
在嵌入式交叉开发中,我们常常把“根文件”系统放在主机上,然后在开发板启动的时候通过nfs来挂载主机上的根文件系统。这样省去了每次都要把文件系统烧写到存储设备上的步骤,提高了开发效率。
在ubuntu系统中安装nfs内核服务:
sudo apt-get install nfs-kernel-server
在/etc/exports下配置nfs文件,添加目标系统的根文件系统映射目录,我这边的根文件系统是放在在/opt/rootfs目录下。
sudo vim /etc/exports
则在exports文件里添加内容:/opt/rootfs *(subtree_check,rw,no_root_squash,async)
保存后,重启nfs服务
sudo /etc/init.d/nfs-kernel-server restart
sudo exportfs -a
(最好每修改过/etc/exports 后需要执行一次)
查看nfs服务是否开启
showmount -e
出现/opt/rootfs *
信息表示挂载成功
这里需要注意的是,将文件系统挂载到嵌入式linux目标版时,由于这里使用的ubuntu版本是19的,ubuntu 17.10之后的nfs默认就只支持协议3和协议4,但是uboot默认启动的是协议2,要想让nfs支持协议2,就得在/etc/default/nfs-kernel-server添加RPCNFSDOPTS="--nfs-version 2,3,4 --debug --syslog"
,然后重新启动nfs服务。
具体步骤如下:
sudo vim /etc/default/nfs-kernel-server
然后在末尾添加:
测试:
挂载文件系统:/opt/rootfs
sudo mount 192.168.10.136:/opt/rootfs /mnt
查看mnt下是否可以看到rootfs中的内容。
nfs常用参数:
ro 只读访问
rw 读写访问
sync 所有数据在请求时写入共享
async NFS在写入数据前可以相应请求
secure NFS通过1024以下的安全TCP/IP端口发送
insecure NFS通过1024以上的端口发送
wdelay 如果多个用户要写入NFS目录,则归组写入(默认)
no_wdelay 如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。
hide 在NFS共享目录中不共享其子目录
no_hide 共享NFS目录的子目录
subtree_check 如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)
no_subtree_check 和上面相对,不检查父目录权限
all_squash 共享文件的UID和GID映射匿名用户anonymous,适合公用目录。
no_all_squash 保留共享文件的UID和GID(默认)
root_squash root用户的所有请求映射成如anonymous用户一样的权限(默认)
no_root_squash root用户具有根目录的完全管理访问权限
anonuid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的UID
anongid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的GID