NFS伺服器
環境:
VMware workstation 10
centos6.4作業系統
兩台或兩台以上虛拟系統
RPC(Remote Procedure Call Protocol)——遠端過程調用協定,它是一種通過網絡從遠端計算機程式上請求服務,而不需要了解底層網絡技術的協定。RPC協定假定某些傳輸協定的存在,如TCP或UDP,為通信程式之間攜帶資訊資料。在OSI網絡通信模型中,RPC跨越了傳輸層和應用層。RPC使得開發包括網絡分布式多程式在内的應用程式更加容易
運作時,一次客戶機對伺服器的RPC調用,其内部操作大緻有如下十步:
1.調用用戶端句柄;執行傳送參數
2.調用本地系統核心發送網絡消息
3.消息傳送到遠端主機
4.伺服器句柄得到消息并取得參數
5.執行遠端過程
6.執行的過程将結果傳回伺服器句柄
7.伺服器句柄傳回結果,調用遠端系統核心
8.消息傳回本地主機
9.客戶句柄由核心接收消息
10.客戶接收句柄傳回的資料
在Linux與windows之間用rpc也是一種選擇,但不是最佳
主要用于實作網絡存儲
在nfs用戶端,會用rpc.mountd來連接配接對方的portmapper(發出連接配接請求.portmapper接收到請求之後會同rpc.mountd來協商通信端口,之後rpc.mountd會利用端口進行挂載到本地)
nfs工作時是将遠方的磁盤挂載到本地
rpciod 是連接配接到對方的nfs上進行io操作的服務程序
nlockmgr是保證在衆多的客戶連接配接在進行io操作時資料的一緻性,即對正在寫操作的檔案進行加鎖保護
status主要是靠發送封包的形式維持客戶與伺服器的連接配接狀态
[root@localhost ~]# rpcinfo
-bash: rpcinfo: command not found
[root@localhost etc]# mount /dev/cdrom /media/cdrom
mount: block device /dev/sr0 is write-protected, mounting read-only
[root@localhost etc]# cd /media/cdrom/Packages/
[root@localhost Packages]# ll rpc*
-r--r--r--. 3 root root 52096 Feb 23 2013 rpcbind-0.2.0-11.el6.i686.rpm
[root@localhost Packages]# rpm -qa |grep rpc
xmlrpc-c-client-1.16.24-1209.1840.el6.i686
xmlrpc-c-1.16.24-1209.1840.el6.i686
[root@localhost Packages]# yum --disablerepo=\* --enablerepo=c6-media install rpcbind
[root@localhost Packages]# rpcinfo
rpcinfo: can't contact rpcbind: RPC: Remote system error - No such file or directory
[root@localhost ~]# service rpcbind start
Starting rpcbind: [ OK ]
program version netid address service owner
100000 4 tcp6 ::.0.111 portmapper superuser
100000 3 tcp6 ::.0.111 portmapper superuser
100000 4 udp6 ::.0.111 portmapper superuser
100000 3 udp6 ::.0.111 portmapper superuser
100000 4 tcp 0.0.0.0.0.111 portmapper superuser
100000 3 tcp 0.0.0.0.0.111 portmapper superuser
100000 2 tcp 0.0.0.0.0.111 portmapper superuser
100000 4 udp 0.0.0.0.0.111 portmapper superuser
100000 3 udp 0.0.0.0.0.111 portmapper superuser
100000 2 udp 0.0.0.0.0.111 portmapper superuser
100000 4 local /var/run/rpcbind.sock portmapper superuser
100000 3 local /var/run/rpcbind.sock portmapper superuser
還可以用 -p 參數來指定主機端口
[root@localhost ~]# rpcinfo -p 127.0.0.1
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
[root@localhost ~]# chkconfig rpcbind on
[root@localhost ~]# mkdir /share1
編輯通路共享清單清單
關于這個檔案的編寫格式及含義,大家可以參閱man手冊(可能要先安裝)
在這其中有幾個重要的參數如,no_root_squash,在寫操做時映射為匿名賬戶
清單如下,如允許192.168.2.188進行讀寫操作,并同步操作,如圖

