一、检查nfs状态

#service nfs status

二、在主机创建nfs共享文件夹:

#mkdir /nfsroot
#cat /etc/exports
/nfsroot 192.168.1.118(rw.sync,no_root_squash)

这里创建了/nfsroot以用于nfs共享,并在/etc/exports文件中将共享属性IP设置为192.168.1.118(开发板的IP)的用户可读写,并且由no_root_squash指定信任客户端。

三、启动主机nfs服务

#service nfs start

四、在开发板mount主机共享文件

#mount 192.168.1.100:/nfsroot  /mnt/

无任何提示表示成功,可以操作/mnt目录,cp、mv文件等。

可能出现的错误提示:

# mount -t nfs 192.168.1.249:/appdata /mnt
portmap: server localhost not responding, timed out
RPC: failed to contact portmap (errno -5).
portmap: server localhost not responding, timed out
RPC: failed to contact portmap (errno -5).
lockd_up: makesock failed, error=-5
portmap: server localhost not responding, timed out
RPC: failed to contact portmap (errno -5).
mount: Mounting 192.168.1.249:/appdata on /mnt failed: Input/output error

可能原因:

nfs mount 默认选项包括文件锁,依赖于portmap提供的动态端口分配功能;

简单的解决方法:kill 文件锁(lockd)或者mount -o nolock ;

上面说的文件锁具体是什么原因,还没有找到更好的解决办法。

注意:主机防火墙有设置时,也可能导致目标板无法正常访问,建议最好设置为无防火墙。

改用:mount -o nolock 192.168.1.100:/nfsroot /mnt 可解决。

编辑/etc/exports文件,格式可以参考man exports,里面有详细的参数说明和示例。

如,要共享主机的/appdata目录给目标板,具有读写功能,一般都指定用户(root)来操作,否则默认会出现uid和gid都是-2的数字(可以通过anonuid和anongid来设置匿名操作的相关ID,或者用root_squash来设置root操作),最后写出的exports样子如下:

#cat /etc/exports
/appdata 192.168.1.*(rw,sync,no_root_squash)

以root执行exportfs –r,重新加载导出内容,若修改了文件exports,直接执行此命令即可;

启动portmap服务,service portmap start ;(为什么要这个?因为portmap定向RPC通信数据流,若不运行portmap,则NFS客户机无法找到从NFS服务器共享的目录。)

启动nfs服务,service nfs start;

注意:启动目标板并连通网络后,首先查看kernel自身是否支持nfs,

cat /proc/filesystems

查看其中是否有nfs一行,若没有则表示内核不支持nfs,就需要重新编译和烧内核;有则OK,接下来就可以直接mount操作。