NFS介紹:
NFS就是Network File System的縮寫,是由Sun公司發展出來的。其目的是讓linux 機器之間彼此分享文檔。NFS可以讓服務器端共享的目錄掛載到本地客戶機上,對于本地客戶機器來說,遠程服務器上的目錄就好像自己的一部分。
在基于Linux的嵌入式系統開發過程中,我們經常用到NFS文件系統,我們將嵌入式設備的文件系統放到NFS服務器上(經常是一臺Linux主機)。這樣,開發板就可以執行NFS服務器特定目錄的可執行程序。這樣做的優點在于:不用將程序寫入開發板的Flash,不僅減少了Flash的燒寫次數,同時也方便程序的運行調試。
NFS服務搭建:
以下以Ubuntu系統為例安裝配置NFS服務。
1. 安裝NFS服務
sudo apt-get install nfs-kernel-server
2. 編輯NFS配置文件:
配置NFS主要涉及配置文件/etc/exports,它用于NFS服務器端,其中列出了NFS服務器中要導出的目錄,可以訪問這些目錄的NFS客戶機及其訪問權限。
/etc/exports文件的格式如下:
dir_to_export NFS_client (permissions) [NFS_client (permissions)…]
1) dir_to_export是要導出的文件系統或目錄名稱,也就是要共享給客戶端使用的目錄。該目錄必須是一個絕對路徑。
2) NFS_client是可以訪問該NFS服務器的客戶機名稱。客戶機的指定非常靈活,可以是單個主機的IP地址或域名,也可以是某個子網或域中主機等。格式中的輸出目錄和客戶端之間,客戶端與客戶端之間都使用空格分隔,但是客戶端和權限參數之間不能有空格。
3) Permissions是NFS客戶機訪問導出目錄的訪問權限,如ro(只讀)或rw(讀寫)。若權限參數不止一個時,則以逗號分隔。具體請參考最后的詳細說明。
例如:
/foo 192.168.2.0/24(ro) localhost(rw) *(ro,sync)
3. 重啟服務:
sudo /etc/init.d/nfs-kernel-server restart
4. 掛載
mount -t nfs 192.168.2.2:/foo /mnt -o nolock
參數詳細說明:
1. 客戶端常用的指定方式 :
客戶端說明
192.168.2.2指定IP地址的主機
192.168.2.0/24(或192.168.2.*)指定子網中的所有主機
www.whjlh.cn/xuexi/指定域名的主機
*. hqyj.com指定域中的所有主機
*(或缺省)所有主機
2. 選項用來設置輸出目錄的訪問權限,用戶映射等,在/etc/exports文件中選項比較多,一般可以分成三類。
用于控制輸出目錄訪問權限的選項:
訪問權限選項說明
ro設置輸出目錄只讀
rw設置輸出目錄可讀寫
用戶映射選項:
映射選項說明
all_squash不論登入 NFS 的使用者身份為何,他的身份都會被壓縮成為匿名使用者,通常也就是nobody
no_all_squash不將遠程訪問的所有普通用戶及所屬用戶組都映射為匿名用戶或用戶組(默認設置)
root_squash將root用戶及所屬用戶組都映射為匿名用戶或用戶組(默認設置)
no_root_squash不將root用戶及所屬用戶組都映射為匿名用戶或用戶組
anonuid=xxx將遠程訪問的所有用戶都映射為匿名用戶,并指定該匿名用戶賬戶為本地用戶賬戶(UID=xxx)
anongid=xxx將遠程訪問的所有用戶組都映射為匿名用戶組賬戶,并指定該匿名用戶組賬戶為本地用戶組賬戶(GID=xxx)
其他常用選項:
其他選項說明
secure限制客戶端只能從小于1024的TCP/IP端口連接NFS服務器(默認設置)
insecure允許客戶端從大于1024的TCP/IP端口連接NFS服務器
sync將數據同步寫入內存緩沖區與磁盤中,雖然這樣做效率較低,但可以保證數據的一致性
async將數據先保存在內存緩沖區中,必要時才寫入磁盤
wdelay檢查是否有相關的寫操作,如果有則將這些寫操作一起執行,這樣可提高效率(默認設置)
no_wdelay若有寫操作則立即執行,應與sync配合使用
subtree_check若輸出目錄是一個子目錄,則NFS服務器將檢查其父目錄的權限(默認設置)
no_subtree_check即使輸出目錄是一個子目錄,NFS服務器也不檢查其父目錄的權限,這樣做可提高效率