1. 程式人生 > >nfs原理詳解及配置

nfs原理詳解及配置

1.0 而是 size 應用程序 roc alt 掛載文件系統 客戶 接受

簡介

工作原理

配置

簡介

NFS(Network File System)即網絡文件系統,它允許網絡中的計算機之間通過網絡共享資源。將NFS主機分享的目錄,掛載到本地客戶端當中,本地NFS的客戶端應用可以透明地讀寫位於遠端NFS服務器上的文件,在客戶端端看起來,就像訪問本地文件一樣。

RPC,基於C/S模型。程序可以使用這個協議請求網絡中另一臺計算機上某程序的服務而不需知道網絡細節,甚至可以請求對方的系統調用。

對於Linux而言,文件系統是在內核空間實現的,即文件系統比如ext3、ext4等是在Kernel啟動時,以內核模塊的身份加載運行的。

原理

NFS本身的服務並沒有提供數據傳遞的協議,而是通過使用RPC(遠程過程調用 Remote Procedure Call)來實現。

當NFS啟動後,會隨機的使用一些端口,NFS就會向RPC去註冊這些端口。RPC就會記錄下這些端口,RPC會開啟111端口。通過client端和sever端端口的連接來進行數據的傳輸。在啟動nfs之前,首先要確保rpc服務啟動。

具體過程如下:

技術分享圖片

  1. 本地用戶要訪問nfs服務器中文件,先向內核發起請求,內核處理調用nfs模塊及rpc client
  2. rpc client向rpc server發起連接
  3. 在連接之前,NFS服務除了啟動nfsd本身監聽的端口2049/tcp和2049/udp,還會啟動其它進程(如mountd,statd,rquotad等)以完成文件共享,這些進程的端口是不固定的;是每次NFS服務啟動時向RPC服務註冊的,RPC服務會隨機分配未使用的端口
  4. 完成連接,接受訪問請求
  5. nfs應用程序向內核發起請求
  6. 內核調用文件系統

然後client端通過獲取的NFS端口來建立和server端的NFS連接並進行數據的傳輸。

以下為啟動各服務的作用

rpc:遠程過程調用協議,是實現本地調用遠程主機實現系統調用的協議。

portmapper:負責分配rpc server的端口,並在client端請求時,負責響應目的rpc server端口返回給client端,工作在tcp與udp的111端口上。

mountd:是nfs服務的認證服務的守護進程,client在收到返回的真正端口時,就會去連接mountd,認證取得令牌。

nfsd:nfs的守護進程,負責接收到用戶的調用請求後與內核發出請求並得到調用結果響應給用戶,工作在tcp和udp的2049端口。

idmapd:是NFS的一個程序,用來負責遠程client端創建文件後的權限問題。

quotad:用用於實現磁盤配額,當client端掛載nfs後可以限制磁盤空間的大小。

NFS服務配置安裝

技術分享圖片

相關配置文件及命令的使用

/etc/exports

/path/to/somedir CLIENT_LIST

多個客戶之間使用空白字符分隔

每個客戶端後面必須跟一個小括號,裏面定義了此客戶訪問特性,如訪問權限等

172.16.0.0/16(ro,async) 192.16.0.0/24(rw,sync) *(ro)

權限屬性:

ro:只讀

rw:讀寫

sync:同步,數據同步寫到內存與硬盤中

async:異步,數據先暫存內存

root_squash: 將root用戶映射為來賓賬號

no_root_squash: 有root的權限,不建議使用

all_squash: 全部映射為來賓賬號

anonuid, anongid: 指定映射的來賓賬號的UID和GID

exportfs命令:

-a:跟-r或-u選項同時使用,表示重新掛載所有文件系統或取消導出所有文件系統;

-r: 重新導出

-u: 取消導出

-v: 顯示詳細信息

showmount命令:

showmount -e NFS_SERVER: 查看NFS服務器"導出"的各文件系統

showmount -a NFS_SERVER: 查看NFS服務器所有被掛載的文件系統及其掛載的客戶端對應關系列表

showmount -d NFS_SERVER: 顯示NFS服務器所有導出的文件系統中被客戶端掛載了文件系統列表

rpcinfo

-p hostname(orIP)

-p :顯示所有的 port 與 program 的信息!

如果要讓mountd和quotad等進程監聽在固定端口,編輯配置文件/etc/sysconfig/nfs

客戶端使用mount命令掛載

mount -t nfs NFS_SERVER:/PATH/TO/SOME_EXPORT /PATH/TO/SOMEWHRERE

安裝配置

環境準備:

server端:192.168.1.222 centos 7

client端:192.168.1.200 centos 6.5

  1.在服務端安裝nfs,

  # yum install nfs-utils rpcbind -y

技術分享圖片

  2.編輯/etc/exports,並啟動nfs

  技術分享圖片

  #systemctl start nfs

  3.客戶端同樣安裝nfs-utils和rpcbind並啟動,必須先啟動rpcbind,否則報錯(註意防火墻等)

  技術分享圖片

  4.掛載並查看掛載信息

  # mount -t nfs 192.168.1.222:/var/nfs /mnt

  #showmount –e 192.168.1.222

  技術分享圖片

  在服務器端/var/nfs創建目錄或文件,並在客戶端/mnt查看即可。

將所有用戶映射為來賓賬號實驗

  1. 在服務器端添加用戶hot,並修改配置文件並重新掛載文件系統

    添加用戶

    useradd –u 520 hot

    修改/etc/exports

    /var/nfs 192.168.1.0/24(rw,async,all_squash,anonuid=520)

    重新掛載導出

    exportfs –ra

    技術分享圖片

  2. 在客戶端上添加用戶code,分別在code用戶和root用戶下創建文件,查看文件屬性

    技術分享圖片

    技術分享圖片

    可以看到文件屬主都為服務器端設置好的來賓賬號hot的uid

    讓mountd和quotad等進程監聽在固定端口,編輯配置文件/etc/sysconfig/nfs,取消註釋

    技術分享圖片

    重啟nfs,查看端口

    技術分享圖片

nfs原理詳解及配置