1. 程式人生 > >nfs基本實現

nfs基本實現

nfs 基本實現 51cto

NFS(Network File System)即網絡文件系統,是FreeBSD支持的文件系統中的一種,它允許網絡中的計算機之間通過TCP/IP網絡共享資源。在NFS的應用中,本地NFS的客戶端應用可以透明地讀寫位於遠端NFS服務器上的文件,就像訪問本地文件一樣。
   NFS最早是由Sun公司發展出來的,
  簡單的來說:它就是是可以透過網絡,讓不同的主機、不同的操作系統可以共享存儲。

技術分享圖片
以下是NFS最顯而易見的好處:

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

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

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

  NFS 的基本原則是“容許不同的客戶端及服務端通過一組RPC分享相同的文件系統”,它是獨立於操作系統,容許不同硬件及操作系統的系統共同進行文件的分享。

  NFS在文件傳送或信息傳送過程中依賴於RPC協議。RPC,遠程過程調用 (Remote Procedure Call) 是能使客戶端執行其他系統中程序的一種機制。NFS本身是沒有提供信息傳輸的協議和功能的,但NFS卻能讓我們通過網絡進行資料的分享,這是因為NFS使用了一些其它的傳輸協議。而這些傳輸協議用到這個RPC功能的。可以說NFS本身就是使用RPC的一個程序。或者說NFS也是一個RPC SERVER。所以只要用到NFS的地方都要啟動RPC服務,不論是NFS SERVER或者NFS CLIENT。這樣SERVER和CLIENT才能通過RPC來實現PROGRAM PORT的對應。可以這麽理解RPC和NFS的關系:NFS是一個文件系統,而RPC是負責負責信息的傳輸。

1.服務端配置

nfs-utils: 這個是NFS服務主程序(包含rpc.nfsd、rpc.mountd、daemons)
rpcbind: 這個是CentOS6.X的RPC主程序(CentOS5.X的為portmap)

yum install -y nfs-utils rpcbind #安裝nfs服務端

systemctl start rpcbind
systemctl enable rpcbind #設置開機啟動

netstat -lntup |grep rpcbind #查詢rpcbind服務啟動狀態
rpcinfo -p localhost #查看NFS服務項rpc服務器註冊的端口

由於在FNS服務過程中,必須先啟動rpcbind,再啟動nfs,這樣才能讓NFS在rpcbind上註冊成功

systemctl start nfs
systemctl enable nfs #設置開機啟動

rpcinfo -p localhost #查看NFS服務項rpc服務器註冊的端口

為了規範化最好用rc.local來管理開機自啟動

[root@NFS-server ~]# ps -ef |egrep "rpc|nfs" #查看nfs相進程
rpcuser 1303 1 0 Nov22 ? 00:00:00 rpc.statd #檢查文件一致性
root 1512 2 0 Nov22 ? 00:00:00 [rpciod/0]
rpc 2723 1 0 02:43 ? 00:00:00 rpcbind
root 2896 1 0 02:56 ? 00:00:00 rpc.rquotad #磁盤配額進程
root 2901 1 0 02:56 ? 00:00:00 rpc.mountd #權限管理驗證等
root 2908 2 0 02:56 ? 00:00:00 [nfsd4]
root 2909 2 0 02:56 ? 00:00:00 [nfsd4_callbacks]
root 2910 2 0 02:56 ? 00:00:00 [nfsd]
root 2911 2 0 02:56 ? 00:00:00 [nfsd]
root 2912 2 0 02:56 ? 00:00:00 [nfsd]
root 2913 2 0 02:56 ? 00:00:00 [nfsd] #NFS主進程,管理登入,身份判定
root 2914 2 0 02:56 ? 00:00:00 [nfsd]
root 2915 2 0 02:56 ? 00:00:00 [nfsd]
root 2916 2 0 02:56 ? 00:00:00 [nfsd]
root 2917 2 0 02:56 ? 00:00:00 [nfsd]
root 2948 1 0 02:56 ? 00:00:00 rpc.idmapd #名稱映射
2.配置
vim /etc/sysconfig/nfs #可自定義mountd 和rquotad的端口
/etc/exports 是NFS程序的配置文件。並且默認為空
/etc/exports文件的配置格式為:
NFS共享目錄 NFS客戶端地址1(參數1,參數2,參數3......) 客戶端地址2(參數1,參數2,參數3......)
NFS共享目錄 NFS客戶端地址(參數1,參數2,參數3......)

配置文件(/etc/exports)

#開頭的行表示註釋

格式: share_dir client_host(permission1,permission2,...,permissionn)

參數:

(1)share_dir

共享目錄,必須是目錄,若為文件,則在掛載時會出錯.

若目錄名含有空格等字符,須用雙引號

(2)client_host

可以是單個主機(10.226.70.32),也可以是網絡段(10.226.70.0/24),支持通配符*和?

(3)permission

ro: 只讀(read-only)

rw:讀和寫(read-write)

root_squash:壓縮root用戶。當客戶端以root掛載時,則NFS服務器將root視為匿名用戶服務(nfsnobody)

no_root_squash:不壓縮root用戶。當客戶端以root掛載時,則NFS服務器仍將root視為root用戶,不×××全。
all_squash: 將遠程訪問的所有普通用戶及所屬組都映射為匿名用戶或用戶組(nfsnobody)

anonuid=xxx: 將遠程訪問的所有用戶都映射為匿名用戶,並指定該用戶為本地用戶(UID=xxx);

anongid=xxx: 將遠程訪問的所有用戶組都映射為匿名用戶組賬戶,並指定該匿名用戶組賬戶為本地用戶組賬戶(GID=xxx);
sync:同步寫磁盤

async:異步寫磁盤。

(1)多個權限間用逗號隔開

例如:

/testnfs 10.226.70.0/24(rw,sync,no_root_squash)

將服務器的/testnfs目錄共享給10.226.70.0/24網段,屬於這個網段的主機有讀寫、同步寫磁盤和不壓縮root用戶的權限。

(2)修改/etc/exports後,要使修改後的文件生效,需使用exportfs命令或重新啟動nfs服務

exportfs -ra

mkdir /data
chown -R nfsnobody.nfsnobody /data #使用nfs默認賬戶
mount /dev/sdb /data
vim /etc/exports #添加配置文件
/data 10.100.0.0/16(rw,sync)

systemctl reload nfs

showmount -e 127.0.0.1 #查看本機掛載情況
技術分享圖片

3.配置NFS客戶端
客戶端也需要安裝rpcbind和nfs-utils軟件,並且設置開機自啟動。(只需要啟動rpcbind即可)

yum -y install rpcbind nfs-utils

systemctl start rpcbind
systemctl enable rpcbind #設置開機啟動

showmount -e 10.100.5.56 #檢測掛載
技術分享圖片

mount -t nfs 10.100.5.56:/data /mnt
技術分享圖片

即可看到掛載成功

技術分享圖片

技術分享圖片

4.設置開機自動掛載
vim /etc/fatab
10.100.5.56:/data /mnt nfs defaults 0 0

nfs基本實現