NFS服務
NFS工作原理
- NFS:Network File System 網絡文件系統,基於內核的文件系統。Sun公司開發,通過使用NFS,用戶和程序可以像訪問本地文件一樣訪問遠端系統上的文件,基於RPC(Remote Procedure Call Protocol遠程過程調用)實現
- RPC採用C/S模式,客戶機請求程序調用進程發送一個有進程參數的調用信息到服務進程,然後等待應答信息。在服務器端,進程保持睡眠狀態直到調用信息到達爲止。當一個調用信息到達,服務器獲得進程參數,計算結果,發送答覆信息,然後等待下一個調用信息,最後,客戶端調用進程接收答覆信息,獲得進程結果,然後調用執行繼續進行
NFS工作原理簡圖
NFS優勢:節省本地存儲空間,將常用的數據,如:/home目錄,存放在NFS服務器上且可以通過網絡訪
問,本地終端將可減少自身存儲空間的使用
什麼是NFS?
- 軟件包:nfs-utils
- 相關軟件包:rpcbind(必須),tcp_wrappers
- Kernel支持:nfs.ko
- 端口:2049(nfsd), 其它端口由portmap(111)分配
- 說明:CentOS 6 開始portmap進程由rpcbind代替
- NFS服務主要進程:
- rpc.nfsd 最主要的NFS進程,管理客戶端是否可登錄
- rpc.mountd 掛載和卸載NFS文件系統,包括權限管理
- rpc.lockd 非必要,管理文件鎖,避免同時寫出錯
- rpc.statd 非必要,檢查文件一致性,可修復文件
- 日誌:/var/lib/nfs/
- NFS配置文件:/etc/exports,/etc/exports.d/*.exports
NFS共享配置文件格式
/dir 主機1(opt1,opt2) 主機2(opt1,opt2)...
- 格式說明:
- #開始爲註釋
- 主機格式:
單個主機:ipv4,ipv6,FQDN
IP networks:兩種掩碼格式均支持
172.18.0.0/255.255.0.0
172.18.0.0/16
wildcards:主機名通配,例如*.magedu.com,IP不可以
netgroups:NIS域的主機組,@group_name
anonymous:表示使用*通配所有客戶端
- 每個條目指定目錄導出到的哪些主機,及相關的權限和選項
默認選項:(ro,sync,root_squash,no_all_squash)
ro,rw 只讀和讀寫
async 異步,數據變化後不立即寫磁盤,性能高
sync(1.0.0後爲默認)同步,數據在請求時立即寫入共享
root_squash (默認)遠程root映射爲nfsnobody,UID爲65534,CentOS8 爲nobody,早期版本
是4294967294 (nfsnobody)
no_root_squash 遠程root映射成root用戶
all_squash 所有遠程用戶(包括root)都變成nfsnobody,CentOS8 爲nobody
no_all_squash (默認)保留共享文件的UID和GID
anonuid和anongid 指明匿名用戶映射爲特定用戶UID和組GID,而非nfsnobody,可配合
all_squash使用
範例:NFS配置示例
vim /etc/exports
/myshare server.example.com
/myshare *.example.com
/myshare server?.example.com
/myshare server[0-20].example.com
/myshare 172.25.11.10
/myshare 172.25.0.0/16
/myshare 2000:472:18:b51:c32:a21
/myshare 2000:472:18:b51::/64
/myshare *.example.com 172.25.0.0/16
/myshare desktop.example.com(ro)
/myshare desktop.example.com(ro) server[0-20].example.com(rw)
/myshare diskless.example.com(rw,no_root_squash)
NFS工具
rpcinfo
- rpcinfo 工具可以查看RPC相關信息
rpcinfo -p hostname
- 查看RPC註冊程序
rpcinfo –s hostname
範例:rpcinfo
[root@centos8 ~]#rpcinfo -p
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 36310 status
100024 1 tcp 45265 status
[root@centos8 ~]#rpcinfo -s
program version(s) netid(s) service owner
100000 2,3,4 local,udp,tcp,udp6,tcp6 portmapper superuser
100024 1 tcp6,udp6,tcp,udp status 29
exportfs
- exportfs:可用於管理NFS導出的文件系統
- 常見選項:
- –v 查看本機所有NFS共享
- –r 重讀配置文件,並共享目錄
- –a 輸出本機所有共享
- –au 停止本機所有共享
showmount
- 常見用法
showmount -e hostname
mount.nfs
- NFS相關的掛載選項:man 5 nfs
- fg(默認)前臺掛載
- bg後臺掛載
- hard(默認)持續請求
- soft 非持續請求
- intr 和hard配合,請求可中斷
- rsize和wsize 一次讀和寫數據最大字節數,rsize=32768
- netdev 無網絡不掛載
- 提示:基於安全考慮,建議使用nosuid,nodev,noexec掛載選項
範例:臨時掛載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
自動掛載
可以使用autofs服務按需要掛載外圍設備,NFS共享等,並在空閒5分鐘後自動掛載
相關包和文件
- 軟件包:autofs
- 服務文件:/usr/lib/systemd/system/autofs.service
- 配置文件:/etc/auto.master
配置文件格式
- 參看幫助:man 5 autofs
- 所有導出到網絡中的NFS啓用特殊匹配 -host 至“browse”
- 範例:/net目錄可以自動掛載NFS共享
cat /etc/auto.master
/net -hosts
cd /net/192.168.8.100/
- 自動掛載資源有兩種格式
- 相對路徑法:將路徑分成dirname和basename分別配置,可能會影響現有的目錄結構
- 絕對路徑法:直接匹配全部絕對路徑名稱,不會影響本地目錄結構
- 相對路徑法:
1. /etc/auto.master 格式
掛載點的dirname 指定目錄的配置文件路徑
2.指定目錄的配置文件格式
掛載點的basename 掛載選項 選項設備
範例:相對路徑
[root@centos8 ~]#vim /etc/auto.master
/misc /etc/auto.misc
[root@centos8 ~]#vim /etc/auto.misc
cd -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom
範例:相對路徑法爲支持通配符
vim /etc/auto.master
/misc /etc/auto.misc
vim /etc/auto.misc
#表示/misc下面的子目錄和nfs共享/export目錄的子目錄同名
* server:/export/&
- 絕對路徑
1./etc/auto.master格式
/- 指定配置文件路徑
2.指定配置文件格式
絕對路徑 掛載選項 選項設備
範例:絕對路徑
vim /etc/auto.master:
/- /etc/auto.direct
vim /etc/auto.direct:
/foo -fstype=nfs server1:/export/foo
/user/local/ -fstype=nfs,vers=3 server1:/usr/local
/mnt/cdrom -fstype=iso9660 :/dev/cdrom