NFS介绍:
NFS就是Network File System的缩写,是由Sun公司发展出来的。其目的是让linux 机器之间彼此分享文档。NFS可以让服务器端共享的目录挂载到本地客户机上,对于本地客户机器来说,远程服务器上的目录就好像自己的一部分。
在基于Linux的嵌入式系统开发过程中,我们经常用到NFS文件系统,我们将嵌入式设备的文件系统放到NFS服务器上(经常是一台Linux主机)。这样,开发板就可以执行NFS服务器特定目录的可执行程序。这样做的优点在于:不用将程序写入开发板的Flash,不仅减少了Flash的烧写次数,同时也方便程序的运行调试。
NFS服务搭建:
以下以Ubuntu系统为例安装配置NFS服务。
1. 安装NFS服务
sudo apt-get install nfs-kernel-server
2. 编辑NFS配置文件:
配置NFS主要涉及配置文件/etc/exports,它用于NFS服务器端,其中列出了NFS服务器中要导出的目录,可以访问这些目录的NFS客户机及其访问权限。
/etc/exports文件的格式如下:
dir_to_export NFS_client (permissions) [NFS_client (permissions)…]
1) dir_to_export是要导出的文件系统或目录名称,也就是要共享给客户端使用的目录。该目录必须是一个绝对路径。
2) NFS_client是可以访问该NFS服务器的客户机名称。客户机的指定非常灵活,可以是单个主机的IP地址或域名,也可以是某个子网或域中主机等。格式中的输出目录和客户端之间,客户端与客户端之间都使用空格分隔,但是客户端和权限参数之间不能有空格。
3) Permissions是NFS客户机访问导出目录的访问权限,如ro(只读)或rw(读写)。若权限参数不止一个时,则以逗号分隔。具体请参考最后的详细说明。
例如:
/foo 192.168.2.0/24(ro) localhost(rw) *(ro,sync)
3. 重启服务:
sudo /etc/init.d/nfs-kernel-server restart
4. 挂载
mount -t nfs 192.168.2.2:/foo /mnt -o nolock
参数详细说明:
1. 客户端常用的指定方式 :
客户端说明
192.168.2.2指定IP地址的主机
192.168.2.0/24(或192.168.2.*)指定子网中的所有主机
www.hqyj.com/xuexi/指定域名的主机
*. hqyj.com指定域中的所有主机
*(或缺省)所有主机
2. 选项用来设置输出目录的访问权限,用户映射等,在/etc/exports文件中选项比较多,一般可以分成三类。
用于控制输出目录访问权限的选项:
访问权限选项说明
ro设置输出目录只读
rw设置输出目录可读写
用户映射选项:
映射选项说明
all_squash不论登入 NFS 的使用者身份为何,他的身份都会被压缩成为匿名使用者,通常也就是nobody
no_all_squash不将远程访问的所有普通用户及所属用户组都映射为匿名用户或用户组(默认设置)
root_squash将root用户及所属用户组都映射为匿名用户或用户组(默认设置)
no_root_squash不将root用户及所属用户组都映射为匿名用户或用户组
anonuid=xxx将远程访问的所有用户都映射为匿名用户,并指定该匿名用户账户为本地用户账户(UID=xxx)
anongid=xxx将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx)
其他常用选项:
其他选项说明
secure限制客户端只能从小于1024的TCP/IP端口连接NFS服务器(默认设置)
insecure允许客户端从大于1024的TCP/IP端口连接NFS服务器
sync将数据同步写入内存缓冲区与磁盘中,虽然这样做效率较低,但可以保证数据的一致性
async将数据先保存在内存缓冲区中,必要时才写入磁盘
wdelay检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可提高效率(默认设置)
no_wdelay若有写操作则立即执行,应与sync配合使用
subtree_check若输出目录是一个子目录,则NFS服务器将检查其父目录的权限(默认设置)
no_subtree_check即使输出目录是一个子目录,NFS服务器也不检查其父目录的权限,这样做可提高效率