1、NFS定义以及安装NFS的原因
本文形成的物理环境:xilinx zedboard开发板,交换机一台(开发板与PC均通过网线与交换机相连)
PC机为WIN7操作系统,在此系统上搭建了ubuntu虚拟机.虚拟机平台:vmvare10.0 ubuntu1210
NFS,是Network File System的简写,即网络文件系统。网络文件系统是FreeBSD支持的文件系统中的一种,也被称为NFS. NFS允许一个系统在网络上与他人共享目录和文件。通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件。
由于NFS使得开发人员能在开发板上访问PC机的资源,使得开发者的开发进度能大大加快,接下来详述安装过程
注意:在使用之前请将挂载的目录权限全部设置成777即执行 chmod777 /nfs
2、在PC端ubuntu下开启NFS
1)安装NFS:apt-get install nfs-kernel-server
2)配置/etc/exports
Ubuntu nfs允许挂载的目录及权限在文件/etc/exports中进行了定义例如,我们要将根目录下的/nfs目录共享出来,那么我们需要在/etc/exports文件末尾添加如下一行:
/nfs *(rw,sync,no_root_squash)
其中:/nfs是要共享的目录,*代表允许所有的网络段访问,rw是可读写权限,sync是资料同步写入内存和硬盘,no_root_squash是Ubuntu nfs客户端分享目录使用者的权限,如果客户端使用的是root用户,那么对于该共享目录而言,该客户端就具有root权限,记住要mkdir /nfs并在这个目录下新建一些文件帮助我们测试是否成功
3)关闭Ubuntu的防火墙
ufw disable 防火墙在系统启动时自动禁用 (启用就是enable)
4)Ubuntu nfs重启服务
$sudo service portmap restart
$sudo service nfs-kernel-server restart
mount -t nfs localhost:/nfs /mnt
-t代表挂载的文件系统类型,nfs即表示了网络文件系统类型
解除挂载使用umount /mnt
5)测试Ubuntu nfs
#showmount -e
showmount命令用于查询NFS服务器的相关信息 , -e或--exports,显示NFS服务器的输出清单
另一种测试方法:将建立的NFS目录挂载到本地的一个挂载点,然后看是否成功。
localhost即是本机,可以用本机IP,/nfs是之前建立的网络文件系统路径,/mnt 是目标挂载点
3、在开发板上开启NFS
1)、键入命令cat /proc/filesystems | grep nfs,测试当前系统是否开启了nfs支持
若显示如下则说明已经开启NFS支持,此时转步骤3,否则转步骤2
nodevnfs
nodevnfs4
nodevnfsd
2)、编译内核添加NFS的支持
内核下载地址https://github.com/Digilent/linux-digilent/releases,下载V3.3.0
解压源码:tar -xvzf linux-digilent-3.3.0-digilent-12.07-zed-beta.tar.gz
配置内核源码:make ARCH=arm digilent_zed_defconfig
安装libncurses5-dev以支持后续操作:apt-get install libncurses5-dev
执行make menuconfig
接下来的步骤详见图:
配置完成之后逐级退出保存 在.config文件中可看到修改后的变化:
将所做的改动配置到到arch/arm/configs/digilent_zed_defconfig中:
删除掉# CONFIG_NETWORK_FILESYSTEMS is not set
在该位置加上上面的配置内容,这样才能保证内核能够顺利编译通过.回到解压后的根目录,执行:
$ make ARCH=arm digilent_zed_defconfig
$ make ARCH=arm
编译成功后,在arch/arm/boot下找到zImge,替换原系统的zimge
3)、启动系统,执行cat /proc/filesystems |grep nfs,即可看到步骤1所述内容
确保开发板能与PC机ping通
之后将PC的NFS路径挂载至开发板
mount -t nfs serverip:SERVER_PATH LOCAL_PATH -o proto=tcp -o nolock
serverip为PC端IP,SERVER_PATH为PC端NFS路径,LOCAL_PATH即为开发板的路径
至此完工.
遇到的问题:
1、Starting NFS common utilities: statd
在ARM开发板的debian系统上,启动系统时候发现卡在
Starting NFS common utilities: statd 等很久之后出现 failed 的提示
之后开发板再挂载nfs的时候就会失败;原因是由于没有配置本地回环接口lo
这时候用vi编辑:#vi /etc/network/interfaces 添加:
auto lo
iface lo inet loopback
2、mount.nfs:access denied by server while mounting...
如果出现错误:mount.nfs:access denied by server while mounting...
则是因为使用了非法端口(如果端口号大于1024,则需要将 insecure 选项加入到配置文件(/etc/exports)相关选项中mount客户端才能正常工作),则在exports中加入insecure即可
/nfs *(insecure,rw,sync,no_root_squash)
3、wrong fs type, bad option, bad superblock
如果挂载时出现以下错误:
mount: wrong fs type, bad option, bad superblock on 192.168.1.5:/home/shared, missing codepage or helper program,
or other error (for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount. helper program)
In some cases useful info is found in syslog - try dmesg | tail or so.
则是由于缺少必要的NFS程序,如下安装即可:
apt-get install nfs-common