天天看點

NFS原理及配置NFS原理及配置在Linux中NFS配置

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傳輸協定用于伺服器和客戶機之間檔案通路和共享的通信,進而使客戶機遠端地通路儲存在儲存設備上的資料。

NFS原理及配置NFS原理及配置在Linux中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
           

繼續閱讀