NFS簡介
NFS(Network File System)即網絡文件系統,是FreeBSD支持的文件系統中的一種,它允許網絡中的計算機之間通過TCP/IP網絡共享資源。在NFS的應用中,本地NFS的客戶端應用可以透明地讀寫位于遠端NFS服務器上的文件,就像訪問本地文件一樣。
RPC(NFS服務需要依賴RPC服務,這個比較重要) 要想了解NFS,必然要提到RPC這個服務。 因為NFS支持的功能還是比較多的,并且不同的功能都會使用不同的程序來啟動。每啟動一個功能就會啟用一些端口來傳輸數據,因此NFS的功能所對應的端口才沒有固定,而是采用隨機取用一些未被使用的小于1024的端口來作為傳輸之用。但如此一來又造成客戶端要連接服務器時的困擾,因為客戶端要知道服務器端的相關端口才能夠聯機,此時我們需要遠程過程調用(RPC)的服務。 RPC最主要的功能就是指定每個NFS功能所對應的端口號,并且回報給客戶端,讓客戶端可以連接到正確的端口上。當服務器在啟動NFS時會隨機選用數個端口,并主動地向RPC注冊。因此RPC可以知道每個端口對應的NFS功能。然后RPC固定使用端口111來監聽客戶端的請求并回報客戶端正確的端口,所以可以讓NFS的啟動更為容易。 注意,啟動NFS之前,要先啟動RPC服務;否則NFS無法向RPC注冊。另外,重新啟動RPC時原本注冊的數據會不見,因此RPC重新啟動后它管理的所有程序都需要重新啟動以重新向RPC注冊,比如NFS服務。
當客戶端有NFS文件要存取請求時,它向服務器端訪問數據,有如下幾個步驟: (1)客戶端會向服務器端的RPC(port 111)發出NFS文件存取功能的詢問請求。 (2)服務器端找到對應的已注冊的NFS daemon端口后會回報給客戶端。 (3)客戶端了解正確的端口后,就可以直接與NFS守護進程來聯機,然后訪問數據。
其實,我們可以簡單的理解為:NFS當作RPC服務中的一種,同時將RPC服務當作NFS服務器與NFS客戶端的中間接口人,就是說NFS客戶端訪問NFS服務器,必須經過RPC這個接口人,才可以去訪問,否則就直接死翹翹了。
注:NFS使用TCP/IP提供的協議和服務,并且位于OSI模型中的應用層,具體如下:
層數 | 名稱 | 功能 |
---|---|---|
1 | 應用層 | NFS |
2 | 表示層 | XDR |
3 | 會話層 | RPC |
4 | 傳輸層 | UDP,TCP |
5 | 網絡層 | IP |
6 | 數據鏈路層 | |
7 | 物理層 Ethernet |
安裝NFS
方法1:
檢查:rpm -qa nfs-utils rpcbind 最佳
yum install nfs-utils rpcbind -y
方法2: LANG = en
yum grouplist | grep -i nfs
yum groupinstall “NFS file server ” -y
啟動 rpcbind (centos 6.8)
/etc/init.d/rpcbind status
/etc/init.d/rpcbind start
啟動 rpcbind (centos 7)
systemctl start rpcbind.service
systemctl status rpcbind.service
查看rpcbind 端口
netstat -lntup | grep rpcbind 默認端口 111
netstat -lntup | grep 111
rpcinfo -p localhost 查看rpclist
配置nfs配置文件(/etc/exports ] 默認是空的)
vim /etc/exports
示例:
/data 168.1.1.1(rw,sync,all_squash)
/data 168.1.1.*(rw,sync,all_squash)
sync:寫入磁盤
使配置生效
exportfs -r
注:配置文件說明:
/opt/test 為共享目錄
192.168.1.0/24 可以為一個網段,一個IP,也可以是域名,域名支持通配符 如: *.qq.com
rw:read-write,可讀寫;
ro:read-only,只讀;
sync:文件同時寫入硬盤和內存;
async:文件暫存于內存,而不是直接寫入內存;
no_root_squash:NFS客戶端連接服務端時如果使用的是root的話,那么對服務端分享的目錄來說,也擁有root權限。顯然開啟這項是不安全的。
root_squash:NFS客戶端連接服務端時如果使用的是root的話,那么對服務端分享的目錄來說,擁有匿名用戶權限,通常他將使用nobody或nfsnobody身份;
all_squash:不論NFS客戶端連接服務端時使用什么用戶,對服務端分享的目錄來說都是擁有匿名用戶權限;
anonuid:匿名用戶的UID值,可以在此處自行設定。
anongid:匿名用戶的GID值。
- 查看有什么啟動命令 /etc/init.d/nfs 會輸出命令集合
- showmount -e 127.0.0.1 查看掛載的目錄
關閉防火墻
systemctl stop firewalld.service
systemctl disable firewalld.service
客戶端需要啟動 rpc
客戶端也需要安裝rpcbind, 建議nfs一起安裝,便于使用showmount命令
centos6.8 /etc/init.d/rpcbind start
centos7 systemctl start rpcbind.service或者將啟動命令放入 /etc/rc.local 或者 使用 echo “/etc/init.d/rpcbind start” >> /etc/rc.local
客戶端掛載目錄 mount -t nfs 10.0.0.7:/data /mnt
echo “/bin/mount -t nfs 10.0..0.1:/data /mnt” >> /etc/rc.local
nfs不能向服務端寫數據,是權限的問題
cat /var/lib/nfs/etab
/script 192.168.42.*(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,no_all_squash)
/data 192.168.42.*(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,no_all_squash)
[root@nfs-1 data]# grep 65534 /etc/passwd nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
chown -R nfsnobody /data
原創文章,作者:srayban,如若轉載,請注明出處:http://www.www58058.com/73581
對NFS網絡文件系統進行了詳細的介紹,內容總結的很詳細,建議把最近學過的內容也總結到博客中來,把代碼塊放入到”插入程序代碼”中去