第九章 網絡文件共享服務之NFS

9.1 nfs介紹

9.1.1 nfs特點

  NFS(Network File System)即網絡文件系統,是FreeBSD支持的文件系統中的一種,它允許網絡中的計算機之間通過TCP/IP網絡共享資源。


  在NFS的應用中,本地NFS的客戶端應用可以透明地讀寫位於遠端NFS服務器上的文件,就像訪問本地文件一樣


  nfs適用於Linux與Unix之間實現文件共享,不能實現Linux與Windows間的文件共享功能


  nfs是運行在應用層的協議,其監聽於2049/tcp和2049/udp套接字上


  nfs服務只能基於IP進行認證,這也是它的缺點之一


9.1.2 使用nfs的好處

  a) 節省本地存儲空間,將常用的數據存放在一臺NFS服務器上且可以通過網絡訪問,那麼本地終端將可以減少自身存儲空間的使用

  b) 用戶不需要在網絡中的每個機器上都建有Home目錄,Home目錄可以放在NFS服務器上且可以在網絡上被訪問使用

  c) 一些存儲設備如軟驅、CDROM和Zip(一種高儲存密度的磁盤驅動器與磁盤)等都可以在網絡上被別的機器使用。這可以減少整個網絡上可移動介質設備的數量


9.1.3 nfs的體系組成

  nfs體系至少有兩個主要部分:

    一臺NFS服務器

    若干臺客戶機


  nfs體系的架構圖如下:

wKioL1kKwjOirviTAABkmNHY85s206.jpg

  客戶機通過TCP/IP網絡遠程訪問存放在NFS服務器上的數據

  在NFS服務器正式啓用前,需要根據實際環境和需求,配置一些NFS參數


9.1.4 nfs的應用場景

  nfs有很多實際應用場景,以下是一些常用的場景:

  a) 多個機器共享一臺CDROM或其他設備。這對於在多臺機器中安裝軟件來說更加便宜與方便

  b) 在大型網絡中,配置一臺中心NFS服務器用來放置所有用戶的home目錄可能會帶來便利。這些目錄能被輸出到網絡以便用戶不管在哪臺工作站上登錄,總能得到相同的home目錄

  c) 不同客戶端可在NFS上觀看影視文件,節省本地空間

  d) 在客戶端完成的工作數據,可以備份保存到NFS服務器上用戶自己的路徑下


9.2 nfs工作機制

  nfs是基於rpc來實現網絡文件系統共享的。所以我們先來說說rpc

9.2.1 RPC

  RPC(Remote Procedure Call Protocol),遠程過程調用協議,它是一種通過網絡從遠程計算機程序上請求服務,而不需要了解底層網絡技術的協議。

  RPC協議假定某些傳輸協議的存在,如TCP或UDP,爲通信程序之間攜帶信息數據。在OSI網絡通信模型中,RPC跨越了傳輸層和應用層。

  RPC採用客戶機/服務器模式。請求程序就是一個客戶機,而服務提供程序就是一個服務器。

wKioL1kKxXbSqO9fAABR5CXCnZo588.jpg

  rpc工作機制如上圖所示,下面來描述一下它:

  a) 客戶端程序發起一個RPC系統調用基於TCP協議發送給另一臺主機(服務端)

  b) 服務端監聽在某個套接字上,當收到客戶端的系統調用請求以後,將收到的請求和其所傳遞的參數通過本地的系統調用執行一遍,並將結果返回給本地的服務進程

  c) 服務端的服務進程收到返回的執行結果後將其封裝成響應報文,再通過rpc協議返回給客戶端

  d) 客戶端調用進程接收答覆信息,獲得進程結果,然後調用執行繼續進行


  CentOS6中RPC服務的進程名是portmapper,可以通過rpcinfo -p查看當前系統使用的RPC服務名


9.2.2 NIS

  NIS:Network Information System,網絡信息系統,是對主機帳號等系統提供集中管理的網絡服務。


  用戶登錄任何一臺NIS客戶機都會從NIS服務器進行登錄認證,可實現用戶帳號的集中管理


  NIS協議是明文的,所以NIS一般不建議在公網中使用而通常在局域網中使用。


  此章主要是講NFS,所以NIS的配置這裏就不詳說了,有興趣的朋友可以去網上搜索


9.2.3 nfs工作機制

  NFS服務器端運行着四個進程:nfsd,mountd,idmapd,portmapper

    idmapd:實現用戶帳號的集中映射,把所有的帳號都映射爲NFSNOBODY,但是在訪問時卻能以本地用戶的身份去訪問

    mountd:用於驗證客戶端是否在允許訪問此NFS文件系統的客戶端列表中,在則允許訪問(發放一個令牌,持令牌去找nfsd),否則拒絕訪問

      mountd的服務端口是隨機的,由rpc服務(portmapper)提供隨機端口號

    nfsd:nfs的守護進程,監聽在2049/tcp和2049/udp端口上

      不負責文件存儲(由NFS服務器本地內核負責調度存儲),用於理解客戶端發起的rpc請求,並將其轉交給本地內核,而後存儲在指定的文件系統上

    portmapper:NFS服務器的rpc服務,其監聽於111/TCP和111/UDP套接字上,用於管理遠程過程調用(RPC)


  下面通過一個例子來說明NFS的簡單工作流程:

    需求:查看file文件的信息,此file存儲在遠程NFS服務端主機上(掛載在本地目錄/shared/nfs中)

