VMware ESXi5.5主机无法挂载RHEL6.5 NFS存储

系统环境

系统平台:RHEL LINUX 6.5

NFS Server IP:192.168.2.19

共享目录:/mnt/parastor

VMWARE EXSI:5.5


问题描述:在VMWARE EXSI5.5上的DATASTORE里挂载一台RHEL Linux5.5虚拟机NFS服务器里的共享目录,提示如下:

错误堆栈

在 vCenter Server“VM-1”上调用对象 “datastoreSystem-29”的“HostDatastoreSystem.CreateNasDatastore” 失败。

NFS 挂载 192.168.2.19:/mnt/parastor 失败: NFS 服务器通过 TCP 不支持 MOUNT 版本 3。


(对应英文版提示为NFS server does not support MOUNT version 3 over TCP)

VMware ESXi5.5主机无法挂载RHEL6.5 NFS存储_第1张图片


这是由于NFS服务器上的服务用的是默认的UDP协议方式传输,而VMware要求必须用TCP,因此修改配置文件/etc/nfsmount.conf,取消Defaultproto=tcp行注释即可。当然有的时候,如果你修改了这项还不能成功挂载的话,请检查如下:


一、防火墙是否关闭

service iptables stop

chkconfig iptables off


二、nfs服务是否启动

chkconfig nfs on

service nfs start


三、检查exports文件

cat  /etc/exports

/mnt/parastor 192.168.110.*(rw,sync,no_root_squash)


四、修改/etc/nfsmount.conf

将如下几行的注释去掉(默认是udp,esxi需要使用tcp,esxi需要使用mount v3)

Defaultproto=tcp

Proto=tcp

mountproto=tcp

mounvers=3


五、然后重启如下服务:

service rpcbind start

service nfs restart

最后发现挂载nfs存储成功。


注意:RPC必须先启动。RPC即Remote Procedure Call Protocol(远程过程调用协议),RPCBIND用于取代旧版本中的portmap组件。 简单说,RPCBIND就是为了将不同服务与对应的端口进行绑定,以便支持机器间的互操作。原理补充:RPC 最主要的功能就是指定每个 NFS 功能所对应的 port number ,並且回报給用戶端,让用戶端可以連結到正確的端口上去。 当服务器在启动 NFS 時会随机取用数个端口,并主动的向 RPC 注册,因此 RPC 可以知道每个端口对应的 NFS 功能,然后 RPC 通过固定使用 port 111 來监听用户端的请求并回报用户端正确的端口,来确保NFS连接的成功!



另外关于FSID参数的解释:
要通过NFS共享一个目录,首先需要在/etc/exports文件中定义这个目录,并且使用fsid=0的参数。(使用fsid=0选项的时候只能共享一个目录,这个目录将成为NFS服务器的根目录。)

参看如下英文原版解释:

fsid=num
              This option forces the filesystem identification portion of the file handle and file attributes used on the
              wire to be num instead of a number derived from the major and minor number of the block device on which the
              filesystem is mounted.  Any 32 bit number can be used, but it must  be  unique  amongst  all  the  exported
              filesystems.

              This can be useful for NFS failover, to ensure that both servers of the failover pair use the same NFS file
              handles for the shared filesystem thus avoiding stale file handles after failover.

              Some Linux filesystems are not mounted on a block device; exporting these via NFS requires the use  of  the
              fsid option (although that may still not be enough).

              The  value   0  has  a  special  meaning when use with NFSv4.  NFSv4 has a concept of a root of the overall
              exported filesystem. The export point exported with fsid=0 will be used as this root.


NFS需要标志每一个导出的文件系统。通常使用文件系统的UUID(如果该文件系统有的话),或者使用存储该文件系统的设备的设备号(如果该文件系统存储在设备上)。并不是所有的文件系统都存储在设备上,也并不是所有的文件系统都有UUID,NFS需要精确标识文件系统,就需要使用fsid选项。

对于NFSv4,有一个杰出的文件系统,它是所有导出的文件系统的根目录。通过fsid=root或fsid=0来标识。标识其他文件系统,可以使用一个小的整数(任何32位数字都可以使用,但它在所有导出的文件系统中必须是唯一的),或者任意一个包含32个十六进制数字和标点符号的UUID。

Linux内核2.6.20版本及更早版本不支持UUID的设置。



背景知识:

  NFS 是Network File System的缩写,即网络文件系统。一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布。功能是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在类Unix系统间实现磁盘文件共享的一种方法。

  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是负责负责信息的传输。

你可能感兴趣的:(运维,操作系统,网络)