网络文件系统(NFS,Network File System)是一种将远程主机上的分区(目录)经网络挂载到本地系统的一种机制,通过对网络文件系统的支持,用户可以在本地系统上像操作本地分区一样来对远程主机的共享分区(目录)进行操作。
在嵌入式Linux 的开发过程中,开发者需要在Linux 服务器上进行所有的软件开发,交叉编译后,通用FTP 方式将可执行文件下载到嵌入式系统运行,但这种方式不但效率低下,且无法实现在线的调试.因此,可以通过建立NFS,把Linux 服务器上的特定分区共享到待调试的嵌入式目标系统上,就可以直接在嵌入式目标系统上操作Linux 服务器,同时可以在线对程序进行调试和修改,大大的方便了软件的开发.因此,NFS 的是嵌入式Linux 开发的一个重要的组成部分,本部分内容将详细说明如何配置嵌入式Linux 的NFS 开发环境。
嵌入式Linux 的NFS 开发环境的实现包括两个方面:一是Linux 服务器端的NFS 服务器支持;二是嵌入式目标系统的NFS 客户端的支持.因此,NFS 开发环境的建立需要配置Linux 服务器端和嵌入式目标系统端.
NFS是由Sun开发并发展起来的一项用于在不同机器,不同操作系统之间通过网络互相分享各自的文件.NFS server也可以看作是一个FILE SERVER,用于在UNIX类系统之间共享文件,可以轻松的挂载(mount)到一个目录上,操作起来就像本地文件一样的方便。
类型:System V-launched Service
软件包:nfs-utils
进程:nfsd,lockd,rpciod,rpc.{mounted,rquotad,statd}
脚本:nfs,nfslock
端口:由portmap服务指派端口(111)
配置文件:/etc/exports
辅助工具:portmap(必须)
相关命令:rpcinfo -p [IPADD]:查看服务器提供的rpc服务
showmount -e:查看服务共享的目录
Server端:
1./etc/exports格式:
目录 选项
例:共享/share目录给192.168.0.x的用户
/share 192.168.0.0/24 (rw)
/home/haiouc/haioucshare *(rw,sync,all_squash)
/mnt/cdrom 192.168.0.*(ro)
====> *指的是允许所有的ip访问;
对目录/home/haiouc/haioucshare 要给出一定的权限;
可以加载本地的光盘,然后用nfs共享给他人
2.启动portmap服务:
service portmap start[restart]
3.启动NFS服务:
service nfs start[restart]
Client端:
1.启动portmap服务:
service portmap start[restart]
2.挂载服务器端的共享目录(假设服务器端192.168.0.1):
mkdir /mnt/localshare
mount -t nfs 192.168.0.1:/share /mnt/localshare
=========================================================================
showmount //显示关于NFS服务器文件系统挂载的信息
showmount -e //显示NFS服务器的输出清单
=========================================================================
chkconfig --level 35 nfs on //设置NFS自动启动方式;
=========================================================================
通过修改/etc/fstab文件可以实现开机自动挂载nfs目录
[root@server6 nfs1]# cat /etc/fstab
# This file is edited by fstab-sync - see 'man fstab-sync' for details
LABEL=/ / ext3 defaults 1 1
none /dev/pts devpts gid=5,mode=620 0 0
none /dev/shm tmpfs defaults 0 0
none /proc proc defaults 0 0
none /sys sysfs defaults 0 0
LABEL=SWAP-hdc2 swap swap defaults 0 0
192.168.1.10:/home/haiouc/haioucshare /mnt/nfs1 nfs defaults 0 0
=========================================================================
NFS参数信息:
访问权限选项
. 设置输出目录只读 ro
. 设置输出目录读写 rw
用户映射选项
. all_squash 将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody);
. no_all_squash 与all_squash取反(默认设置);
. root_squash 将root用户及所属组都映射为匿名用户或用户组(默认设置);
. no_root_squash 与rootsquash取反;
. anonuid=xxx将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx);
. anongid=xxx 将远程访问的所有用户组都映射为匿名用 户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx);
其它选项
. secure 限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);
. insecure 允许客户端从大于1024的tcp/ip端口连接服务器;
. sync 将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
. async 将数据先保存在内存缓冲区中,必要时才写入磁盘;
. wdelay 检查是否有相关的写操作,如果有则将这些写操作 一起执行,这样可以提高效率(默认设置);
. no_wdelay 若有写操作则立即执行,应与sync配合使用;
. subtree 若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置);
. no_subtree即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;