wKiom1kKxtSQW5TsAAB_peqelao019.jpg

  (1)客戶端發起查看file信息的指令(ls file)給內核,內核通過NFS模塊得知此文件並不是本地文件系統中的文件,而是在遠程NFS主機上的一個文件

  (2)客戶端主機的內核通過RPC協議把查看file信息的指令(系統調用)封裝成rpc請求通過TCP的111端口發送給NFS服務端主機的portmapper

  (3)NFS服務端主機的portmapper(RPC服務進程)告訴客戶端說NFS服務端的mountd服務在某某端口上,你去找它驗證

    因爲mountd在提供服務時必須要向portmapper註冊一個端口號,所以portmapper是知道其工作於哪個端口的

  (4)客戶端得知服務端的mountd進程端口號後,通過已知的服務端mountd端口號請求驗證

  (5)mountd收到驗證請求後驗證發起請求的客戶端是否在允許訪問此NFS文件系統的客戶端列表中,在則允許訪問(發放一個令牌,持令牌去找nfsd),否則拒絕訪問

  (6)驗證通過後客戶端持mountd發放的令牌去找服務端的nfsd進程,請求查看某文件

  (7)服務端的nfsd進程發起本地系統調用,向內核請求查看客戶端要查看的文件的信息

  (8)服務端的內核執行nfsd請求的系統調用,並將結果返回給nfsd服務

  (9)nfsd進程收到內核返回的結果後將其封裝成rpc請求報文並通過tcp/ip協議返回給客戶端


9.3 nfs的配置

  主配置文件:/etc/exports,文件中的項的格式相當簡單,要共享一個文件系統,只要在文件中添加如下條目即可

directory(or file system) client1(option1,option2) client2(option1,option2)

  nfs主配置文件中的常用選項(option):

    secure:這個選項是缺省項,它使用了1024以下的TCP/IP端口實現NFS的連接。指定insecure可以禁用這個選項

    rw:允許NFS客戶機進行讀/寫訪問。缺省選項是隻讀的

    async:此選項可以改進性能,但如果沒有完全關閉NFS守護進程就重啓了NFS服務器,這也可能會造成數據丟失。

    no_wdelay:此選項關閉寫延時。如果設置了async,那麼NFS就會忽略此選項

    nohide:若將一個目錄掛載到另一個目錄之上,則原來的目錄通常就被隱藏起來或看起來像空的一樣。要禁用這種行爲,需啓用hide選項

    no_subtree_check:此選項關閉子樹檢查,子樹檢查會執行一些不想忽略的安全性檢查。缺省選項是啓用子樹檢查

    no_auth_nlm:此選項可作爲insecure_locks指定,它告訴NFS守護進程不要對加鎖請求進行認證。若關心安全性問題,就要避免使用此選項。缺省選項是auth_nlm或secure_locks

    mp(mountpoint=path):通過顯式的聲明此選項,NFS要求掛載所導出的目錄

    fsid=num:此選項通常在NFS故障恢復時使用。


  用戶映射:

    通過NFS中的用戶映射,可以將僞或實際用戶和組的標識賦給一個正在對NFS捲進行操作的用戶。這個NFS用戶具有映射所允許的用戶和組的許可權限。


    對NFS卷使用一個通用的用戶/組可以提供一定的安全性和靈活性,而不會帶來很多管理負荷。


    在使用NFS掛載的文件系統上的文件時,用戶的訪問通常都會受到限制,這就是說用戶都是以匿名用戶的身份來對文件進行訪問的,這些用戶缺省情況下對這些文件只有只讀權限。


    這種行爲對於root用戶來說尤其重要。然而,實際上的確存在這種情況:希望用戶以root用戶或所定義的其他用戶的身份訪問遠程文件系統上的文件。


    NFS允許指定訪問遠程文件的用戶--通過用戶標識號(UID)和組標識號(GID),可以禁用正常的squash行爲。


    用戶映射的選項:

      root_squash:此選項不允許root用戶訪問掛載上來的NFS卷

      no_root_squash:此選項允許root用戶訪問掛載上來的NFS卷

      all_squash:此選項對於公共訪問的NFS捲來說非常有用,它會限制所有的UID和GID,只使用匿名用戶。缺省設置是no_all_squash

      anonuid和anongid:這兩個選項將匿名UID和GID修改成特定用戶和組帳號


  查看NFS服務器端共享的文件系統:

showmount -e NFSSERVER_IP

  

  掛載NFS文件系統:

mount -t nfs SERVER:/path/to/sharedfs /path/to/mount_point

  

  開機自動掛載nfs:編輯/etc/fstab文件,添加如下格式的內容

SERVER:/PATH/TO/EXPORTED_FS/mnt_pointnfsdefaults,_netdev0 0

  

  客戶端掛載時可以使用的特殊選項:

    Client

      Mounting remote directories

      Before mounting remote directories 2 daemons should be started first:

        rpcbind

        rpc.statd


    rsize:其值是從服務器讀取的字節數(緩衝)。默認爲1024。若使用比較高的值,如8192,可以提高傳輸速度

    wsize:其值是寫入到服務器的字節數(緩衝)。默認爲1024。若使用比較高的值,如8192,可以提高傳輸速度


    The timeo value is the amount of time, in tenths of a second, to wait before resending a transmission after an RPC timout. 

    After the first timeout, the timeout value is doubled for each retry for a maximum of 60 seconds or until a major timeout occurs.

    If connecting to a slow server or over a busy network, better performance can be achiveved by increasing this timeout value.

    The intr option allows signals to interrupt the file operation if a major timeout occurs for a hard-mounted share.


  exportfs:維護exports文件導出的文件系統表的專用工具

    export -ar:重新導出所有的文件系統

    export -au:關閉導出的所有文件系統

    export -u FS:關閉指定的導出的文件系統

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章