1. 程式人生 > >第九章 網絡文件共享服務之NFS

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

windows network 共享資源 服務器 計算機 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體系的架構圖如下:

技術分享

客戶機通過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采用客戶機/服務器模式。請求程序就是一個客戶機,而服務提供程序就是一個服務器。

技術分享

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中)

技術分享

(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:關閉指定的導出的文件系統

本文出自 “忘情居” 博客,請務必保留此出處http://itchentao.blog.51cto.com/5168625/1922030

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