NFS: Network File System 網路文件系統,是一個文件系統,不是一種協議類型。使用 NFS,用戶和程式可以像訪問本地文件一樣訪問遠端系統上的文件。 說明: NFS是內核提供的一個功能,文件系統的管理不是由應用程式管理,而是操作系統內核在管理。 硬碟上常見的文件系統:ext4、xf ...
NFS:
Network File System 網路文件系統,是一個文件系統,不是一種協議類型。使用 NFS,用戶和程式可以像訪問本地文件一樣訪問遠端系統上的文件。
說明:
NFS是內核提供的一個功能,文件系統的管理不是由應用程式管理,而是操作系統內核在管理。
硬碟上常見的文件系統:ext4、xfs等
NFS的實現:
NFS是基於於RPC(Remote Procedure Call Protocol 遠程過程調用)實現的。
PRC的功能:
類似於114查號臺,遠程主機在PRC上註冊功能,用戶通過PRC調用遠程主機的功能來實現本機的服務。
說明:
NFS和RPC是兩個獨立的服務,兩者之間具有依賴關係
NFS的特點:
NFS優點:
遠程文件系統通過網路掛載到本機
缺點:
NFS實現比較複雜,使用的時候通常在內網你使用。跨外網有防火牆配置NFS服務的訪問比較麻煩,因為使用的埠比較多。
說明:
NFS是一個傳統的unix服務,windows預設不支持nfs,windows模式使用的是windows共用
Linux 實現NFS功能的調用:
軟體包:nfs-utils(包括伺服器和客戶端相關工具,CentOS8 最小化安裝時預設沒有安裝)
裝nfs的時候,rpcbind會作為一個依賴關係安裝
範例:安裝並啟動調用nfs的服務
[root@CentOS8 ~]# yum isntall nfs-utils -y
[root@CentOS8 ~]# systemctl enable nfs-server --now ##啟動服務的時候只需要啟動這個就行了,其他服務會按需啟動
老版本:nfs
centos7以後:nfs-server
共用規則的存放位置:/etc/export
規則定義格式:
共用目錄位置 主機(選項)
例如:
[root@CentOS8 ~]# cat /etc/exports
/data 10.0.0.12(rw)
主機:
可以是一個網段、具體的ipV4地址、FQDN等
例如:
IP networks:兩種掩碼格式均支持
172.18.0.0/255.255.0.0
172.18.0.0/16
主機(選項)
”選項“指定每個條目指定目錄導出到的哪些主機,及相關的許可權和選項
預設選項:(ro,sync,root_squash,no_all_squash)
ro,rw 只讀、讀寫
async 非同步,數據變化後不立即寫磁碟,先寫入到緩衝區中,過一段時間再寫入磁碟,性能高,安全性低
sync(1.0.0後為預設)同步,數據在請求時立即寫入共用存儲磁碟,性能低,安全性高
root_squash (預設)遠程root映射為nfsnobody,UID為65534,CentOS8 為nobody,CentOS 7以前的版本為nfsnobody
no_root_squash 遠程root映射成NFS伺服器的root用戶
all_squash 所有遠程用戶(包括root)都變成nfsnobody,CentOS8 為nobody
no_all_squash (預設)保留共用文件的UID和GID
anonuid和anongid 指明匿名用戶映射為特定用戶UID和組GID,而非nobody,可配合all_squash使用
NFS相關工具
- exportfs工具:
exportfs:可用於管理NFS導出的文件系統
選項:
-v #查看本機所有NFS共用
-r #重讀配置文件,並共用目錄
-a #輸出本機所有共用
-au #停止本機所有共用
例如:
[root@CentOS8 ~]# exportfs -v
/data 10.0.0.12(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
例如:更改規則文件生效的方法
重啟nfs-server服務 -- 不建議
exportfs -r --- 重新讀取規則文件,生效設置的規則
- showmount工具:
#查看遠程主機的NFS共用
showmount -e hostname
例如:
[root@CentOS8 ~]# showmount -e 10.0.0.11
Export list for 10.0.0.11:
/data 10.0.0.12
- mount.nfs
客戶端NFS掛載
顯示NFS相關的掛載選項:man 5 nfs
fg #(預設)前臺掛載
bg #後臺掛載
hard #(預設)持續請求
soft # 非持續請求
intr # 和hard配合,請求可中斷
rsize # 和wsize 一次讀和寫數據最大位元組數,rsize=32768
_netdev # 無網路服務時不掛載NFS資源
vers # 指定版本,客戶端centos8預設4.2 ,centos7預設4.1 centos6預設4.0
範例:臨時掛載NFS共用
mount -o rw,nosuid,fg,hard,intr 172.16.0.1:/testdir /mnt/nfs/
範例:開機掛載
vim /etc/fstab
172.16.0.1:/public /mnt/nfs nfs defaults,_netdev 0 0
# _netdev --- 表示沒有網路的時候不去掛載,這就就不會造成起不來的情況
說明:
跨網路訪問時,需要註意兩個許可權:
-
服務自身許可權
-
文件系統的許可權
說明:
區分用戶是通過uid來區分的,不是通過用戶名來區分的,兩台主機上用戶名相同,但是uid不同,則兩個不是同一個用戶。
全壓榨:all_squash
例如:客戶端的用戶是tom,id是111,nfs服務端是bob,id是111,那麼客戶端tom在nfs上創建的文件所有者是id111,用戶名為bob。
統一壓榨:
所有用戶統一壓榨成某個指定的用戶
all_squash annouid=xx anogid=xx