本章內容
NFS網絡文件系統介紹
NFS配置文件和配置示例
NFS工具
NFS掛載及aotufs自動掛載
實驗:實現NFS服務
實驗:實現NFS僞根
實驗:利用NFS服務實現家目錄的自動掛載
NFS服務
NFS:Network File System 網絡文件系統,基於內核的文件系統。Sun公司開發,通過使用NFS,用戶和程序可以像訪問本地文件一樣訪問遠端系統上的文件,基於RPC(Remote Procedure Call Protocol遠程過程調用)實現
RPC採用C/S模式。客戶機請求程序調用進程發送一個有進程參數的調用信息到服務進程,然後等待應答信息。在服務器端,進程保持睡眠狀態直到調用信息到達爲止。當一個調用信息到達,服務器獲得進程參數,計算結果,發送答覆信息,然後等待下一個調用信息,最後,客戶端調用進程接收答覆信息,獲得進程結果,然後調用執行繼續進行。
NFS優勢:節省本地存儲空間,將常用的數據如:home目錄,存放在一臺NFS服務器上且可以通過網絡訪問,那麼本地終端將可以減少自身存儲空間的使用
NFS文件系統
NFS各個版本的對比
NFS服務介紹
軟件包:nfs-utils
Kernel支持:nfs.ko
端口:2049(nfsd), 其它端口由portmap(111)分配
配置文件:/etc/exports,/etc/exports.d/*.exports
CentOS7不支持同一目錄同時用nfs和samba共享,因爲使用鎖機制不同
相關軟件包:rpcbind(必須),tcp_wrappers
CentOS6開始portmap進程由rpcbind代替
NFS服務主要進程:
rpc.nfsd 最主要的NFS進程,管理客戶端是否可登錄
rpc.mountd 掛載和卸載NFS文件系統,包括權限管理
rpc.lockd 非必要,管理文件鎖,避免同時寫出錯
rpc.statd 非必要,檢查文件一致性,可修復文件
日誌:/var/lib/nfs/
配置防火牆
配置防火牆,開放NFS服務
•配置NFS使用固定端口
•vim /etc/sysconfig/nfs
RQUOTAD_PORT=875
LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32769
MOUNTD_PORT=892
STATD_PORT=662
STATD_OUTGOING_PORT=2020
•防火牆除開放上述端口,還需開放TCP和UDP的111和2049共4個端口
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:主機名通配,例如*.wind.com,IP不可以
•netgroups:NIS域的主機組,@group_name
•anonymous:表示使用*通配所有客戶端
遠程的root用戶映射爲本機的nfsnobody用戶,遠程的普通用戶映射爲本機的uid相同的用戶
每個條目指定目錄導出到的哪些主機,及相關的權限和選項
•默認選項:(ro,sync,root_squash,no_all_squash)
•ro,rw 只讀和讀寫
•async 異步,數據變化後不立即寫磁盤,性能高
•sync(1.0.0後爲默認)同步,數據在請求時立即寫入共享
•no_all_squash (默認)保留共享文件的UID和GID
•all_squash 所有遠程用戶(包括root)都變成nfsnobody,會覆蓋no_root_squash
•root_squash (默認)遠程root映射爲nfsnobody,UID爲65534,早期版本是4294967294 (nfsnobody)
•no_root_squash 遠程root映射成root用戶
•anonuid和anongid 指明匿名用戶映射爲特定用戶UID和組GID,而非nfsnobody,可配合all_squash使用
如:anonuid=1000,anongid=1001
例:Windows如果想用NFS的話,點控制面板-->程序和功能-->打開或關閉Windows功能-->NFS客戶端
cmd>showmount -e 192.168.30.75
mount 192.168.30.75:/data/nfsdir1 Y:
umount Y: 取消掛載
NFS配置示例
在/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 -p hostname
rpcinfo -s hostname 查看RPC註冊程序
exportfs
-v 查看本機所有NFS共享
-r 重讀配置文件,並共享目錄
-a 輸出本機所有共享
-au 停止本機所有共享
showmount -e hostname
mount.nfs 掛載工具
NFSv4支持通過掛載NFS服務器的共享“根”,從而瀏覽NFS服務器上的共享目錄列表(即僞根,爲了隱藏文件目錄)
mount nfsserver:/ /mnt/nfs
客戶端NFS掛載
基於安全考慮,建議使用nosuid,nodev,noexec掛載選項
NFS相關的掛載選項:
fg(默認)前臺掛載,bg後臺掛載
hard(默認)持續請求,soft 非持續請求
intr 和hard配合,請求可中斷
rsize和wsize 一次讀和寫數據最大字節數,rsize=32768
_netdev 無網絡不掛載,可放在/etc/fstab的defaults位置
示例:
mount -o rw,nosuid,fg,hard,intr 172.16.0.1:/testdir /mnt/nfs/
開機掛載:/etc/fstab 172.16.0.1:/public /mnt/nfs nfs defaults 0 0
自動掛載
可使用autofs按需要掛載NFS共享,在空閒時自動卸載
由autofs包提供
系統管理器指定由/etc/auto.master自動掛載器守護進程控制的掛載點
自動掛載監視器訪問這些目錄並按要求掛載文件系統
文件系統在失活的指定間隔5分鐘後會自動卸載
爲所有導出到網絡中的NFS啓用特殊匹配 -host 至“browse”
參看幫助:man 5 autofs
支持含通配符的目錄名
* server:/export/& &代表*的內容,似乎只適用於相對路徑
直接匹配
直接匹配包括絕對路徑名稱
不會影響本地目錄結構
示例:
/etc/auto.master:
/- /etc/auto.direct
/etc/auto.direct:
/foo server1:/export/foo
/user/local/ server1:/usr/local
實驗:實現NFS服務
配置NFS服務器
systemctl start nfs-server
systemctl enable nfs-server
mkdir /nfsroot/dir2
chown nfsnobody /nfsroot/dir2
vi /etc/exports
/nfsroot/dir2 desktopX(rw)
exportfs -r
配置NFS客戶端
mkdir /mnt/nfsdir2
mount serverX:/nfsroot/dir2 /mnt/nfsdir2
vim /etc/fstab
nfsserver:/nfsroot/dir2 /mnt/nfsroot nfs defaults 0 0
mount -a
實驗:實現NFS僞根
配置NFS服務器
vim /etc/fstab
/data/nfsdir2 /nfsroot/dir2 none bind 0 0
/app/nfsdir3 /nfsroot/dir3 none bind 0 0
mount -a
vim /etc/exports.d/rootfs.exports
/nfsroot *(fsid=0,crossmnt)
/nfsroot/dir2 *(rw)
/nfsroot/dir3 *(ro)
配置NFS客戶端
mount nfsserver:/ /mnt/nfs
vi /etc/fstab
nfsserver:/ /mnt/ nfs4 ro 0 0
實驗:利用NFS服務實現家目錄的自動掛載
三臺主機
一臺nfs server
一臺絕對路徑
一臺相對路徑
1、nfs server
# 本機IP是192.168.30.3
useradd -d /data/nfs1 -u 2001 nfs1
useradd -d /data/nfs2 -u 2002 nfs2
setfacl -m u:nfsnobody:rwx /data/nfs1
setfacl -m u:nfsnobody:rwx /data/nfs2
vim /etc/exports
/data/nfs1 *(rw)
/data/nfs2 *(rw)
exportfs -r
exportfs -v
2、相對路徑的機子 #會影響父目錄
yum -y install autofs
useradd -u 2001 nfsuser1
useradd -u 2002 nfsuser2
vim /etc/auto.master
/home /etc/home.autofs
vim /etc/home.autofs
nfsuser1 -fstype=nfs,vers=3 192.168.30.3:/data/nfs1
nfsuser2 -fstype=nfs,vers=3 192.168.30.3:/data/nfs2
systemctl restart autofs
cd /home/nfsuser1
cd /home/nfsuser2
3、絕對路徑的機子 #不會影響父目錄
yum -y install autofs
useradd -u 2001 nfsuser1
useradd -u 2002 nfsuser2
vim /etc/auto.master
/- /etc/home.autofs
vim /etc/home.autofs
/home/nfsuser1 -fstype=nfs,vers=3 192.168.30.3:/data/nfs1
/home/nfsuser2 -fstype=nfs,vers=3 192.168.30.3:/data/nfs2
systemctl restart autofs
cd /home/nfsuser1
cd /home/nfsuser2
touch /home/nfsuser1/root_file
su - nfsuser1
touch /home/nfsuser1/nfsuser1_file
切換到nfs server上,可以看到在對應的/data/nfs1/目錄下,root_file的所有者和所屬組被壓榨成nfsnobody,而nfsuser1_file的所有者所屬組爲nfs1,因nfsuser1和nfs1的uid和gid相同