通过NFS启动自制的网络文件系统遇到的问题总结

时间:2022-10-11 09:04:17
在此要特别感谢技术上的发烧友们提供的帖子给我的帮助,搞了整整一天终于搞定了。     搭建好开发环境后,内核镜像烧写,flash的分区全部都弄好了,ubi文件系统备好了,准备通过NFS方式启动,它妹的出现了如下的问题。       Looking up port of RPC 100003/2 on 192.168.0.199
    rpcbind: server 192.168.0.199 not responding, timed out
    Root-NFS: Unable to get nfsd port number from server, using default
    当时我想怎么回事,以前NFS相当顺利,今天就重新准备了个环境就出现这个问题,没关系,搞掉他, 我看到错误信息说“从服务器端获取端口出现问题”。     好,马上回去看一下,启动portmap服务,用命令 “sudo /etc/init.d/portmap start”这下应该可以了吧,又重启了一下我的nfs服务端,“sudo /etc/init.d/nfs-kernel-server start”,FUCK 还不行,又出现上面的问题,我看看刚才端口服务启动的输出信息 “Rather than invoking init scripts through /etc/init.d, use the service(8)
  utility, e.g. service portmap start
  Since the script you are attempting to invoke has been converted to an
  Upstart job, you may also use the start(8) utility, e.g. start portmap
尼玛啊,我英文还算过的去,看了一下没明白到底起没起啊。FUCK   启用终极途径,上网搜搜,有灵感,“rpcinfo -p” 查看当前所有的portmap的信息。   我又运行了一下 "sudo /etc/init.d/nfs-kernel-server restart",   "Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service portmap restart
Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the restart(8) utility, e.g. restart portmap
portmap start/running, process 708"
  看到了没,有portmap的进程在起着,说明启动成功,在复位一次。 尼玛啊,还不行,看来问题不是在这,在上网看看,格老子的,原来出现这个问题的人这么多啊, 仔细搜罗,比较受大家认同的是关掉防火墙,我很诧异,真的么。。真的么。。管他娘的先试试。   关啊,我用的是ubuntu 先查看一下防火墙的状态"sudo ufw status" 你妹啊,根本就没开启过,一直是"inactive",尼玛啊,还不行   再看看,说nfs配置有问题,我靠不是吧,有这么山炮么,还是查一遍吧,我在自的虚拟你(vmware)家目录下挂载mount文件系统,靠,很成功啊。   然后我用showmount -e 你妹啊,出问题了   报了个这个"clnt_create: RPC: Program not registered"(我在这又去查rpc查阅好久,坑爹啊)    尼玛啊,之前从没遇见过。   在看一下,试试这个,"showmount 192.168.0.199 -e"   没问题,显示出挂载文件系统目录。   到现在还没找到问题   我先把启动参数 和 exports文件的内容晒一下吧   upkernel=tftp $(loadaddr) $(bootfile);nand erase clean $(kerneladdr) $(filesize);nand write.jffs2 $(loadaddr) $(kerneladdr) $(filesize);setenv kernelsize $(filesize); saveenv
