系統環境:
NFS服務器操作系統: ubuntu18.04 server lts
NFS服務器IP: 192.168.1.164
注: NFS服務器 指的是 待安裝 NFS服務 的機器(物理機或者虛擬機)
步驟如下:
1. 先更新
sudo apt update
2. 安裝 NFS服務 (此時該服務已設置開機自啟動)
sudo apt install nfs-server
3.修改配置文件, 添加nfs-server上用於共享的目錄,並設置允許訪問該目錄的客戶機IP,及其讀寫權限.我這里為了配置簡單使用的是 【3.1】的方式
3.1 在NFS服務器上 創建根目錄 /nfsroot 用於共享 , 該目錄的讀寫權限 共享給所有連接到該服務器的 NFS客戶端
cd / sudo mkdir nfs-server sudo chmod +rw -R nfs-server echo "/nfsroot *(rw,sync,no_root_squash)">>/etc/exports
3.2 在NFS服務器上 創建 根目錄 /nfsdata/client1 用於共享, 該目錄的讀寫權限共享給客戶端 192.168.1.164 (該客戶端主要用來寫業務日志或者服務運行狀態日志等)
sudo mkdir /nfsdata sudo mkdir /nfsdata/www_logs sudo chmod +rw -R /nfsdata/www_logs echo "/nfsdata/www_logs 192.168.1.164(rw,sync,no_root_squash)">>/etc/exports
3.3 NFS服務器上的目錄 /nfsdata/www_logs 讀權限共享給客戶端 192.168.1.201 (該客戶端用來做日志分析, 異常校驗,服務崩潰日志查詢等)
echo "/nfsdata/www_logs 192.168.1.201(ro,sync,no_root_squash)">>/etc/exports
4. 重啟NFS服務
sudo service nfs-server restart
5. 至此 NFS 服務端搭建完畢.
6. NFS客戶端(這里和Server操作系統一致)安裝
sudo apt-get install nfs-common
7. NFS客戶端掛載測試。(將NFS服務器的目錄 /nfsroot 掛載到 客戶端目錄 /mnt/nfsroot, 此時服務端 /nfsroot目錄和 該客戶端 /mnt/nfsroot 目錄同步
mount -t nfs 192.168.1.164:/nfsroot /mnt/nfsroot
附:
(1)關於【步驟3】中的配置說明, 以 /nfsroot *(rw,sync,no_root_squash) 為例
第一項:/nfsroot
指在NFS服務器上被用來共享的目錄, 該目錄會和客戶端的某個目錄同步
第二項: *
這個 * 和【3.2】后面的 192.168.1.164 指的是要綁定到 該目錄(第一項中指定的)的客戶端 IP。若設置為 * 則表示允許任何NFS客戶端綁定到該目錄; 設置為192.168.1.164 表示僅允許IP 為 192.168.1.164的客戶端綁定該目錄
特定ip地址的主機:192.168.1.164 特定子網中的所有主機:192.168.1.0/24 或 192.168.1.0/255.255.255.0 特定域名的主機:nfs.rurjs.com 特定域中的所有主機:*.rurjs.com 所有主機:*
第三項: rw
這里表示客戶端對該共享目錄的權限,
ro:共享目錄只讀;
rw:共享目錄可讀可寫;
第四項: sync
sync:將數據同步寫入內存緩沖區與磁盤中,效率低,但可以保證數據的一致性; async:將數據先保存在內存緩沖區中,必要時才寫入磁盤;
第五項: no_root_squash
all_squash:所有訪問用戶都映射為匿名用戶或用戶組; no_all_squash(默認):訪問用戶先與本機用戶匹配,匹配失敗后再映射為匿名用戶或用戶組; root_squash(默認):將來訪的root用戶映射為匿名用戶或用戶組; no_root_squash:來訪的root用戶保持root帳號權限; subtree_check(默認) :若輸出目錄是一個子目錄,則nfs服務器將檢查其父目錄的權限; no_subtree_check :即使輸出目錄是一個子目錄,nfs服務器也不檢查其父目錄的權限,這樣可以提高效率;
其他可用項:
anonuid=<UID>:指定匿名訪問用戶的本地用戶UID,默認為nfsnobody(65534); anongid=<GID>:指定匿名訪問用戶的本地用戶組GID,默認為nfsnobody(65534); secure(默認):限制客戶端只能從小於1024的tcp/ip端口連接服務器; insecure:允許客戶端從大於1024的tcp/ip端口連接服務器; wdelay(默認):檢查是否有相關的寫操作,如果有則將這些寫操作一起執行,這樣可以提高效率; no_wdelay:若有寫操作則立即執行,應與sync配合使用;