配置 NFS 網路檔案系統
方法一:
1、進行 NFS 伺服器端與客戶端的安裝
[email protected]:/# sudo apt-get install nfs-kernel-server nfs-common rpcbind
提示是否需要繼續: Y
Do you want to continue [Y/n]? Y
安裝客戶端的作用是可以在本機進行 NFS 服務的測試。
2、配置 portmap
[email protected]:/# 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/