NFS 網路檔案系統測試筆記

weixin_34162629發表於2017-10-06

  NFS(Network Files System),網路檔案系統是1980年由SUN發展出來在UNIX&Linux系統間實現磁碟檔案共享的一種方法。它是一種檔案系統協議:支援應用程式在客戶端通過網路存取位於伺服器磁碟中的資料。NFS的基本原則是讓不同的客戶端及伺服器通過一組RPCs共享相同的檔案系統,它獨立於作業系統,允許不同硬體及作業系統的系統共同進行檔案的共享。
  雖然NFS可以在網路中進行檔案共享,但NFS在設計時並沒有提供資料傳輸的功能。需要藉助RPC(Remote Procedure Calls,遠端過程呼叫)。RPC定義了一種程式間通過網路進行互動通訊的機制,它允許客戶端程式通過網路向遠端服務程式請求服務,而不需要了解伺服器底層的通訊協議詳細資訊。
當一個RPC連線建立開始階段,客戶端建立過程呼叫,將呼叫引數傳送到遠端伺服器程式,並等待相應。請求到達時,伺服器通過客戶端請求的服務,呼叫指定的程式。並將結果返回客戶端。當RPC呼叫結束,客戶端程式將繼續進行下一步的通訊操作。
NFS依賴RPC與外部通訊,為保證NFS服務正常工作,其需要在RPC註冊相應的服務埠資訊,這樣客戶端向伺服器的RPC提交訪問某個服務的請求時,伺服器才能夠正確作出相應。
  註冊NFS服務時,需要先開啟RPC,才能保證NFS註冊成功。並且如果RPC服務重新啟動,其儲存的資訊將丟失,需重新啟動NFS服務以註冊埠資訊,否則客戶端將無法訪問NFS伺服器。

NFS服務使用埠:2049
此外還使用以下RPC服務的隨機埠:
RPC使用埠111:遠端程式呼叫
rpc.lock:隨機埠
rpc.mount:隨機埠
rpc.stat:隨機埠

不同的功能nfs.server使用不同模組,模組的埠不固定
客戶端連線到nfs伺服器都向rpc服務來請求埠,rpc為nfs模組分配埠
rpc 遠端程式呼叫(rpc埠tcp 111)
客戶端先連線到nfs的2049,但是不能正常工作,nfs還要連線相應的模組,才可以正常工作。

安裝NFS軟體包:

# yum install nfs-utils  該軟體包預設已安裝

防火牆如何開啟不固定埠?

systemctl restart nfs
rpcinfo -p 192.168.100.1 #檢視rpc註冊的埠
rpcinfo -p localhost #檢視本地rpc註冊的埠

再次重啟nfs,發現rpc埠發生變化
如何固定rpc埠?

vim /etc/sysconfig/nfs
LOCKD_TCPPORT=30000 #修改
LOCKD_UDPPORT=30000 #修改
systemctl restart nfs

防火牆規則需要允許所有相關服務和埠

netstat -antulp | grep -i rpc
firewall-cmd --permanent --add-port=20048/tcp
firewall-cmd --permanent --add-port=20048/udp
firewall-cmd --permanent --add-port=2049/tcp
firewall-cmd --permanent --add-port=2049/udp
firewall-cmd --permanent --add-port=30000/tcp
firewall-cmd --permanent --add-port=30000/udp
firewall-cmd --permanent --add-service=nfs
firewall-cmd --permanent --add-service=rpc-bind
firewall-cmd --permanent --add-service=mountd #即20048埠,二者填一個即可
firewall-cmd --reload

附加許可權引數

引數 作用
ro 只讀
rw 讀寫
root_squash 當NFS客戶端以root管理員訪問時,對映為NFS伺服器的匿名使用者
no_root_squash 當NFS客戶端以root管理員訪問時,對映為NFS伺服器的root管理員
all_squash 無論NFS客戶端使用什麼賬戶訪問,均對映為NFS伺服器的匿名使用者
sync 同時將資料寫入到記憶體與硬碟中,保證不丟失資料
async 優先將資料儲存到記憶體,然後再寫入硬碟;這樣效率更高,但可能會丟失資料

RHEL7預設已安裝NFS,所以在測試過程中不需要安裝任何軟體包,配置完成,啟動即可。

[root@rhel1 ~]# rpm -qa | grep nfs-utils
nfs-utils-1.3.0-0.48.el7.x86_64
[root@rhel1 ~]# rpm -qa | grep rpcbind
rpcbind-0.2.0-42.el7.x86_64
[root@rhel1 ~]# 

實驗1-普通掛載
在RHEL1上

vim /etc/sysconfig/nfs
LOCKD_TCPPORT=30000 #修改
LOCKD_UDPPORT=30000 #修改
systemctl restart nfs
#新增防火牆策略
firewall-cmd --permanent --add-port=20048/tcp
firewall-cmd --permanent --add-port=20048/udp
firewall-cmd --permanent --add-port=2049/tcp
firewall-cmd --permanent --add-port=2049/udp
firewall-cmd --permanent --add-port=30000/tcp
firewall-cmd --permanent --add-port=30000/udp
firewall-cmd --permanent --add-service=nfs
firewall-cmd --permanent --add-service=rpc-bind
firewall-cmd --permanent --add-service=mountd #即20048埠,都可以生效
firewall-cmd --reload
#建立需要共享出去的測試目錄及檔案
mkdir /share1
mkdir /share2
touch /share1/file{1..99)
touch /share2/file{100..199}
#修改exports配置檔案
vim /etc/exports
/share1 192.168.100.0/24(ro)
/share2 192.168.100.0/24(ro)
systemctl restart nfs

NFS的安裝配置很簡單,總的來說,包括以下幾步:

1、安裝(在RHEL7上預設已安裝)

2、新增防火牆策略

3、建立共享目錄,並修改exports配置檔案,指定共享許可權

在RHEL2上

showmount -e 192.168.100.1  --檢視RHEL1上共享出來哪些目錄
mkdir /mnt/nfs1
mkdir /mnt/nfs2
mount 192.168.100.1:/share1 /mnt/nfs1   --掛載目錄到本地
mount 192.168.100.1:/share2 /mnt/nfs2
ll /mnt/nfs1
ll /mnt/nfs2

實驗2-fstab開機掛載

vim /etc/fstab
192.168.100.1:/share1 /mnt/nfs1 nfs defaults 0 0
mount -a
ll /mnt/nfs1

實驗3-autofs自動掛載

yum install -y autofs
vim /etc/auto.master
/mnt/nfs2 /etc/auto.nfs2 --timeout=30 #增加
cp /etc/auto.misc /etc/auto.nfs2
vim /etc/auto.nfs2
nfs2 -fstype=nfs,ro 192.168.100.1:/share2 #增加
systemctl restart autofs
ll /mnt/nfs2 #發現什麼都沒有
cd /mnt/nfs2
cd nfs2
ll #發現自動掛載,退出目錄後30秒自動解除安裝

 

相關文章