upsafefs=mtdparts default;nand erase safefs;ubi part safefs;ubi create  safefs;tftp $(loadaddr) $(safefs);ubi write $(loadaddr) safefs $(filesize)
uprootfs=mtdparts default;nand erase rootfs;ubi part rootfs;ubi create  rootfs;tftp $(loadaddr) $(rootfs);ubi write $(loadaddr) rootfs $(filesize)
yboot=nand read.jffs2 $(bootmaddr) $(kerneladdr) $(kernelsize);bootm $(bootmaddr)
safemode=setenv bootargs ubi.mtd=3 root=ubi0:safefs console=ttyS0,115200 mem=64M rootfstype=ubifs rw;run yboot
zhiyuan=run upsafefs; run upkernel; run set
set=setenv bootargs ubi.mtd=4 root=ubi0:rootfs rootfstype=ubifs console=ttyS0,115200 mem=64M, monitor=$(monitor), $(opt); saveenv
mtdids=nand0=nandflash0
mtdparts=mtdparts=nandflash0:1536k(bootloder),512k(params),4m(kernel),16m(safefs),-(rootfs)
partition=nand0,0
mtddevnum=0
mtddevname=bootloder
filesize=1B49A8
fileaddr=80008000
netmask=255.255.255.0
kernelsize=1B49A8
ipaddr=192.168.0.200
serverip=192.168.0.199
bootargs=root=/dev/nfsroot rw console=ttyS0,115200 nfsroot=192.168.0.199:/home/linux/work/rootfs ip=192.168.0.200:192.168.0.199:192.168.0.1:255.255.255.0:epc.zlgmcu.com:eth0:off
gatewayip=192.168.0.1
stdin=serial
stdout=serial
stderr=serial
/*****************************************
*****************************************/ exports 文件内容 /home/linux/work/ *(rw,sync,no_root_squash)(这里不用指定的文件系统目录,随便你指定到那个目录,他都会支持把当前目录下的文件挂载)   对了我在这要说点有意思的东西,我上google查阅,看很多外国人也有这个问题,有的外国佬说快被折磨疯了( to be crazy)(fuck),哈哈。。 问题还没解决。 难道是网络有问题,我之前弄的都是NAT地址转换,格老子的,今天换个桥接的(bridge)把虚拟机和板卡和主机都制定在同一个网段(ifconfig eth0 ) 再试试。。。。。。。。。。。。。。。。。。。。。。。。 尼玛 过去了 尼玛啊。。。。。。。。。。。。。。。。。。 又停了。。。。。。。。。。。 IP-Config: Complete:
     device=eth0, addr=192.168.109.27, mask=255.255.255.0, gw=192.168.109.254,
     host=zlg, domain=, nis-domain=(none),
     bootserver=192.168.109.33, rootserver=192.168.109.33, rootpath=
Looking up port of RPC 100003/2 on 192.168.109.33
Looking up port of RPC 100005/1 on 192.168.109.33
VFS: Mounted root (nfs filesystem).
Freeing init memory: 108K
init started: BusyBox v1.11.2 ()
starting pid 321, tty '': '/etc/rc.d/rcS'
Mounting /proc and /sys
Starting the hotplug events dispatcher udevd
Synthesizing initial hotplug events
Setting the hostname to zlg
Mounting filesystems
mount: mounting usbfs on /proc/bus/usb failed: No such file or directory
Running sysctl
Setting up networking on loopback device:
Setting up networking on eth0:
nfs: server 192.168.109.33 not responding, still trying
不过总算过了一关。
在找。。。。 恩人啊。。。。 我在这个问题上磨了半天了 终于得到化解 以下是引用恩人的语录: 引用地址: http://blog.chinaunix.net/uid-25409479-id-147202.html *****在其中一篇文章中有人提到,可能是根文件系统启动的时候更改了目标板的ip,当时想这不应该,ip我通过bootargs已经传给内核了,而且也已经成功挂载了,要是更改了就不能挂载了。我晕死,当时犯浑了,挂载是发生在启动前的,是系统启动的时候改的,所以才导致系统无法启动的 于是我翻找上述那一大段的信息找到了starting pid 321, tty '': '/etc/rc.d/rcS'
这是系统启动时执行的第一个文件rcS,我想问题就在这里啦。于是在主机里,打开rcS,并没有发现更改IP的地方啊,但是我看到在这个文件里有句话
#load the configuration information
. /etc/rc.d/rc.conf(注意,这是在开发板上的根文件目录里)
这就是系统启动的时候加载的第一个配置文件了,问题应该就出现在这里了,打开这个文件惊奇的发现如下我期待已久的信息:
export INTERFACE0="eth0"
export IPADDR0="192.168.7.236"
export NETMASK0="255.255.255.0"
export BROADCAST0="192.168.7.255"
export GATEWAY0="192.168.7.1"
export NAMESERVER0="192.168.7.1"
看来就是它了,于是我按照自己的配置更改了选项:
export INTERFACE0="eth0"
export IPADDR0="192.168.109.101"
export NETMASK0="255.255.255.0"
export BROADCAST0="192.168.109.255"
export GATEWAY0="192.168.109.254"
export NAMESERVER0="192.168.109.254"
改好之后,保存。然后,回到Tera Term下,重启开发板,成功啦通过NFS启动自制的网络文件系统遇到的问题总结

