Lession 10 嵌入式NFS文件系统的介绍与应用
嵌入式是宿主机 + 开发板的开发模式,两者之间的网络通讯与文件共享是进行高效率开发调试的前提条件。
NFS文件系统是嵌入式开发调试的快速高效手段,掌握与熟练使用是必备技能。
一、NFS简介
1、NFS:Network FileSystem
通过NFS挂载远程主机的目录,访问该目录就像访问本地目录一样
使用NFS服务能够方便地使各unix-like系统之间实现共享
Samba:在unix-like系统和windows系统之间共享
2、NFS模式:C/S模式,RPC服务框架
NFS Server <----------> NFS Client
NFS运行在SUN的RPC(Remote Procedure Call,远程过程调用)基础上,RPC定义了一种与系统无关的方法来实现进程间通信
- NFS服务与安装:
portmap服务
nfs-kernel-server服务
安装:# sudo apt-get install nfs-kernel-server
启动:# sudo /etc/init.d/nfs-kernel-server start
停止:# sudo /etc/init.d/nfs-kernel-server stop
状态:# sudo /etc/init.d/nfs-kernel-server status
重启:# sudo /etc/init.d/nfs-kernel-server restart
二、NFS使用配置
1. 配置文件: /etc/exports
对NFS服务的访问是由exports来批准,它枚举了若干有权访问NFS服务器上文件系统的主机名。
文件控制对目录的共享(NFS挂载目录及权限由该文件定义),书写规则是每个共享为一行)。
格式:[共享目录] [主机名或IP](参数,参数...)
第一个参数是要让客户机访问的目录,第二个是你允许的主机IP,最后的()内是访问控制方式。
2. NFS共享控制参数:man exports
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 要求检查请求访问的目录或者文件是否在共享目录下
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
3. 配置命令
exportfs
重新加载/etc/exports的共享目录,卸载NFS Server共享的目录或者重新共享
若更改了/etc/exports,运行以下命令进行更新:
$ sudo exportfs -r
showmount
用來查看NFS共享的目录资源, 查看NFS Server的export list:
$ sudo showmount -e
二、NFS开发板使用
1、宿主机防火墙:在挂载失败时返回来检查设置
一般需要关闭防火墙服务,确保没有屏蔽NFS使用的端口和允许通信的主机
2、NFS内核支持
Network FileSystem --> [] NFS Client
首先查看目标板kernel自身是否支持NFS
cat /proc/filesystems命令: 是否有NFS一行
3、NFS目录挂载
挂载格式: mount [Server IP]?[share dir] [local mount point]
# mount -t nfs -o nolock 192.168.10.11:/opt/FriendlyARM/mini2440/root_nfs /mnt/root_nfs
检查挂载:挂载失败会有错误原因打印
# df -h
取消挂载
# umount /mnt/root_nfs