NFS(Network File System)即網絡文件系統,是FreeBSD支持的文件系統中的一種,它允許網絡中的計算機之間通過TCP/IP網絡共享資源。在NFS的應用中,本地NFS的客戶端應用可以透明地讀寫位於遠端NFS服務器上的文件,就像訪問本地文件一樣。簡單的來說:它就是是可以透過網絡,讓不同的主機、不同的操作系統可以共享存儲。NFS在文件傳送或信息傳送過程中依賴於RPC協議。
nfs服務端配置
服務端機器IP為:10.122.149.224
1. 安裝nfs服務端
apt-get install nfs-common nfs-kernel-server
2. 配置共享目錄
a. 首先創建目錄/mnt/nfs,然后修改配置文件/etc/exports,如下:
vim /etc/exports
b. 增加如下內容:
/mnt/nfs *(rw,all_squash,anonuid=6561,anongid=1002,no_subtree_check)
c. 配置說明
-
訪問權限選項
設置輸出目錄只讀:ro
設置輸出目錄讀寫:rw
-
用戶映射選項
all_squash:將遠程訪問的所有普通用戶及所屬組都映射為匿名用戶或用戶組(nfsnobody);
no_all_squash:與all_squash取反(默認設置);
root_squash:將root用戶及所屬組都映射為匿名用戶或用戶組(默認設置);
no_root_squash:與rootsquash取反;
anonuid=xxx:將遠程訪問的所有用戶都映射為匿名用戶,並指定該用戶為本地用戶(UID=xxx);
anongid=xxx:將遠程訪問的所有用戶組都映射為匿名用戶組賬戶,並指定該匿名用戶組賬戶為本地用戶組賬戶(GID=xxx);
-
其它選項
secure:限制客戶端只能從小於1024的tcp/ip端口連接nfs服務器(默認設置);
insecure:允許客戶端從大於1024的tcp/ip端口連接服務器;
sync:將數據同步寫入內存緩沖區與磁盤中,效率低,但可以保證數據的一致性;
async:將數據先保存在內存緩沖區中,必要時才寫入磁盤;
wdelay:檢查是否有相關的寫操作,如果有則將這些寫操作一起執行,這樣可以提高效率(默認設置);
no_wdelay:若有寫操作則立即執行,應與sync配合使用;
subtree:若輸出目錄是一個子目錄,則nfs服務器將檢查其父目錄的權限(默認設置);
no_subtree:即使輸出目錄是一個子目錄,nfs服務器也不檢查其父目錄的權限,這樣可以提高效率;
3. 啟動nfs服務端
sudo /etc/init.d/nfs-kernel-server restart
nfs客戶端配置
因為上面服務端配置的時候指定了任意IP都可以進行nfs目錄掛載,所以此處無需考慮ip的問題了。
1. 安裝nfs客戶端
apt-get install nfs-common
2. 查詢掛載目錄
執行如下命令可查詢服務器里哪些目錄可掛載。
root@hzabj-mind204:~# showmount -e 10.122.149.224 Export list for 10.122.149.224: /mnt/nfs *
3. 掛載nfs目錄
方法一:本地創建一個目錄/data/nfs,然后將目錄掛載至nfs服務器的指定掛載點即可。掛載命令為:
mount -t nfs -onoexec,nosuid,nodev,noatime 10.122.149.224:/mnt/fns /data/nfs
方法二:本地創建一個目錄/data/nfs,在/etc/fstab文件中添加掛載命令為:
10.122.149.224:/mnt/nfs /data/nfs nfs nfsvers=3,proto=tcp,rsize=8192,wsize=8192,hard,intr 0 3
a. 掛載失敗原因分析
- 查看cat /var/log/messages | grep mount,如果出現illegal port 1689,則表示使用了大於1024的端口,修改服務端的/etc/exports,增加insecure選項后重啟nfs
- 查看客戶端掛載的目錄是否具備讀寫權限
b. 通過df查看掛載狀態,多了一行磁盤信息,如下表示本地/data/nfs掛載到10.122.149.224:/mnt/nfs
Filesystem 1K-blocks Used Available Use% Mounted on 10.122.149.224:/mnt/nfs 61926400 2108416 56673280 4% /data/nfs
4. 取消nfs掛載
a. 通過umount+本地nfs目錄即可
umount /data/nfs
b. 報錯: umount.nfs: /data/nfs: device is busy
root@hzabj-mind204:/data/nfs# fuser -m -v /data/nfs USER PID ACCESS COMMAND /data/nfs: root kernel mount /data/nfs root 43022 ..c.. bash mm 45004 ..c.. bash
如上所示,有兩個進程占用了,將其kill掉,再重新取消掛載。
kill -9 43022
kill -9 45004