这个是参考上面的一个网友的,他这样弄最后OK了,但是我的还是不行,但是这个总结给了我启发,我发现我之前的虚拟机的网卡是eth0,现在变成eth4了,改回去试试?
参考网上这个文档改了下:
Linux的网卡由eth0变成了eth1,如何修复 
Linux的网卡由eth0变成了eth1,如何修复   
使用wmware安装了linux,安装成功后,使用的网卡是eth0,没有eth1。但是用过一段时间后,不知道为什么eth0无法使用,系统却自动生成了eth1网卡,这可以使用ifconfig命令看的到。   
[user@localhost ~]$ ifconfig 
eth1      Link encap:Ethernet  HWaddr 00:0C:29:A9:22:9D             inet 
addr:192.168.1.108  Bcast:192.168.1.255  Mask:255.255.255.0           inet6 addr: fe80::20c:29ff:fea9:229d/64 Scope:Link           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1           RX packets:313 errors:0 dropped:0 overruns:0 frame:0           TX packets:182 errors:0 dropped:0 overruns:0 carrier:0           collisions:0 txqueuelen:1000  
          RX bytes:67356 (65.7 KiB)  TX bytes:26612 (25.9 KiB)           Interrupt:19 Base address:0x2000    
lo        Link encap:Local Loopback             inet addr:127.0.0.1  Mask:255.0.0.0           inet6 addr: ::1/128 Scope:Host 
          UP LOOPBACK RUNNING  MTU:16436  Metric:1 
          RX packets:1788 errors:0 dropped:0 overruns:0 frame:0           TX packets:1788 errors:0 dropped:0 overruns:0 carrier:0           collisions:0 txqueuelen:0  
          RX bytes:89560 (87.4 KiB)  TX bytes:89560 (87.4 KiB)   
使用service network restart指令来重新启动网络服务时,会看到有eth0网卡不存在的提示。   
经过百度,了解了一些信息,特此记录在此,以备忘。 



在uboot里面设置了下启动参数:
set bootargs noinitrd root=/dev/nfs nfsroot=192.168.1.210:/work/nfs_root/tmp/fs_mini_mdev ip=192.168.1.105:192.168.1.106:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0
虚拟机重启,开发板重启,结果OK了,终于搞好了,这个问题折腾了我好多时间,谢谢上面网友文档的支持






















  
为什么eth0会变成eth1?   
很多Linux distribution使用udev动态管理设备文件,并根据设备的信息对其进行持久化命名。udev会在系统引导的过程中识别网卡,将mac地址和网卡名称对应起来记录在udev的规则脚本中。而对于新的虚拟机,VMware会自动为虚拟机的网卡生成MAC地址,当你克隆或者重装虚拟机软件时,由于你使用的是以前系统虚拟硬盘的信息,而该系统中已经有eth0的信息,对于这个新的网卡,udev会自动将其命名为eth1(累加的原则),所以在你的系统启动后,你使用ifconfig看到的网卡名为eth1。   
如何恢复到eth0?   
在fedora中,udev记录网络规则的脚本为:/etc/udev/rules.d/70-persistent-net.rules   
[user@localhost ~]$ vi /etc/udev/rules.d/70-persistent-net.rules   
# This file was automatically generated by the /lib/udev/write_net_rules # program run by the persistent-net-generator.rules rules file. # 
# You can modify it, as long as you keep each rule on a single line. # PCI device 0x1022:0x2000 (pcnet32) 
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", 
ATTR{address}=="00:0c:29:5a:6c:73", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0" 
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", 
ATTR{address}=="00:0c:29:a9:22:9d", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"   
打开该文件,这时你会发现,里面有eth0,eth1两个网卡的信息,但实际上你ifconfig时只能发现eth1一个网卡的信息,这时因为eth0根本就不存在。   


















将其中eth0的信息删掉,并将eth1信息中的设备名改为eth0,重启系统,你看到的网卡就是eth0了,或者删掉其中所有的信息重启系统udev会帮你发现新的设备的。   
另外还有一个启动脚本文件/etc/sysconfig/network-scripts/ifcfg-eth0,该文件中的mac地址为原来eth0网卡的物理地址,而虚拟机为eth1分配新的物理地址,故启动脚本中的信息与实际信息时不匹配的,将MAC的地址信息修改为
70-persistent-net.rules中的eth1的MAC地址,再次重启网络,就完全恢复到以前eth0网卡的状态了。