1.1 搭建NFS服務器
NFS(Network FileSystem,網絡文件系統)是由SUN公司發展,並於1984年推出的技術,用於在不同機器,不同操作系統之間通過網絡互相分享各自的文件。NFS設計之初就是為了在不同的系統間使用,所以它的通訊協議設計與主機及操作系統無關。
NFS分服務器和客戶機,當使用遠端文件時只要用mount命令就可把遠端NFS服務器上的文件系統掛載在本地文件系統之下,操作遠程文件與操作本地文件沒有不同。NFS服務器所共享文件或目錄記錄在/etc/exports文件中。
嵌入式Linux開發中,會經常使用NFS,目標系統通常作為NFS客戶機使用,Linux主機作為NFS服務器。在目標系統上通過NFS,將服務器的NFS共享目錄掛載到本地,可以直接運行服務器上的文件。在調試系統驅動模塊以及應用程序,NFS都是十分必要的,並且Linux還支持NFS根文件系統,能直接從遠程NFS root啟動系統,這對嵌入式Linux根文件系統裁剪和集成也是十分有必要的。
安裝nfs-kernel-server:
ky@ubuntu:~$ sudo apt-get install nfs-kernel-server
設置NFS-Server目錄。修改/etc/exports文件,在其中增加NFS服務器目錄。 一個NFS服務器可以共享多個NFS目錄,在/etc/exports文件中,每個目錄的設置獨占一行,編寫格式如下:
NFS共享目錄路徑 客戶機IP或者名稱(參數1,參數2,...,參數n)
說明:
q NFS共享目錄可以是主機的任何一個目錄,為了方便使用,最好將權限設置為777。
q 客戶機指的是可以訪問共享目錄的客戶機的IP或者主機名,可以是指定的IP或者主機名。如果使用IP,可以使用通配符。假如指定IP為192.168.1.x的客戶機可以訪問,可以寫成192.168.1.*,如果設置為*,則表示任何客戶機都可以訪問。
q 訪問參數可以是一個,也可以是多個,用逗號分開。可能的參數和說明如 REF _Ref286733518 \h 表 5.108D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003200380036003700330033003500310038000000 所列。
表 STYLEREF 1 \s 5. SEQ 表 \* ARABIC \s 1 1 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_squash |
root用戶具有根目錄的完全管理訪問權限 |
anonuid=xxx |
指定nfs服務器/etc/passwd文件中匿名用戶的UID |
anongid=xxx |
指定nfs服務器/etc/passwd文件中匿名用戶的GID |
假定NFS共享目錄是/home/ky/nfs,允許所有客戶機訪問,/etc/exports文件可寫為:
/home/ky/nfs *(rw,sync,no_subtree_check, no_root_squash)
啟動NFS服務器。啟動portmap(如果有必要)和nfs-kernel-server服務:
ky@ubuntu:~$ sudo service portmap start
ky@ubuntu:~$ sudo service nfs-kernel-server start
本地驗證NFS服務器。將NFS服務器目錄掛載到本機另外一個目錄下,可以看到掛載點目錄下可以看到NFS服務器目錄中的文件。
ky@ubuntu:~$ ls /home/ky/nfs/
aaaa
ky@ubuntu:~$ sudo mount -t nfs 127.0.0.1:/home/ky/nfs /mnt
ke@ubuntu:~$ ls /mnt
aaaa
ky@ubuntu:~$ sudo umount /mnt/
用開發板驗證NFS服務器是否可用。啟動開發板,進入系統,配置好開發板的IP地址后,用mount命令掛載NFS服務器的NFS目錄:
target# mount -t nfs 192.168.1.3:/home/ky/nfs /mnt -o nolock
target# ls /mnt
kingyee
target# umount /mnt/
掛載成功后,可以在開發板的/mnt目錄下看到NFS服務器上的文件。
說明,使用開發板與虛擬機安裝的客戶系統進行NFS掛載,需要將虛擬網卡設置為Bridged模式,並建議使用靜態IP地址。
如果在使用中需要增加新的NFS共享目錄,直接修改/etc/exports文件即可。修改該文件后,可以不用重啟NFS服務,用exportfs命令讀取/etc/exports文件,重新共享輸出。exportfs命令語法如下:
exportfs [-aruv]
選項說明:
-a:全部掛載(或卸載) /etc/exports的設置;
-r:重新掛載/etc/exports的設置;
-u:卸載某一個目錄;
-v:在輸出的時候,把共享目錄顯示出來。
如果NFS已經啟動,修改了/etc/exports文件,執行如下命令,新的設置即可生效:
ky@ubuntu:~$ exportfs -ra