一 安装 NFS
$ sudo apt-get install nfs-kernel-server
$ sudo apt-get install nfs-common
二 配置/etc/exports
$ sudo vi /etc/exports
文本末添加
/home/aston/rootfs/rootfs *(rw,sync,no_root_squash,
no_subtree_check)
然后在终端执行 $chmod 777 -R /home/aston/rootfs/rootfs
$ sudo showmount -e
显示 clnt-create : RPC : Program not registered
$ sudo exportfs -r 更新
$ sudo showmount localhost -e
显示
Export list for 192.168.0.109
/home/aston/rootfs/rootfs *
三 启用
$ sudo /etc/init.d/nfs-kernel-server restart 重启 nfs 服务
显示如下
* Stopping NFS kernel daemon [ OK ]
* Unexporting directories for NFS kernel daemon... [ OK ]
* Exporting directories for NFS kernel daemon... [ OK ]
* Starting NFS kernel daemon [ OK ]
挂载测试
$ mount -t nfs -o nolock 192.168.0.109:/home/aston/rootfs/rootfs /opt
执行后,进入/opt 目录中,如果可以看到/home/aston/rootfs/rootfs 中
的内容,则说明 nfs 搭建成功!
不用的时候可以取消挂载:
umount /opt
[在uboot中更改bootargs为nfs启动]
setenv bootargs root=/dev/nfs nfsroot=192.168.0.109:/home/aston/rootfs/rootfs ip=192.168.0.20:192.168.0.109:192.168.0.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC2,115200
测试报错
VFS: cannot open root device "nfs" or unknown-block(0,255)
解析:没有在kernel中配置nfs相关配置驱动
解决:
1、配置网络部分,主要是使能CONFIG_IP_PNP以在2中能够看到Root
file system on NFS选项
Networking support
Networking options
TCP/IP networking
IP: kernel level autoconfiguration
[*] IP: DHCP support
[*] IP: BOOTP support
2、配置开启nfs服务
File systems --->
Network File Systems --->
<*> NFS client support
[*] NFS client support for NFS version 3
[*] NFS client support for the NFSv3 ACL protocol extension
[*] NFS client support for NFS version 4 (EXPERIMENTAL)
[*] NFS client support for NFSv4.1 (DEVELOPER ONLY)
[*] Root file system on NFS
更改之后,make -j4 重新烧录kernel即可
坑人集锦
setenv bootargs root=/dev/nfs nfsroot=192.168.0.109:/home/aston/rootfs/rootfs ip=192.168.0.20:192.168.0.109:192.168.0.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC2,115200
老师讲ubuntu14.04 网卡使用eth0对照ifconfig的第一个。
那么我就想ubuntu16.04 ifconfig之后对应的网卡是ens33 结果这个位置不应该改成ens33 嘛
结果不对显示的错误是:
VFS: cannot open root device “nfs” or unknown-block(0,255)
我就感觉不对,先怀疑是16.04 和14.04的nfs重启命令不一样。结果不是。
就用14.04 重新装上之后,发现如果bootargs设置的不对最后一句卡死了。才发现是bootargs的问题。最后才想到eth0 我改成了ens33 .结果改过来就对了。