Linux虚拟机和arm开发板间的NFS服务配置

来源:互联网 发布:斗鱼抢鱼丸软件 编辑:程序博客网 时间:2024/05/21 21:01

很多嵌入式开发环境中,都需要在上位机和开发板之间配置NFS服务来实现两者间的通信和共享。所谓NFS,即是网络文件系统NetworkFileSystem的缩写。NFS最早由Sun公司开发,其最主要的功能就是可以通过网络让不同机器、不同操作系统之间共享文件。NFS一般由两个主要部分:一台服务器和一台或多台客户机。NFS服务允许客户机将远程服务器中共享的目录挂载到本地,用户和程序可以像访问本地文件一样访问远端系统上的文件。

我这几天在实验室几经周折再PC和开发板间搭建了NFS,现将过程总结如下,以便日后再用时方便查询。

所使用的环境和设备:

主机操作系统:Window7 ultimate

虚拟机:VMwareWorkstation 7.1.0 build

虚拟机操作系统:Ubuntu11.10,内核3.0.0

开发板:迈冲科技MC9260,处理器arm9,内核2.6.20

配置虚拟机网络:

要在Ubuntu系统里搭建NFS服务,就要为其分配固定的ip地址,所以此虚拟机要以Bridged方式桥接到网络中,不能使用NAT方式上网。

安装NFS服务器:

在较新版本的linux内核中,都已经包含了NFS客户端程序。在配置NFS只需安装NFS服务,Ubuntu中命令如下:

$sudoapt-get install nfs-kernel-server

这里需要注意的是,通常NFS服务由portmapnfsdrpc.nfsd)和rpc.mountd这三个主要服务构成,而且安装结束后Ubuntu会自动启动NFS服务。我开始并未注意到这一点,网上有很多帖子说挂载失败是因为没有启动portmap服务,但反复多次配置、重启甚至重装portmap后没有效果。Ubuntu已经默默地做好了这些事。

配置NFS服务器:

NFS服务器的配置文件为/etc/exports,其格式如下:

共享目录客户端主机(NFS参数)

例如/home/leon/share*(rw,sync)

编辑配置文件后,需重启NFS服务,命令如下:

$sudo/etc/init.d/nfs-kernel-server restart

使用NFS服务:

不出意外,按照上面的配置,NFS服务应该就使用了。可以先用主机自己做测试,例如:

$sudo mount –t nfs 211.87.235.141:/home/leon/share /mnt

其中,211.87.235.141NFS服务器ip/home/leon/share为共享目录,/mnt为挂载目录。

问题和解决:

经过上面的配置和测试,在我搭建的环境中,本机和局域网内的其他虚拟机都能挂载共享目录,唯独用开发板挂载时失败:

一番百度、google后,大家对解决方案各执一词,为了解决问题,不免一一试验:关闭系统防火墙、配置和重启portmap服务、修改/etc/exports配置文件和在mount命令上加上各种复杂的参数。期间sudoufw disable这样的命令不知道搞了多少次,无奈开发板就是mount不上。

再重复下这时的情况:我自己的和局域网内其他的虚拟机可以成功挂载NFS的共享目录,NFS服务器的配置应该没有大问题。虚拟机和开发板之间可以相互Ping通,其网络连接没有问题。但用开发板去挂载虚拟机的共享目录就不能成功。很纠结。

再来看一下错误提示:RPCTimedoutRPC是远程过程调用服务,其主要功能是制定每个NFS功能所对应的端口号,并且将该端口信息传递给客户端,让客户端连接到正确的端口上。Linux中端口映射由portmap负责,于是又照着网上各路高手的指点配置portmap,但仍未能解决问题。再啰嗦一下,其实就像前面已经说过的,Ubuntu已经默默地做好了portmap的工作了。作为一个小白,这种情况下自然是各种纠结。还好,最终在一本《linux系统移植》的书上找到了答案:RPCTimedout并不是服务器的端口映射没响应,而是它根本没收到RPC包。虽然在前面的配置过程中,已经关闭了Ubuntu的防火墙,但却忽略了一个重要的问题,这里的Ubuntu毕竟只是一个虚拟机,外面主机的防火墙还在尽职尽责地检查着进出物理网卡的数据包。这里起作用的不仅有windows防火墙,为了做各种测试,我的windows防火墙早就已经关了,其他的安全软件例如小红伞、360等都会对RPC包进行拦截。例如,在我的主机上,把小红伞的防火墙关闭后,开发板就可以顺利地挂在NFS服务器上的共享目录了。



原创粉丝点击