NFS介绍
NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。详细介绍Linux NFS Overview, FAQ and HOWTO Documents。
NFS分服务器和客户机,当使用远端文件时只要用mount命令就可把远端NFS服务器上的文件系统挂载在本地文件系统之下,操作远程文件与操作本地文件没有不同。NFS服务器所共享文件或目录记录在/etc/exports文件中。
嵌入式Linux开发中,会经常使用NFS,目标系统通常作为NFS客户机使用,Linux主机作为NFS服务器。在目标系统上通过NFS,将服务器的NFS共享目录挂载到本地,可以直接运行服务器上的文件。在调试系统驱动模块以及应用程序,NFS都是十分必要的,并且Linux还支持NFS根文件系统,能直接从远程NFS root启动系统,这对嵌入式Linux根文件系统裁剪和集成也是十分有必要的。
安装nfs服务器端和客户端
服务器端:sudo apt-get install portmap nfs-kernel-server
客户机端:sudo apt-get install portmap nfs-common
配置共享文件
编辑/etc/exports,在其中增加要共享的目录
sudo gedit /etc/exports
配置
/ubuntu *(rw,sync,no_root_squash,no_subtree_check)
或者/ubuntu 192.168.0.64/24(rw,sync,no_root_squash,no_subtree_check)
/ubuntu是要共享的目录,*代表允许所有的网络段访问,rw是可读写权限,sync是资料同步写入内存和硬盘,no_root_squash是NFS客户端分享目录使用者的权限,如果客户端使用的是root用户,那么对于该共享目录而言,该客户端就具有root权限
保存。
sudo exportfs -ra(它可以重新扫描/etc/exports,使用户修改/etc/exports配置文件不必重启NFS服务 )
下面是参数的详细说明:参考http://www.cnblogs.com/Charles-Zhang-Blog/archive/2013/02/05/2892879.html
参数 | 说明 |
---|---|
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 |
重启服务
sudo /etc/init.d/portmap restart
sudo /etc/init.d/nfs-kernel-server restart
服务器安装完之后测试。
Export list for abc-desktop:
/ubuntu *
客户机挂载。
- 创建客户机需要挂载的目录(客户机设置的挂载目录必须已经存在)
sudo mkdir /mnt/share
sudo chmod 777 /mnt/share/ - 挂载客户机目录
sudo mount 192.168.0.58:/ubuntu /mnt/share
出现问题
服务器权限错误
reason given by server: Permission denied
解决:
服务器端启动一定要sudo启动,不然启动失败,服务拒绝连接拒绝
svc: failed to register lockdv1 RPC service (errno 111).
lockd_up: makesock failed, error=-111
mount: mounting 192.168.1.101:/home/share on /mnt/hosts failed: Connection refused
解决:
加上参数-t nfs -o nolock
mount -t nfs -o nolock 192.168.1.101:/home/share /mnt/hosts设备或资源忙
mount: mounting 192.168.1.101:/home/share on /mnt/hosts failed: Device or resource busy
解决:
mount上之后在进行mount命令会出现此提示,设备正在运行,不用再次mount,如果想再次mount可以先umount /mnt/hostsMAC系统挂载
mount_nfs -P 192.168.2.104:/home/sun/rootnfs /Users/sunchunlei/nfsroot