NFS服務

NFS

1、什麼是NFS?
NFS是Network File System的縮寫,最早由Sun公司開發,它最大的功能就是可以通過網絡讓不同的主機、不同的操作系統可以彼此共享文件,所以也可以簡單的將它看做是一個文件服務器。


2、什麼是RPC?
由於服務器端NFS功能所對應的的端口無法確定,而是採用隨機取用一些未被使用的小於1024的端口來作爲傳輸之用,這樣就造成了客戶端和服務器端鏈接的困擾,這樣就需要遠程過程調用服務,即RPC(Remote Procedure Call)。

RPC最主要的功能就是指定每個NFS功能所對應的的端口號,並且傳遞信息給客戶端,讓客戶端可以連接到正確的端口上去。

RPC又是如何知道每個NFS的端口呢?
這是因爲服務器在啓用NFS時會隨機取用數個端口,並向RPC註冊,因此RPC可以知道每個端口對應的NFS功能,然後RPC固定使用port 111來監聽客戶端的需求並應答給客戶端正確的端口,這就是NFS的啓動流程了!

這是我理解的NFS、RPC以及文件系統之間的關係圖:

如上圖所示,當客戶端有NFS文件存取需求時,它將會如何向服務器端請求數據呢?
1、客戶端會向服務器端的RPC(port 111)發出NFS文件存取功能的詢問請求。
2、服務器端找到對應的已註冊的NFS服務器端的端口後,會通知客戶端。
3、客戶端了解正確的端口後,就可以與NFS服務器端建立連接。

注意:啓動NFS之前,RPC就要先啓動了,否則NFS會無法向RPC註冊,另外,RPC若重新啓動,原
來註冊的端口數據都會不見,因此RPC重新啓動後,它管理的所有程序都需要重新啓動以重新向
RPC註冊。

下面我們在redhat5.8上簡單介紹一下NFS的使用:

  1. NFS Server端的配置: 
  2. NFS的主程序:nfs-utils         #redhat5.8上NFS服務已經建立,只需啓動即可使用              
  3. RPC的主程序:portmap           #redhat5.8上portmap服務已經開啓了 
  4.        111/tcp , 111/udp 
  5. nfs會啓動三個進程: nfsd(服務), mountd(掛載), quotad(配額進程) 
  6. nfsd: 2049/tcp, 2049/udp 
  7. mountd:端口半隨機的 
  8. quotad:端口半隨機的 
  9.  
  10. nfs的配置文件:  在這裏定義共享那個目錄出去,能夠讓客戶端掛載,像使用本地文件系統一樣 
  11. /etc/exports 
  12. /path/to/somedir CLIENT_LIST 
  13.     多個用戶端之間使用空白字符分隔 
  14.      
  15. 每個客戶端後面必須跟一個小括號,裏面定義了此客戶訪問特性,如訪問權限等 
  16. 例如:172.16.0.0/16(ro,async) 192.16.0.0/24(rw,sync) 
  17.  
  18. 服務器端常用命令: 
  19. showmount:  
  20.     -e: 查看服務器共享了那些目錄 
  21.     -a: 列出所有的客戶端名稱或IP地址以及掛載的目錄 
  22.      
  23. showmount -e NFS_SERVER: 查看NFS服務器‘導出’的各文件系統 
  24. showmount -a NFS_SERVER: 查看NFS服務器所有被掛載的文件系統及客戶端對應列表 
  25. showmount -d NFS_SERVER:顯示NFS服務器所有導出的文件系統中被客戶端掛載了的文件系統列表 
  26.  
  27. exportfs命令: 
  28.     -a: 跟-r或-u選項同時使用,表示重新掛載所有文件系統或取消導出所有文件系統; 
  29.     -r: 重新導出 
  30.     -u: 取消導出 
  31.     -v: 可以顯示詳細信息 
  32.  
  33. 客戶端使用mount命令直接掛載 
  34. mount -t nfs NFS_SERVER:/PATH/TO/SOME_EAPORT  /PATH/TO/SOMEWHERE       跟上對方所導出的路徑 
  35.  
  36. 文件系統導出屬性: 
  37.     ro:只讀權限 
  38.     rw:可讀寫的權限 
  39.     sync:同步寫入 
  40.     async:異步寫入 
  41.     root_squash: 將root用戶映射爲來賓賬號,自動開啓的屬性 
  42.     no root_squash: 保留管理員自身的權限 
  43.     all_squash: 無論是誰,都映射爲來賓賬號 
  44.     anonuid,anongid: 指定映射的來賓賬號的UID和GID; 
  45.      
  46. 讓mountd和quotad等進程監聽在固定端口,編輯配置文件/etc/sysconfig/nfs

這是安裝nfs-utils生成的文件,這兩個文件是nfs服務的核心文件,非常重要!

圖文詳解命令的使用以及一些常用的配置問題:

