嵌入式Linux 下,NFS是一个重要应用.在开发板mount 到一个NFS服务器上,就相当于把远程的NFS目录当开发一个目录,可以修改,打开和运行程序.这样不需要拷贝即可运行程序,而且可以减少Flash 的损耗。在嵌入式LINUX应用相当广泛。以下是开发中使用NFS的一些问题。
- Redhat 9.0 启用NFS服务器后,启动时间变得很长
因为每次客户端mount过NFS而又没有正常umount后,在/var/lib/nfs/rmtab里会留下记录,每次NFS启动的时候都会去check以前的IP,如果不通,要等到timeout才行 。解决办法:把这个文件/var/lib/nfs/rmtab删除。下次重启就再去做检测了。
可以试试 Allego NFS Server,本身体积不大。但是经我测试,可以在在开发板共享WINDOWS目录,也能远程运行WINDOWS文件系统的ARM LINUX程序。唯一不足是一个商业版软件。
要用busybox 下的mount 命令(并且把NFS support 选项打开)
如果对端是redhat 9.0,只要简单的执行下列命令即可。
mount –o nolock 192.168.1.145:/home/hxy /mnt
上一句表示把NFS服务器(192.168.1.145)上的/home/hxy 挂载到/mnt 上。
如果对端是RHEL NFS服务器,需要更加复杂执行语句,其中-t nfs 好象要必加,否则一执行文件读写操作就会报No response。
mount -t nfs -o intr,nolock,rsize=1024,wsize=1024 192.168.3.107:/home/hxy /mnt
另外,NFS服务器上共享目录一定要打开"将远程根目录用户视为本地根目录用户",否则mount后的路径只能只读
这个要修改LINUX的启动参数来完成。下面是一般教程介绍的完整的NFS启动参数
console=ttySAC0 root=/dev/nfs nfsroot=192.168.0.146:/home/root_nfs ip=192.168.0.231:192.168.0.146:192.168.0.146:255.255.255.0:sbc2440.arm9.net:eth0:off
但实际上不用这么复杂,我在教学和实际开发里都是采用简化参数
console=noinitrd ttySAC0 root=/dev/nfs nfsroot=192.168.3.77:/home/root_nfs ip=192.168.3.230
其中nfsroot是NFS路径,ip是开发板路径。这一种启动方法的一个要求就是开发板启动根文件系统后。用ifconfig 设置IP时,要用设成与ip=192.168.3.230 这个IP相同的值,否则启动一半就会停下来。一般的开发板是启动时找/etc/init.d/rcS,在这里要加入
ifconfig eth0 192.168.3.230
补充新一则:
缺省网关的对NFS的影响.
近日在上课时时的点对点的NFS环境中,(即开发板通过交叉网线直接与笔记本上的虚拟机的RHEL5的NFS服务器联接).
多次检查自己网络环境,各个设备都能互相ping.本地检查NFS也能mount上。但是就是开发板连不上NFS的服务器。
在课堂演示无数次NFS连接开发板。无奈之下,只能用WireShark截包分板NFS服务器和开发板之间发生了什么事。一抓之下,发现NFS服务器在两者建立联接后,会首先发一个ARP广播包,查找缺省网关192.168.1.但是是封闭环境。因此网关不可能响应,NFS服务器就停止了后续动作。
用route del default 命令来临时删除缺省网关后,问题得得到解决,但是原因相当奇怪。
补充二.
再补充一个NFS的影响。
停止NFS报错
nfsd: last server has exited
nfsd: unexporting all filesystems
启动也NFS报错,并且无法正常联接:
RPC: failed to contact local rpcbind server (errno 5).
NFSD: Using /var/lib/nfs/v4recovery as the NFSv4 state recovery directory
NFSD: unable to find recovery directory /var/lib/nfs/v4recovery
NFSD: starting 90-second grace period
这是机器死重启的错误,后来发现,原来是portmap未启动,
只要启动启动portmap 再重启nfs即可.
service portmap start
service nfs stop
service nfs start
补充三: 关于根文件系统引导时提示"Root-NFS: Server returned error -13 while mounting XXXXX"
这个错误产生原因较多,如果是权限检查没有问题。在Linux 下使用minicom 时最常见的问题是多行拷贝命令时
丢失空格。
setenv bootargs " noinitrd console=ttySAC0 root=/dev/nfs
_____nfsroot=192.168.3.11:/home/rootfs
_____ip=192.168.3.20:192.168.3.11:192.168.3.11:255.255.255.0 "
即每行前红色处多加一些空格,即可解决这个问
阅读(2566) | 评论(0) | 转发(0) |