網絡權限為讀寫,那麼本地的相關權限也要打開
[root@localhost ~]# ll -d /share1/
drwxr-xr-x. 2 root root 4096 Feb 20 00:44 /share1/
[root@localhost ~]# chmod o+wt /share1/
開啟nfs服務,并将共享清單釋放出去
[root@localhost ~]# service nfs start
Starting NFS services: [ OK ]
Starting NFS quotas: [ OK ]
Starting NFS mountd: [ OK ]
Starting NFS daemon: [ OK ]
[root@localhost ~]# chkconfig nfs on
[root@localhost ~]# exportfs -rv
exporting 192.168.2.188:/share1
關閉防火牆功能,或修改selinux配置檔案(開機自動關閉)
[root@localhost ~]# vim /etc/sysconfig/selinux
[root@localhost ~]# service iptables stop
iptables: Flushing firewall rules: [ OK ]
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Unloading modules: [ OK ]
客戶機的也關閉
[root@localhost ~]# chkconfig iptables off
[root@localhost ~]# setenforce 0
[root@localhost ~]# mount /dev/sr0 /media/cdrom
[root@localhost ~]#
[root@localhost ~]# yum --disablerepo=\* --enablerepo=c6-media install rpcbind
[root@localhost ~]# mkdir /mnt/nfs
[root@localhost ~]# showmount
-bash: showmount: command not found
[root@localhost ~]# yum --disablerepo=\* --enablerepo=c6-media install nfs-utils
但是在執行showmount指令時沒有,是以要安裝和它有關的軟體包,在不知道具體軟體的情況下可以在
在服務機上進行下列工作可以查出所需指令的軟體包
[root@localhost ~]# which showmount
/usr/sbin/showmount
[root@localhost ~]# rpm -qf 'which showmount' #` `是反引号,不是單引号,正規表達式規則
error: file /root/which showmount: No such file or directory
[root@localhost ~]# rpm -qf `which showmount`
nfs-utils-1.2.3-36.el6.i686
然後在客戶機上安裝
[root@localhost ~]# showmount -e 192.168.2.199
Export list for 192.168.2.199:
/share1 192.168.2.188
[root@localhost ~]# mount 192.168.2.199:/share1 /mnt/nfs
[root@localhost ~]# mount
/dev/sda2 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
vmware-vmblock on /var/run/vmblock-fuse type fuse.vmware-vmblock (rw,nosuid,nodev,default_permissions,allow_other)
/dev/sr0 on /media/cdrom type iso9660 (ro)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
192.168.2.199:/share1 on /mnt/nfs type nfs (rw,vers=4,addr=192.168.2.199,clientaddr=192.168.2.188)
[root@localhost ~]# cd /mnt/nfs
[root@localhost nfs]# ll
total 0
[root@localhost nfs]# touch f1
-rw-r--r--. 1 nfsnobody nfsnobody 0 Feb 20 01:57 f1 #權限正常
測試其他ip的主機能否操作
先解除安裝本地挂載點
[root@localhost nfs]# cd
[root@localhost ~]# fuser -km /mnt/nfs
[root@localhost ~]# umount /mnt/nfs
修改用戶端的ip(臨時ip)
權限拒絕
測試針對所有人的挂載操作
[root@localhost ~]# vim /etc/exports
exporting *:/share1
mount檢視結果,先測試192.168.2.188
并進如目錄,(129.168.2.177身份)實際測試
自動挂載測試
[root@localhost ~]# vim /etc/fstab
測試,(先確定以前的已解除安裝)
解決rpc中status狀态占用帶寬的問題,借助于自動檔案系統,可能要先安裝自動檔案系統的相關包
[root@localhost ~]# rpm -qa |grep auto
avahi-autoipd-0.6.25-12.el6.i686
[root@localhost ~]# yum --disablerepo=\* --enablerepo=c6-media install autofs
[root@localhost ~]# vim /etc/auto.master
[root@localhost ~]# cp /etc/auto.misc /etc/auto.nfs
[root@localhost ~]# vim /etc/auto.nfs
注意上圖中的檔案格式是不正确的,因為檔案參數預設以空格為分隔符,正确為
修改行的參數意義為:去監控/mnt目錄,當60之後該目錄沒有任何io操作時,将去執行/etc/auto.nfs中的内容
而在/etc/auto.nfs中我們的檔案參數含義為,挂載192.168.2.199:/share1到/nfs1(/mnt/)目錄中去,注意此時我們監控的是在/mnt目錄下。是以會自動在該目錄下建立子目錄,不需要事先存在
,且該目錄會在逾時後自動消失
[root@localhost mnt]# service autofs restart
Stopping automount: [ OK ]
Starting automount: [ OK ]
[root@localhost mnt]# cd nfs1/
[root@localhost nfs1]# mount
192.168.2.199:/share1 on /mnt/nfs1 type nfs (rw,soft,intr,sloppy,vers=4,addr=192.168.2.199,clientaddr=192.168.2.188)
監視mount
[root@localhost nfs1]# cd
[root@localhost ~]# watch -n 1 'mount'
沒有挂載,然後進入,(會自動挂載)
回到主目錄,等候60秒,讓其自動解除安裝
[root@localhost ~]# cd
[root@localhost ~]# pwd
/root
我們的實驗正常結果應該是解決在進入指定目錄後,會自動挂載,并在逾時時間内自動解除安裝,
結果正常,測試結束.