方法一:
1、进行 NFS 服务器端与客户端的安装
root@ubuntu:/# sudo apt-get install nfs-kernel-server nfs-common rpcbind
提示是否需要继续: Y
Do you want to continue [Y/n]? Y
安装客户端的作用是可以在本机进行 NFS 服务的测试。
2、配置 portmap
root@ubuntu:/# sudo dpkg-reconfigure rpcbind
运行后选择“No”
3、创建NFS共享目录
假设 NFS 共享目录是/home/nfs
$ sudo mkdir /home/nfs
4、配置 NFS
$ sudo vi /etc/exports
在/etc/exports 文件末尾加入下面一行:
/work/nfs *(rw,sync,no_subtree_check,no_root_squash)
允许所有用户访问 NFS 共享目录
5、启动 NFS 服务器
启动 portmap 和 nfs-kernel-server 服务:
sudo service portmap start;
sudo service nfs-kernel-server start
注:如果开发板不能挂载到宿主机可以试下以下方式:
sudo exportfs -a;
sudo /etc/init.d/portmap restart;
sudo /etc/init.d/nfs-kernel-server restart
6、本地验证 NFS
方法二:
一 安装NFS
$ sudo apt-get install nfs-kernel-server
$ sudo apt-get install nfs-common
二 配置NFS
1 $ sudo dpkg-reconfigure portmap , 对Should portmap be bound to the loopback address? 选N
2 $ sudo vi /etc/default/portmap 末行清除 "-i 127.0.0.1"
三 配置hosts.deny
$ sudo vi /etc/hosts.deny
文本末添加
### NFS DAEMONS
portmap: ALL
lockd: ALL
mountd: ALL
rquotad: ALL
statd: ALL
四 配置hosts.allow
$ sudo vi /etc/hosts.allow
文本末加入
### NFS DAEMONS
portmap: 192.168.1.
lockd: 192.168.1.
rquotad: 192.168.1.
mountd: 192.168.1.
statd: 192.168.1.
$ sudo /etc/init.d/portmap restart 重启portmap daemon.
显示如下
Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the restart(8) utility, e.g. restart portmap
portmap start/running, process XXXX
五 配置/etc/exports
$ sudo vi /etc/exports
文本末添加
/home/work *(rw,sync,no_root_squash)
chmod 777 -R /home/work
$ sudo showmount -e
显示 clnt-create : RPC : Program not registered
$ sudo exportfs -r 更新
$ sudo showmount 192.168.2.108 -e
显示
Export list for 192.168.2.66:
/home/work *
六 启用
$ sudo /etc/init.d/nfs-kernel-server restart 重启nfs服务
显示如下
* Stopping NFS kernel daemon [ OK ]
* Unexporting directories for NFS kernel daemon... [ OK ]
* Exporting directories for NFS kernel daemon...
exportfs: /etc/exports [1]: Neither 'subtree_check' or 'no_subtree_check' specified for export "*:/home/work".
Assuming default behaviour ('no_subtree_check').
NOTE: this default has changed since nfs-utils version 1.0.x
* Starting NFS kernel daemon [ OK ]
挂载
mount -t nfs 192.168.2.108:/home/work /mnt
mount -t nfs 192.168.2.66:/home/work /mnt -o nolock
内核支持NFS分区(即编译时在File system中选中[*] Root file system on NFS),
以及支持内核IP_PNP(即编译时在Networking中选中[*] IP: kernel level autoconfiguration)
File systems --->
Network File Systems --->
<*> NFS file system support ## 必选
[*] Provide NFSv3 client support ## 可选
[*] Root file system on NFS ## 必选
Networking --->
[*] Networking support
Networking options --->
[*] IP: kernel level autoconfiguration ## 必选
需要打开IP:Kernel level autoconfiguration 以及下面所有的选项包括DHCP, BOOTP, RARP,而且NFS Client Support不能是模块,必须编译进内核
错误一:Cannot register service: RPC
service nfs restart
Shutting down NFS mountd: [ OK ]
Shutting down NFS daemon: [ OK ]
Shutting down NFS quotas: [ OK ]
Shutting down NFS services: [ OK ]
Starting NFS services: [ OK ]
Starting NFS quotas: Cannot register service: RPC: Unable to receive; errno = Connection refused
rpc.rquotad: unable to register (RQUOTAPROG, RQUOTAVERS, udp).
[FAILED]
#解决方法:
service portmap start
#先启动portmap才行
错误二:Address already in use
tail -f /var/log/message
Apr :: bogon nfsd[]: nfssvc: Setting version failed: errno (Device or resource busy)
Apr :: bogon nfsd[]: nfssvc: unable to bind UPD socket: errno (Address already in use)
Apr :: bogon nfsd[]: nfssvc: Setting version failed: errno (Device or resource busy)
Apr :: bogon nfsd[]: nfssvc: unable to bind UPD socket: errno (Address already in use)
Apr :: bogon nfsd[]: nfssvc: Setting version failed: errno (Device or resource busy)
#解决方法:
ps aux | grep nfs
#然后用kill干掉这些进程
错误三:mount: …:/nfsdata failed, reason given by server: Permission denied
#解决方法:
a.把该客户端的ip加入服务端的/etc/exports
b.服务端的和客户端规则要统一,要么都使用主机名(注意每台机器的hosts文件),要么都使用IP
错误四:客户端挂载超时
tail -f /var/log/message
Apr :: localhost kernel: portmap: server localhost not responding, timed out
Apr :: localhost kernel: RPC: failed to contact portmap (errno -).
Apr :: localhost kernel: RPC: failed to contact portmap (errno -).
Apr :: localhost kernel: lockd_up: makesock failed, error=-
Apr :: localhost kernel: RPC: failed to contact portmap (errno -).
#解决方法:
service portmap restart
service nfs restart
错误五:Error: RPC MTAB does not exist.
service nfs start
Starting NFS services: [ OK ]
Starting NFS quotas: [ OK ]
Starting NFS daemon: [ OK ]
Starting NFS mountd: [ OK ]
Starting RPC idmapd: Error: RPC MTAB does not exist.
#解决方法:
#手动执行
mount -t rpc_pipefs sunrpc /var/lib/nfs/rpc_pipefs/
#需要时加入开机启动时,加入下面两行到/etc/fstab
rpc_pipefs /var/lib/nfs/rpc_pipefs rpc_pipefs defaults
nfsd /proc/fs/nfsd nfsd defaults
错误六:Loading: *** ERROR: Cannot mount
使用NFS下载内核的时候出现该错误 在Linux下是可以mount的 查看下载的目录是否有权限
在主机的/etc/hosts文件中增加一行名称解析內容:
目标板IP 根文件系统文件名
比如:我的/etc/hosts增加后变为:
127.0.0.1 localhost
127.0.1.1 ccc
#增加下面这句:开发板IP, nfs共享文件夹 192.168.0.111 /nfsboot/