Ubuntu 12.04 LTS 及ubuntu14.10 -- NFS安裝


在Linux 服務器上配置好NFS 根文件系統后,在單板側掛載NFS 文件系統,具體操作
如下:
ifconfig eth0 hw ether 00:10:85:18:01:84 /*配置MAC地址*/
ifconfig eth0 10.85.180.184 netmask 255.255.254.0 /*配置IP地址和子網掩碼*/
route add default gw 10.85.180.1 /*配置默認網關*/
mount -t nfs -o nolock 10.85.180.133:/home/c54122/glibc-nfs /mnt /*掛
載NFS目錄至JFFS2文件系統的mnt目錄下*/
 
參考文檔:
http://www.cnblogs.com/hicjiajia/archive/2012/07/09/2583683.html
http://www.54xue.com/w/96/n-34196.html
http://blog.csdn.net/michaelyue526/article/details/7668008
1.安裝NFS
     nfs原理是通過網絡,將遠程主機共享的文件系統,掛載到本機。Ubuntu 12.04上默認是沒有安裝NFS服務器的,首先要安裝NFS服務程序:
   #  sudo apt-get install nfs-kernel-server
(安裝nfs-kernel-server時,apt會自動安裝nfs-common和portmap) 這樣,宿主機就相當於NFS Server。

2   宿主機NFS的配置
   2.1  修改配置文件/etc/exports
          在終端下用 # vi  /etc/exports打開exports文件。
          如果你沒有配置過這個文件的話此文件應該是空的。
      在開始部分寫入 /opt/nfsroot * (rw,sync,no_root_squash)
      /opt/nfsroot/  -- 與客戶機共享的目錄;
     *        -- 表示允許任意用戶使用,也可以使用具體IP;
    (rw,sync,no_root_squash)  -- rw,掛載此目錄的客戶機對此目錄有讀寫權利;
    sync,……;
    no_root_squash,掛載此目錄的客戶機享有主機root的權利;
    我是將主機的根目錄設置為共享目錄  /  *(rw,sync,no_root_squash)
    OK,保存,退出。
    修改完成之后輸入:#  exportfs –rv來使配置文件生效
  2.3   啟動宿主機NFS服務
         安裝完NFS服務后就可以通過 #  /etc/init.d/nfs-kernel-server restart(/etc/init.d/nfs-kernel-server                start)來重新開啟網絡文件系統服務,以便后面的開發板掛載。也可以通過#  /etc/init.d/nfs-kernel-server          stop來停止。

3   目標板的掛載操作
      目標機上電,目標板上的Linux操作系統起來以后,在PC機上Ubuntu操作系統上打開minicom,通過串口向目       標板發送shell命令。
      像主機操作一樣,首先檢查目標板(宿主機)的IP是否與宿主機的IP再同一個地址段上,否則用上面用過的命令         進行檢查和設置本地IP。
     設置完IP之后可以ping一下檢查網卡、網線是否連接正確。
     既在minicom中輸入# ping 192.168.1.101 (宿主機IP地址)連接成功會不斷的打印信息。
     接下來就是在開發板上進行掛載mount
    # mount  -onolock 192.168.1.101:/opt/nfsroot    /mnt 
    其中:/opt/nfsroot 是 宿主機的共享目錄;  /mnt是開發板的掛載目錄

    如果你想取消掛在可以使用命令# umount  /mnt就可以了

其它nfs常用的參數有:

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_squas 
root用戶具有根目錄的完全管理訪問權限 
anonuid=xxx 
指定nfs服務器/etc/passwd文件中匿名用戶的UID 
anongid=xxx 
指定nfs服務器/etc/passwd文件中匿名用戶的GID

3、重啟服務 
$sudo /etc/init.d/portmap restart 
$sudo /etc/init.d/nfs-kernel-server restart

4、測試nfs 
此時可以運行以下命令來顯示一下共享出來的目錄: 
$showmount -e

關於NFS配置錯誤

 

ubuntu測試本機nfs出錯:mount.nfs:access denied by server while mounting...

相信出現這種錯誤的應該有一些人吧,沒關系,一會就幫你搞定。 
首先運行:sudo vim /etc/exports 
在其文本后添加 
/home/work 192.168.1.*(rw,sync,no_root_squash) 
然后保存退出。

注意,上面的主機IP可能不能使用*來通配,否則在客戶機上會出現訪問拒絕,但是如果我們要設置局域網訪問呢?怎么辦,使用子網掩碼例如:10.1.60.0/255.255.254.0即可讓10.1.60.*和10.1.61.*都可以訪問,還可以使用10.1.60/23這種方式類確定子網。

上面設置了只要在192.168.1.*這個網段的所有IP地址用戶都可以訪問共享目錄,但我只想讓一個IP地址訪問,比如 192.168.1.101(把剛才192.168.1.*直接換成192.168.1.101不行么?應該可以吧,沒試過),那么就可以這樣設置了。 
可以通過設定/etc/hosts.deny和/etc/hosts.allow文件來限制網絡服務的存取權限。 
***/etc/hosts.deny*** 
portmap:ALL 
lockd:ALL 
mountd:ALL 
rquotad:ALL 
statd:ALL 
***/etc/hosts.allow*** 
portmap:192.168.1.101 
lockd:192.168.1.101 
mountd:192.168.1.101 
rquotad:192.168.1.101 
statd:192.168.1.101 
同時使用這兩個文件就會使得只有ip為192.168.1.101的機器使用NFS服務。你的target 
board的ip地址設定為192.168.1.101,這樣就可以了。
 
 
啟用新的配置

  exportfs 指令主要的三個作用:

  1. exportfs -rv 重新讀取共享配置文件,馬上生效

  2. exportfs -auv 馬上停止所有本機上的NFS共享,並不改變 /etc/exports 文件的內容,只是當前停止共享

  3. exportfs -av 顯示所有當前機器上的NFS共享目錄信息

 

 

 

我的/etc/exports 文件:
# /etc/exports: the access control list for filesystems which may be exported
#        to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
#/home/yingc/work *(rw,async,no_root_squash)

/home/yingc/work/durian/solution/output *(rw,async,no_root_squash)
/home/yingc/work/durian1/solution/output *(rw,async,no_root_squash)
/home/yingc/work/durian/buildroot/package/netscript/sbin1 *(rw,async,no_root_squash)
#
 
開發板中自啟動腳本掛載文件:
############################################################                    
# mount host dir                                                                
############################################################                    
mount -t nfs -o rw,nolock,udp 192.168.110.10:/home/yingc/work/durian/solution/ob
                                                                                
mount -t nfs -o rw,nolock,udp 192.168.110.10:/home/yingc/work/durian/buildroot/t
     
 
ubuntu14.10的相關配置:
yingc@yingc:~$ sudo apt-get install portmap
正在讀取軟件包列表... 完成
正在分析軟件包的依賴關系樹       
正在讀取狀態信息... 完成       
注意,選取 rpcbind 而非 portmap

 

sudo apt-get install nfs-kernel-server
sudo vim /etc/exports

添加:
/opt/nfs  *(rw,sync,all_squash,no_subtree_check)
注意:使用上面這個,碰到了權限問題,開發板上不能創建文件等,
但是在pc的對應目錄上可以直接創建(不需要sudo權限)
此時可以使用:
/opt/nfs *(rw,async,no_root_squash)

再restart即可:
sudo /etc/init.d/nfs-kernel-server restart

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM