CentOS6.3 通过NFS挂载根文件系统的问题

CentOS 6.3是目前最新的CentOS版本,此次在挂载根文件系统的时候破费周折,特此记录一下。

目标平台:HI3531  Cortex-A9

在CentOS 6.3当中,虚拟机的nfs服务已经默认安装,通过NFS挂载rootfs需要注意两个地方:

首先,检查系统是否安装了nfs和rpc相关软件,或者是否安装完整等。

通过命令:

root@localhost~# rpm -qa | grep nfs 


root@localhost~# rpm -qa | grep rpc




查看。如果没有安装就需要通过yum install进行完整安装,排除问题发生在安装软件这个环节。

其次,确认nfs服务和rpc服务都已经运行,通过命令ps -eaf | rpc 和ps -eaf | nfs来查看进程是否运行。




第三,确认端口没有被防火墙给“”墙“了。rpcbind负责nfs服务主机和客户机之间的地址映射和解析,并使用111端口,如果rpcbind服务没有正常运行或者

111端口没有正常通过防火墙进行转发,那么nfs客户端将无法正常挂载NFS共享目录。

当上述几步都正确配置之后,我们在linux客户端的终端上,使用showmount -e xxx.xxx.xxx.xxx(主机ip)命令可以查看目标主机的NFS共享目录情况。如果

配置正确,终端将打印目标主机的NFS共享目录路径。


笔者在调试过程中,出现了以下两种错误:

第一类错误打印: root@localhost~:clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)

第二类错误打印:root@localhost~:RPCProgram not registered

第一类错误,有两种原因造成。

①是因为rpcbind服务未能正常启动或者服务异常造成的,在CentOS 6.3当中,portmap服务由rpcbind负责,这一点我们可以通过yum install portmap证实。源服务器会自动解析到rpcbind这个包。


②防火墙配置问题。通过修改/etc/iptables脚本目录,添加111、2049等nfs和rpc服务使用的端口。或者直接关闭防火墙(不建议,除非你的虚拟机就在安全的局域网内或者虚拟机不作为网络服务器使用)。同时,也可以通过图形化界面去配置和编辑防火墙规则(iptables)。这里要注意一下,在CentOS 6.3当中,/etc目录下有多个iptables脚本文件,确保选择IPV4相关脚本(如果使用IPV6,请选择对应脚本修改)。


如果对命令不熟悉,可以到图形化界面进行配置,如下图所示:


第二类错误,是笔者进行了防火墙配置和重启RPC服务的操作之后产生的。通过在nfsstats命令查看当前NFS服务启动和配置情况,发现下图中的rpcidmapd服务未能正常启动,导致NFS挂载异常。



手动重启之后,同时再次使用service nfs restart命令重新启动NFS服务,客户机showmount命令正常打印了主机共享的NFS目录。

重启开发板之后,根文件系统正常挂载。


你可能感兴趣的:(嵌入式开发)