一、簡介
二、工作原理
三、安裝配置
一、簡介
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服務啟動。
具體過程如下:
-
本地用戶要訪問nfs服務器中文件,先向內核發起請求,內核處理調用nfs模塊及rpc client
-
rpc client向rpc server發起連接
-
在連接之前,NFS服務除了啟動nfsd本身監聽的端口2049/tcp和2049/udp,還會啟動其它進程(如mountd,statd,rquotad等)以完成文件共享,這些進程的端口是不固定的;是每次NFS服務啟動時向RPC服務注冊的,RPC服務會隨機分配未使用的端口
-
完成連接,接受訪問請求
-
nfs應用程序向內核發起請求
-
內核調用文件系統
然后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
# yum install nfs-utils rpcbind -y
#systemctl start nfs
# mount -t nfs 192.168.1.222:/var/nfs /mnt
#showmount –e 192.168.1.222
將所有用戶映射為來賓賬號實驗
-
在服務器端添加用戶hot,並修改配置文件並重新掛載文件系統
添加用戶
useradd –u 520 hot
修改/etc/exports
/var/nfs 192.168.1.0/24(rw,async,all_squash,anonuid=520)
重新掛載導出
exportfs –ra
-
在客戶端上添加用戶code,分別在code用戶和root用戶下創建文件,查看文件屬性
可以看到文件屬主都為服務器端設置好的來賓賬號hot的uid
讓mountd和quotad等進程監聽在固定端口,編輯配置文件/etc/sysconfig/nfs,取消注釋
重啟nfs,查看端口