Linux学习之路——NFS挂载根文件系统

2019-07-13 02:21发布

NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
对于嵌入式Linux开发,通过NFS挂载根文件系统,根文件系统无需下载到FLASH( FLASH还需要先擦除再写入),可以直接保存在Linux主机,而且在Linux开发的驱动程序也无需下载到Linux开发板的FLASH,这使得开发十分方便快捷,下面记录了我自己通过NFS挂载根文件系统的过程。

Linux主机端:

  • CentOS 7.5 
  • RPC 主程序:rpcbind   yum install NFS rpcbind
  • NFS 主程序:nfs-utils  yum install nfs-utils
  • IP:172.215.0.224
  • 网关IP:172.215.0.1
  • 子网掩码:255.255.0.0

1.将制作好的根文件系统更名为NFS

注意: 根文件系统的配置文件中   vi etc/init.d/rcS  的ip地址一定要和后面设置u-boot环境变量中的一致  就是linux内核中配置的开发板ip地址一定要和u-boot一致 

2.修改NFS配置文件       vi /etc/exports   

/NFS *(rw,sync,no_root_squash) 我这里写了*表示任何用户都能访问主机上的NFS文件夹 实际上可改为固定IP,只允许某一IP开放,例如 /NFS 172.215.0.128(rw,sync,no_root_squash) 或者 /mnt/rootfs_make/NFS 172.215.0.*(rw,sync,no_root_squash) 表示对1网段所有IP开放   

3.使配置生效  exportfs -r(没有任何提示)

4.重启RPC和NFS服务有先后顺序,先启动RPC,再启动NFS

service rpcbind restart service nfs restart

5.查看NFS状态 ,确保为激活(active)状态

  service nfs status

 active表示已激活

6.查看映射状态  showmount -e

可以看到,NFS文件夹已经被共享出去了,我的是所有用户都可访问 showmount -a 可以看哪些用户正在访问共享文件夹 可以看到,172.215.0.194的用户正在访问 NFS文件夹

7.关闭防火墙

首先查看防火墙状态,如下图,防火墙的active激活状态 对于centos7,执行systemctl stop firewalld 关闭防火墙     再次查看防火墙,已经被关闭了,但是这只是本次生效,重启后防火墙又会被打开。 执行systemctl disable firewalld 永久禁用

8.为保险起见,在本机挂载测试下:

 mount -t nfs localhost:/NFS/ /tmp localhost:你的主机IP 我们将NFS挂载到本机/home文件夹,在/home也能看到NFS文件夹内容,挂载成功!

9.测试下服务器和开发板能否互相ping通 能互相Ping通再进行后面的步骤 

====================================================================================================================================分隔线===================================================

 linux开发板端:

  • cpu:at91sam9260
  • 根文件系统:yaffs2
  • linux内核:2.6.38
  • ip:172.215.0.194

1.内核配置

  File systems--------        Network File Systems------------    File systems -----------                Miscellaneous filesystems------------

 2.u-boot参数配置

u-boot环境变量配置 set bootargs noinitrd root=/dev/nfs nfsroot=172.215.0.224:/NFS ip=172.215.0.194:172.215.0.224:172.215.0.1:255.255.0.0::eth0:off init=/linuxrc console=ttyS0,115200 nfsroot=服务器ip:/共享文件夹      ip=开发板ip:linux服务器ip:网关ip:子网掩码:主机名:网卡:off root        表示使用/dev/nfs这个设备作为根文件系统。
rw        表示可读可写的。
nfsroot        表示服务器中rootfs所在路径,注意需要跟上服务器的ip地址。
192.168.1.110    是板子启动之后的ip地址。
192.168.1.100    是nfs服务器的ip地址。
192.168.1.1    是板子网关地址。
255.255.255.0    是板子子网掩码。
eth0        表示板子上的网络设备。
off        表示关闭动态获取ip地址
--------------------- 
注意:eh0前面有两个冒号,那是因为这里还可以填写一个板子的主机名,这里没有设置,所以为空。

3.启动Linux开发板

 可以看到挂载成功