NFS服務配置總結
阿新 • • 發佈:2020-12-07
# NFS
[TOC]
## 介紹
NFS就是Network File System的縮寫,它最大的功能就是可以通過網路,讓不同的機器、不同的作業系統可以共享彼此的檔案。
NFS伺服器可以讓PC將網路中的NFS伺服器共享的目錄掛載到本地端的檔案系統中,而在本地端的系統中來看,那個遠端主機的目錄就好像是自己的一個磁碟分割槽一樣,在使用上相當便利;
NFS一般用來儲存共享視訊,圖片等靜態資料;NFS 協議預設是不加密的,它不像 Samba,它不提供使用者身份鑑別。服務端通過限定客戶端的 IP 地址和埠來限制訪問。
## 原理
NFS在檔案傳送或資訊傳送的過過程中,依賴於RPC協議。RPC,遠端過程呼叫(Remote Procedure Call),是使客戶端能夠執行其他系統中程式的一種機制。NFS本身是沒有提供資訊傳輸的協議和功能的,但NFS卻能讓我們通過網路進行資料的分享,就是因為NFS使用了RPC提供的傳輸協議,可以說NFS就是使用PRC的一個程式
![nfs](https://gitee.com/owen2016/pic-hub/raw/master/pics/20201206224432.png)
1. 首先伺服器端啟動RPC服務,並開啟111埠
2. 伺服器端啟動NFS服務,並向RPC註冊埠資訊
3. 客戶端啟動RPC(portmap服務),向服務端的RPC(portmap)服務請求服務端的NFS埠
4. 服務端的RPC(portmap)服務反饋NFS埠資訊給客戶端。
5. 客戶端通過獲取的NFS埠來建立和服務端的NFS連線並進行資料的傳輸
**注意:** 在啟動NFS SERVER之前,首先要啟動RPC服務(即portmap服務,下同)否則NFS SERVER就無法向RPC服務區註冊,另外,如果RPC服務重新啟動,原來已經註冊好的NFS埠資料就會全部丟失。因此此時RPC服務管理的NFS程式也要重新啟動以重新向RPC註冊。
特別注意:一般修改NFS配置文件後,是不需要重啟NFS的,直接在命令執行systemctl reload nfs或exportfs –rv即可使修改的/etc/exports生效
## 適用場景
- NFS 最好是部署在區域網 ,不要在公網上 ;
- 適合在中小型企業使用;大型網站不會用 NFS 的, 用的都是 分散式儲存
## 安裝
### NFS服務端
安裝nfs-kernel-server:
`$ sudo apt install nfs-kernel-server`
### NFS客戶端
安裝 nfs-common:
`$ sudo apt install nfs-common`
## 配置
### 服務端配置
1. 建立共享目錄
`sudo mkdir -p /var/nfs/sharedir`
2. 配置 /etc/exports (NFS掛載目錄及許可權由/etc/exports檔案定義)
``` shell
格式: 共享目錄的路徑 允許訪問的NFS客戶端(共享許可權引數)
引數:
- ro 只讀
- rw 讀寫
- root_squash 當NFS客戶端以root管理員訪問時,對映為NFS伺服器的匿名使用者
- no_root_squash 當NFS客戶端以root管理員訪問時,對映為NFS伺服器的root管理員
- all_squash 無論NFS客戶端使用什麼賬戶訪問,均對映為NFS伺服器的匿名使用者
- sync 同時將資料寫入到記憶體與硬碟中,保證不丟失資料
- async 優先將資料儲存到記憶體,然後再寫入硬碟;這樣效率更高,但可能會丟失資料
請注意,NFS客戶端地址與許可權之間沒有空格
```
- 比如要將`/var/nfs/sharedir`目錄共享, 則在該檔案末尾新增下列語句:
/home/lin/NFSshare 192.168.66.*(rw,sync,no_root_squash)
`/var/nfs/sharedir *(rw,sync,no_root_squash,no_subtree_check)`
- 要限制客戶端IP, 新增下列語句:
`/var/nfs/sharedir 122.111.222.111(rw,sync,no_subtree_check)`
- 共享目錄為/public , 允許訪問的客戶端為192.168.245.0/24網路使用者,許可權為只讀
`/public 192.168.245.0/24(ro)`
3. 重新載入 nfs-kernel-server 配置:
`$ sudo systemctl reload nfs-kernel-server`
### 客戶端配置
1. 使用`showmount` 命令檢視nfs伺服器共享資訊。
輸出格式為“共享的目錄名稱 允許使用客戶端地址”。
showmount命令引數:
- -a :顯示目前主機與客戶端的 NFS 聯機分享的狀態;
- -e :顯示/etc/exports 所分享的目錄資料。
``` shell
user@k8s-node-01:~$ showmount -e 192.168.249.5
Export list for 192.168.249.5:
/var/nfs/sharedir *
```
2. 在客戶端建立目錄,並掛載共享目錄
`$ sudo mkdir -p /mnt/nfs_sharedir`
3. 掛載遠端共享目錄:
`$ sudo mount your_nfs_server_ip:/var/nfs/sharedir /mnt/nfs_sharedir`
e.g. `sudo mount 192.168.249.5:/var/nfs/sharedir /mnt/nfs_sharedir`
- 編輯fstab檔案, 使系統每次啟動時都能自動掛載
`$ sudo vim /etc/fstab`
新增如下:
`your_nfs_server_Ip:/var/nfs/sharedir /mnt/nfs_sharedir nfs defaults 0 0`
4. 檢查客戶端掛載狀態
![df](https://gitee.com/owen2016/pic-hub/raw/master/pics/20201206224528.png)
5. 解除安裝遠端掛載
`$ sudo umount /mnt/nfs_sh