1、在服務器端編輯配置文件(說明導出哪些目錄),而後重啓服務

  1. [root@localhost ~]# mkdir /shared  #這個目錄是用來共享出去的
  2. [root@localhost ~]# vim /etc/exports 

  1. [root@localhost ~]# service nfs restart 
  2. Shutting down NFS mountd:                                  [  OK  ] 
  3. Shutting down NFS daemon:                                  [  OK  ] 
  4. Shutting down NFS quotas:                                  [  OK  ] 
  5. Shutting down NFS services:                                [  OK  ] 
  6. Starting NFS services:                                     [  OK  ] 
  7. Starting NFS quotas:                                       [  OK  ] 
  8. Starting NFS daemon:                                       [  OK  ] 
  9. Starting NFS mountd:                                       [  OK  ] 
  10. [root@localhost ~]# showmount -e 172.16.25.11 
  11. Export list for 172.16.25.11:  #這個命令的使用上邊有介紹
  12. /shared 172.16.0.0/16 

2、在客戶端創建目錄,用於掛載服務器端導出的目錄

  1. [root@mail ~]# mkdir /mnt/nfs 
  2. [root@mail ~]# showmount -e 172.16.25.11  #這類命令在客戶端同樣可以使用,只要指明服務器端地址
  3. Export list for 172.16.25.11: 
  4. /shared 172.16.0.0/16 
  5. [root@mail ~]# mount -t nfs 172.16.25.11:/shared /mnt/nfs 
  6. [root@mail ~]# cd /mnt/nfs 
  7. [root@mail nfs]# ls 
  8. [root@mail nfs]#  

3、在服務器端複製一個文件到/shared目錄下,驗證共享屬性

  1. 在服務器端拷貝一個文件至/shared目錄下:  
  2. [root@localhost ~]# cp /etc/fstab /shared/  
  3.   
  4. 客戶端查看:  
  5. [root@mail nfs]# ls  
  6. fstab  
  7. [root@mail nfs]# cp fstab /tmp  
  8. [root@mail nfs]# ls /tmp  
  9. fstab  initrd  mysql.sock  pear  postfix  sess_9okl4jioa9pk3dsehhcv672bmsfde0oj  
  10. [root@mail nfs]# rm fstab  
  11. rm: remove write-protected regular file `fstab'? y  
  12. rm: cannot remove `fstab': Read-only file system #服務器端設定的共享屬性爲只讀,所以不能刪除  

在服務器端可以查看被掛載的文件系統及客戶端對應列表

  1. [root@localhost ~]# showmount -a 172.16.25.11 
  2. All mount points on 172.16.25.11: 
  3. 172.16.25.3:/shared 
  4. [root@localhost ~]# 

4、在服務器端重新導出一個文件

  1. [root@localhost ~]# vim /etc/exports 

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

刪除/var/ftp

  1. [root@localhost ~]# showmount -e 172.16.25.11 
  2. Export list for 172.16.25.11: 
  3. /shared  172.16.0.0/16 
  4. /var/ftp 172.16.0.0/16 
  5. [root@localhost ~]# vim /etc/exports 

在服務器端取消導出所有文件系統

  1. [root@localhost ~]# exportfs -auv 

在客戶端上卸載/mnt/nfs

  1. [root@mail ~]# umount /mnt/nfs 
  2. [root@localhost ~]# showmount -d 172.16.25.11 
  3. Directories on 172.16.25.11:      ##沒有目錄被客戶端掛載的文件系統 

在服務器端重新導出/shared

5、在服務器端創建一個用戶

6、在客戶端也創建一個用戶

客戶端重新掛載

7、重新編輯服務器端的配置文件

  1. [root@localhost ~]# vim /etc/exports 

 

重新導出

  1. [root@localhost ~]# exportfs -arv 
  2. exporting 172.16.0.0/16:/shared 

8、客戶端su到qsl的家目錄下,在/mnt/nfs目錄下創建一個文件

在服務器端查看這個文件

在客戶端以root用戶的身份執行某些操作

二、如何讓客戶端自動掛載服務器端導出的目錄?

  1. [root@mail ~]# vim /etc/fstab #在客戶端操作的

編輯好配置文件後,客戶端先卸載然後重新掛載

  1. [root@mail ~]# !umount 
  2. umount /mnt/nfs 
  3. [root@mail ~]# mount -a  #表示掛載/etc/fstab配置文件下的所有文件系統
  4. [root@mail ~]# mount 
  5. /dev/mapper/vol0-root on / type ext3 (rw) 
  6. proc on /proc type proc (rw) 
  7. sysfs on /sys type sysfs (rw) 
  8. devpts on /dev/pts type devpts (rw,gid=5,mode=620) 
  9. /dev/mapper/vol0-home on /home type ext3 (rw) 
  10. /dev/sda1 on /boot type ext3 (rw) 
  11. tmpfs on /dev/shm type tmpfs (rw) 
  12. none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) 
  13. sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw) 
  14. /dev/hda1 on /mnt/boot type ext3 (rw) 
  15. /dev/hda2 on /mnt/sysroot type ext3 (rw) 
  16. /dev/mapper/myvg-mydata on /mydata type ext3 (rw) 
  17. 172.16.25.11:/shared on /mnt/nfs type nfs (rw,addr=172.16.25.11) 

三、如何把所有的來賓賬號都映射爲一個用戶

1、現在服務器端創建一個用戶,然後編輯配置文件

2、這樣就把所有的來賓賬號都映射爲了nfstest用戶了

這就是NFS服務配置過程中常用的命令介紹,以及一些在工作中很常見的配置問題的說明,不足之處,望大家多多原諒!

 

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