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的使用:
- NFS Server端的配置:
- NFS的主程序:nfs-utils #redhat5.8上NFS服務已經建立,只需啓動即可使用
- RPC的主程序:portmap #redhat5.8上portmap服務已經開啓了
- 111/tcp , 111/udp
- nfs會啓動三個進程: nfsd(服務), mountd(掛載), quotad(配額進程)
- nfsd: 2049/tcp, 2049/udp
- mountd:端口半隨機的
- quotad:端口半隨機的
- nfs的配置文件: 在這裏定義共享那個目錄出去,能夠讓客戶端掛載,像使用本地文件系統一樣
- /etc/exports
- /path/to/somedir CLIENT_LIST
- 多個用戶端之間使用空白字符分隔
- 每個客戶端後面必須跟一個小括號,裏面定義了此客戶訪問特性,如訪問權限等
- 例如:172.16.0.0/16(ro,async) 192.16.0.0/24(rw,sync)
- 服務器端常用命令:
- showmount:
- -e: 查看服務器共享了那些目錄
- -a: 列出所有的客戶端名稱或IP地址以及掛載的目錄
- showmount -e NFS_SERVER: 查看NFS服務器‘導出’的各文件系統
- showmount -a NFS_SERVER: 查看NFS服務器所有被掛載的文件系統及客戶端對應列表
- showmount -d NFS_SERVER:顯示NFS服務器所有導出的文件系統中被客戶端掛載了的文件系統列表
- exportfs命令:
- -a: 跟-r或-u選項同時使用,表示重新掛載所有文件系統或取消導出所有文件系統;
- -r: 重新導出
- -u: 取消導出
- -v: 可以顯示詳細信息
- 客戶端使用mount命令直接掛載
- mount -t nfs NFS_SERVER:/PATH/TO/SOME_EAPORT /PATH/TO/SOMEWHERE 跟上對方所導出的路徑
- 文件系統導出屬性:
- ro:只讀權限
- rw:可讀寫的權限
- sync:同步寫入
- async:異步寫入
- root_squash: 將root用戶映射爲來賓賬號,自動開啓的屬性
- no root_squash: 保留管理員自身的權限
- all_squash: 無論是誰,都映射爲來賓賬號
- anonuid,anongid: 指定映射的來賓賬號的UID和GID;
- 讓mountd和quotad等進程監聽在固定端口,編輯配置文件/etc/sysconfig/nfs
這是安裝nfs-utils生成的文件,這兩個文件是nfs服務的核心文件,非常重要!
圖文詳解命令的使用以及一些常用的配置問題:
1、在服務器端編輯配置文件(說明導出哪些目錄),而後重啓服務
- [root@localhost ~]# mkdir /shared #這個目錄是用來共享出去的
- [root@localhost ~]# vim /etc/exports
- [root@localhost ~]# service nfs restart
- Shutting down NFS mountd: [ OK ]
- Shutting down NFS daemon: [ OK ]
- Shutting down NFS quotas: [ OK ]
- Shutting down NFS services: [ OK ]
- Starting NFS services: [ OK ]
- Starting NFS quotas: [ OK ]
- Starting NFS daemon: [ OK ]
- Starting NFS mountd: [ OK ]
- [root@localhost ~]# showmount -e 172.16.25.11
- Export list for 172.16.25.11: #這個命令的使用上邊有介紹
- /shared 172.16.0.0/16
2、在客戶端創建目錄,用於掛載服務器端導出的目錄
- [root@mail ~]# mkdir /mnt/nfs
- [root@mail ~]# showmount -e 172.16.25.11 #這類命令在客戶端同樣可以使用,只要指明服務器端地址
- Export list for 172.16.25.11:
- /shared 172.16.0.0/16
- [root@mail ~]# mount -t nfs 172.16.25.11:/shared /mnt/nfs
- [root@mail ~]# cd /mnt/nfs
- [root@mail nfs]# ls
- [root@mail nfs]#
3、在服務器端複製一個文件到/shared目錄下,驗證共享屬性
- 在服務器端拷貝一個文件至/shared目錄下:
- [root@localhost ~]# cp /etc/fstab /shared/
- 客戶端查看:
- [root@mail nfs]# ls
- fstab
- [root@mail nfs]# cp fstab /tmp
- [root@mail nfs]# ls /tmp
- fstab initrd mysql.sock pear postfix sess_9okl4jioa9pk3dsehhcv672bmsfde0oj
- [root@mail nfs]# rm fstab
- rm: remove write-protected regular file `fstab'? y
- rm: cannot remove `fstab': Read-only file system #服務器端設定的共享屬性爲只讀,所以不能刪除
在服務器端可以查看被掛載的文件系統及客戶端對應列表
- [root@localhost ~]# showmount -a 172.16.25.11
- All mount points on 172.16.25.11:
- 172.16.25.3:/shared
- [root@localhost ~]#
4、在服務器端重新導出一個文件
- [root@localhost ~]# vim /etc/exports
showmount -d NFS_SERVER:顯示NFS服務器所有導出的文件系統中被客戶端掛載了的文件系統列表
刪除/var/ftp
- [root@localhost ~]# showmount -e 172.16.25.11
- Export list for 172.16.25.11:
- /shared 172.16.0.0/16
- /var/ftp 172.16.0.0/16
- [root@localhost ~]# vim /etc/exports
在服務器端取消導出所有文件系統
- [root@localhost ~]# exportfs -auv
在客戶端上卸載/mnt/nfs
- [root@mail ~]# umount /mnt/nfs
- [root@localhost ~]# showmount -d 172.16.25.11
- Directories on 172.16.25.11: ##沒有目錄被客戶端掛載的文件系統
在服務器端重新導出/shared
5、在服務器端創建一個用戶
6、在客戶端也創建一個用戶
客戶端重新掛載
7、重新編輯服務器端的配置文件
- [root@localhost ~]# vim /etc/exports
重新導出
- [root@localhost ~]# exportfs -arv
- exporting 172.16.0.0/16:/shared
8、客戶端su到qsl的家目錄下,在/mnt/nfs目錄下創建一個文件
在服務器端查看這個文件
在客戶端以root用戶的身份執行某些操作
二、如何讓客戶端自動掛載服務器端導出的目錄?
- [root@mail ~]# vim /etc/fstab #在客戶端操作的
編輯好配置文件後,客戶端先卸載然後重新掛載
- [root@mail ~]# !umount
- umount /mnt/nfs
- [root@mail ~]# mount -a #表示掛載/etc/fstab配置文件下的所有文件系統
- [root@mail ~]# mount
- /dev/mapper/vol0-root on / type ext3 (rw)
- proc on /proc type proc (rw)
- sysfs on /sys type sysfs (rw)
- devpts on /dev/pts type devpts (rw,gid=5,mode=620)
- /dev/mapper/vol0-home on /home type ext3 (rw)
- /dev/sda1 on /boot type ext3 (rw)
- tmpfs on /dev/shm type tmpfs (rw)
- none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
- sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
- /dev/hda1 on /mnt/boot type ext3 (rw)
- /dev/hda2 on /mnt/sysroot type ext3 (rw)
- /dev/mapper/myvg-mydata on /mydata type ext3 (rw)
- 172.16.25.11:/shared on /mnt/nfs type nfs (rw,addr=172.16.25.11)
三、如何把所有的來賓賬號都映射爲一個用戶
1、現在服務器端創建一個用戶,然後編輯配置文件
2、這樣就把所有的來賓賬號都映射爲了nfstest用戶了
這就是NFS服務配置過程中常用的命令介紹,以及一些在工作中很常見的配置問題的說明,不足之處,望大家多多原諒!