NFS原理及配置
- NFS原理及配置
-
- NFC定義
- NFC工作原理
- 在Linux中NFS配置
-
-
- NFS服務端搭建
- NFS用戶端配置
-
NFS原理及配置
NFC定義
NFS是基于UDP/IP協定的應用,其實作主要是采用遠端過程調用RPC機制,RPC提供了一組與機器、作業系統以及低層傳送協定無關的存取遠端檔案的操作。RPC采用了XDR的支援。XDR是一種與機器無關的資料描述編碼的協定,他以獨立與任意機器體系結構的格式對網上傳送的資料進行編碼和解碼,支援在異構系統之間資料的傳送。
NFC工作原理
NFS(Network File System,網絡檔案系統)是目前主流異構平台共享檔案系統之一。主要應用在UNIX環境下。最早是由Sun Microsystems開發,現在能夠支援在不同類型的系統之間通過網絡進行檔案共享,廣泛應用在FreeBSD、SCO、Solaris等異構作業系統平台,允許一個系統在網絡上與他人共享目錄和檔案。通過使用NFS,使用者和程式可以像通路本地檔案一樣通路遠端系統上的檔案,使得每個計算機的節點能夠像使用本地資源一樣友善地使用網上資源。換言之,NFS可用于不同類型計算機、作業系統、網絡架構和傳輸協定運作環境中的網絡檔案遠端通路和共享。
NFS的工作原理是使用用戶端/伺服器架構,由一個用戶端程式和伺服器程式組成。伺服器程式向其他計算機提供對檔案系統的通路,其過程稱為輸出。NFS用戶端程式對共享檔案系統進行通路時,把它們從NFS伺服器中“輸送”出來。檔案通常以塊為機關進行傳輸。其大小是8KB(雖然它可能會将操作分成更小尺寸的分片)。NFS傳輸協定用于伺服器和客戶機之間檔案通路和共享的通信,進而使客戶機遠端地通路儲存在儲存設備上的資料。

在Linux中NFS配置
NFS 服務所需的安裝包
安裝 NFS 和 RPC 「服務端、用戶端都安裝」
[[email protected] ~]# rpm -qa nfs-utils rpcbind
[[email protected] ~]# yum install nfs-utils rpcbind -y #nfs需要的安裝包
[[email protected] ~]# rpm -qa nfs-utils rpcbind
nfs-utils-1.2.3-64.el6.x86_64
rpcbind-0.2.0-11.el6_7.x86_64
NFS 版本檢視
nfsstat -s #服務端版本檢視
nfsstat -c #用戶端版本檢視
NFS服務端搭建
配置exports
[[email protected] ~]# mkdir /data
[[email protected] ~]# ll -d /data/
drwxr-xr-x. 3 root root 4096 Apr 11 09:49 /data/
[[email protected] ~]# chown -R nfsnobody.nfsnobody /data/
[[email protected] ~]# ll -d /data/
drwxr-xr-x. 3 nfsnobody nfsnobody 4096 Apr 11 09:49 /data/
[[email protected] ~]# cat /etc/exports
# share /data for web created by zhangliang at 2016-05-21
/data 172.16.1.0/24(rw,sync)
#172.16.1.0/24(rw,sync) 沒有空格
#/data 172.16.1.0/24(rw,sync,root_squash,all_squash,anonuid=XXXX,anongid=XXXX) # 推薦配置
啟動rpcbind服務
[[email protected]_cdn ~]# systemctl start rpcbind.service
[[email protected]_cdn ~]# netstat -anp | grep 'rpc'
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1930/rpcbind
tcp6 0 0 :::111 :::* LISTEN 1930/rpcbind
udp 0 0 0.0.0.0:832 0.0.0.0:* 1930/rpcbind
udp 0 0 0.0.0.0:111 0.0.0.0:* 1930/rpcbind
udp6 0 0 :::832 :::* 1930/rpcbind
udp6 0 0 :::111 :::* 1930/rpcbind
unix 2 [ ACC ] STREAM LISTENING 17999 1/systemd /var/run/rpcbind.sock
[[email protected]_cdn ~]# rpcinfo -p localhost
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
啟動NFS
[[email protected]_cdn ~]# systemctl start nfs.service
[[email protected]_cdn ~]# rpcinfo -p localhost
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 44741 status
100024 1 tcp 23203 status
100005 1 udp 20048 mountd
100005 1 tcp 20048 mountd
100005 2 udp 20048 mountd
100005 2 tcp 20048 mountd
100005 3 udp 20048 mountd
100005 3 tcp 20048 mountd
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 3 tcp 2049 nfs_acl
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 3 udp 2049 nfs_acl
100021 1 udp 48638 nlockmgr
100021 3 udp 48638 nlockmgr
100021 4 udp 48638 nlockmgr
100021 1 tcp 16146 nlockmgr
100021 3 tcp 16146 nlockmgr
100021 4 tcp 16146 nlockmgr
加入開始自啟動
[[email protected]_cdn ~]# systemctl enable rpcbind.service
[[email protected]_cdn ~]# systemctl enable nfs.service
檢視具體狀态情況
[[email protected]_cdn ~]# systemctl status rpcbind.service
● rpcbind.service - RPC bind service
Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled)
………………
[[email protected]_cdn ~]# systemctl status nfs.service
● nfs-server.service - NFS server and services
Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: disabled)
………………
檢視有哪些參數生效
[[email protected] ~]# cat /var/lib/nfs/etab
/data 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534,sec=sys,rw,root_squash,no_all_squash)
檢查是否成功
[[email protected] ~]# showmount -e 172.16.1.31 # 其中 172.16.1.31 為 NFS 服務端IP
Export list for 172.16.1.31:
/data 172.16.1.0/24
NFS用戶端配置
啟動rpcbind服務
[[email protected]_proxy01 ~]# systemctl start rpcbind.service
檢查共享資訊
[[email protected] ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
NFS挂載
在2台機器都挂載 NFS,好用于後面的測試。
[[email protected] ~]# mount -t nfs 172.16.1.31:/data /mnt
檢視挂載資訊
[[email protected] ~]# df -h #有時可能會被卡主
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 8.8G 1.5G 6.9G 18% /
tmpfs 495M 0 495M 0% /dev/shm
/dev/sda1 190M 40M 141M 23% /boot
172.16.1.31:/data 8.8G 1.5G 6.9G 18% /mnt
測試
在用戶端和服務端之間測試「2個用戶端,1個服務端」
1、任意用戶端建立檔案夾或建立檔案并且輸入資料,在服務端是否可以檢視;
2、服務端建立檔案夾或建立檔案并且輸入資料,在任意用戶端是否可以檢視;
3、在用戶端A 删除用戶端B 建立的檔案
4、在用戶端B 删除用戶端A 建立的檔案
加入開機自啟動
如果是 CentOS 7 環境,那麼必須保證 /etc/rc.d/rc.local 檔案具有可執行權限,否則該腳本不會執行也不會生效。
[[email protected] mnt]$ ll /etc/rc.local
lrwxrwxrwx. 1 root root 13 Nov 14 2018 /etc/rc.local -> rc.d/rc.local
[[email protected] mnt]# tail -3 /etc/rc.local
# mount nfs
mount -t nfs 172.16.1.31:/data /mnt