NFS初探

来源:互联网 发布:知乎 父母 编辑:程序博客网 时间:2024/05/18 00:57

前两天收到JZ2440开发板,买了韦东山的几期视频做学习之用,由于windows7下的dnw不太好用,在尝试了tftp下载成功之后,想继续学习一下NFS的挂载功能,方便以后的开发。此次记录是在搭建好的NFS基础之上做的笔记,没有如何搭建NFS的流程。在熟悉NFS之后,自己手动搭建一个NFS,作为补充。

首先备注一下,什么是NFS?

NFS,是Network File System的简写,即网络文件系统。网络文件系统是FreeBSD支持的文件系统中的一种,也被称为NFS. NFS允许一个系统在网络上与他人共享目录和文件。通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件。

我的目的是什么?

便于开发,免去内核下载时间。直接从服务器上编写,编译代码,挂载到单板上执行,方便快捷。

废话不说了。

NFS有两种挂载方式

1.从flash上电之后手动挂载

2.从NFS启动挂载

先说第一种:上电之后从flash挂载。

首先要挂在一个根文件系统,那么首先服务器要允许那个目录可被别人挂载,这是权限问题,配置文件是/etc/exports/

设置允许挂载的目录为 /work/nfs_root/first_fs/

执行:

cd /work/nfs_root/first_fs/   sudo vi /etc/exports

添加如下代码

/work/nfs_root/first_fs *(rw,sync,no_root_squash) #允许挂载的目录 权限设置,同步

保存退出之后

重启NFS服务,执行:

sudo /etc/init.d/nfs-kernel-server restart

测试服务器是否能挂载,自己挂载自己 ,如下                                      

sudo mount -t nfs 192.168.0.108:/work/nfs_root/first_fs /mnt   #把目录挂载到mnt目录下

测试通过之后,说明服务器/work/nfs_root/first_fs 目录已经允许别人来挂载了

接下来继续测试 单板挂载,进入开发板,CRT终端。首先创建一个mnt目录,执行

mkdir /mnt                                                     #创建挂载目录

然后挂载

sudo mount -t nfs -o nfs 192.168.0.199:/work/nfs_root/first_fs /mnt   #把服务器上的/work/nfs_root/first_fs 挂载到开发板的mnt目录下ls                                                             #查看目录

此刻看到的就是服务器上的/work/nfs_root/first_fs 目录。

第二种从NFS启动,如下重启开发板

reboot

进入uboot之后,执行print,可看到如下代码:

bootargs=noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0
其中root=/dev/mtdblock3就告诉我们系统从/dev/mtdblock3启动,如果我们把该目录改成NFS,则可达到我们的要求,需要设置服务器IP,需要挂载的目录,自己的IP(通过它可以访问服务器)。具体格式,通过查看源码,搜索内核关键字【 nfsroot 】或者查看Documentation/nfsroot.txt 可找到如下说明

nfsroot=[server-ip>:]<root-dir>,[<nfs-options>] ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf> init=/linuxrc console=ttySAC0

好了,中括号表示的可以省略,尖括号表示的不可省略,接下来按照格式填充需要的数据,如下:

nfsroot=192.168.0.108:/work/nfs_root/first_fs ip=192.168.0.199:192.168.0.108:192.168.0.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0

在CRT终端执行:

set bootargs nfsroot=192.168.0.108:/work/nfs_root/first_fs ip=192.168.0.199:192.168.0.108:192.168.0.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0

设置成功之后,启动,执行如下命令:

boot

可看到如下画面,ls 指令显示的就是服务器的目录


还没完呢,接下来,做一个简单的测试,在服务器的目录下写一个简单的hello.c文件,编译好生成一个hello可执行文件之后,

arm-linux-gcc -o hello hello.c

进入开发板的mnt目录下,执行ls命令,可以看到编译好的hello文件,直接./hello,可以看到文件被正确执行了

至此,告一段落,后续自行搭建一个开发环境再把NFS服务的安装流程补上。


补充一下从NFS启动的参数与格式:

#启动目录格式与参数

noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0#NFS设置格式nfsroot=[server-ip>:]<root-dir>,[<nfs-options>] ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf> init=/linuxrc console=ttySAC0#修改启动目录noinitrd root=/dev/nfs init=/linuxrc console=ttySAC0#设置NFS挂载参数nfsroot=192.168.0.108:/work/nfs_root/first_fs ip=192.168.0.199:192.168.0.108:192.168.0.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0#设置启动挂载NFS命令set bootargs nfsroot=192.168.0.108:/work/nfs_root/first_fs ip=192.168.0.199:192.168.0.108:192.168.0.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0


0 0