2024年3月23日发(作者:)
以前配置好了NFS,不过很久都没用.因我自己做的jffs2文件系统出了问题,
经过多次的写-删除操作后不能再写入了,以前一直是在一个目录下下载/删除试
验程序,每次下载的程序文件都会删除并下重新下载新编译的程序,也就是说开发
板系统并没有增加文件,但是现在下载程序文件或mkdir时都提示没有空间了.可
能是文件系统有点问题.
所以觉得还是通过NFS连到主机开发测试方便,主机编译好的程序不需要下
载到开发板,这样既方便不少,又减少了读写FLASH的次数,有利于延长FLASH
的寿命.而且相对于下载到RAM里重启丢失,NFS的文件在主机不受影响.
今天挂载NFS的时候没有成功,出现了各种错误,有网络连的问题,这一方面可
能是我现在换了主板而虚拟机系统仍是另一台主板上安装的那个系统,因两个主
板的网卡不同可能引起这些问题.另一方面以前是直接用网线连接主机可开发板,
而现在是使用一个路由器连接,这样解决了主机连接开发板就不能上网的问题.但
是因原来的IP是192.168.10.X,而现在的路由器设置的是192.168.1.X,网段不同
了.主机系统的配置文件需要更改.
由于上次配置的时间有点久了,都忘了怎么弄了.网上这方面的文章很多,于是
把我的配置过程记录下来作为备忘吧,免得下次又要到处查文章.
1. sudo apt-get install nfs-kernel-server
会自动安装nfs-common和portmap
2. 配置portmap:
2.1. 编辑/etc/default/portmap, 将 -i 127.0.0.1 去掉.
2.2. 配置/etc/,禁止任何host能和你的NFS服务器进行NFS连
接,加入:
--------------------------------------------------
### NFS DAEMONS
portmap:ALL
lockd:ALL
mountd:ALL
rquotad:ALL
statd:ALL
--------------------------------------------------
2.3. 配置/etc/,允许那些你想要的主机和你的NFS服务器建立连
接。
下列步骤将允许任何IP地址以192.168.1开头的主机(连接到NFS服务器
上),也可以指定特定的IP地址。加入:
--------------------------------------------------
### NFS DAEMONS
portmap: 192.168.1.110
lockd: 192.168.1.110
rquotad: 192.168.1.110
mountd: 192.168.1.110
statd: 192.168.1.110
--------------------------------------------------
3. 配置/etc/exports
要将/work/armnfs目录让192.168.1.*的IP共享, 则在该文件末尾添加下列语
句:
/work/armnfs *(rw,sync,no_root_squash)
运行 $ sudo exportfs -r 更新。
--------------------------------------------------
这里如果指定ip范围,mount测试的时候得到"权限不够"的错误
/work/armnfs 192.168.1.*(rw,sync,no_root_squash)
--------------------------------------------------
4. 运行 $ showmount -e 查看NFS server的export list.
5. 运行 $ sudo /etc/init.d/nfs-kernel-server restart 重启nfs服务
6. 测试NFS
可以尝试一下挂载本地磁盘(假设本地主机IP地址为:192.168.1.100,将/work/
armnfs挂载到/mnt)
$ sudo mount 192.168.1.100:/work/armnfs /mnt
运行 $ df 看看结果
$ sudo umount /mnt
注意被拷贝文件的读/写权限!
另外, 可以使用一定的参数:
使用加参数的办法:mount -o nolock,rsize=1024,wsize=1024,timeo=15 192.
168.2.130:/tmp/ /tmp/
我用开发板挂载的时候发现需要加上-o nolock参数,使用如下命令:
mount -o nolock -t nfs 192.168.1.101:/work/armnfs /tmp
挂载时的一些错误如下:
[root@(none) /]# mount -t nfs 192.168.1.101:/work/armnfs /tmp
mount: 192.168.1.101:/work/armnfs fanfs warning: mount version older tha
n kernel
NFS: mount program didn't pass remote address!
iled, reason given by server: Permission denied
mount: nfsmount failed: Bad file descriptor
mount: Mounting 192.168.1.101:/work/armnfs on /tmp failed: Invalid argum
ent
[root@(none) /]# mount -t nfs 192.168.1.101:/work/armnfs /tmp
nfs warning: mount version older than kernel
portmap: server localhost not responding, timed out
RPC: failed to contact portmap (errno -5).
portmap: server localhost not responding, timed out
RPC: failed to contact portmap (errno -5).
lockd_up: makesock failed, error="-5"
portmap: server localhost not responding, timed out
RPC: failed to contact portmap (errno -5).
[root@(none) /]# mount -t nfs 192.168.1.101:/work/armnfs /tmp
nfs warning: mount version older than kernel
mount: Mounting 192.168.1.101:/work/armnfs on /tmp failed: Device or re
source bu
sy
最后还是成功了,好像就是加了-o nolock参数的原因:
[root@(none) /]# ifconfig eth0 192.168.1.110
[root@(none) /]# mount -o nolock -t nfs 192.168.1.101:/work/armnfs /tmp
nfs warning: mount version older than kernel
用df命令查看:
[root@(none) tmp]# df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/root 31744 31624 120 100% /
tmpfs 31192 0 31192 0% /dev/shm
192.168.1.101:/work/armnfs 9282016 1095352 7715160 12% /var/tmp
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
对大家推荐很好使用的nfs服务系统之前,像让大家对Ubuntu nfs服务系统有所了解,然后对Ubuntu nfs
服务系统全面讲解介绍,希望对大家有用配置Ubuntu nfs服务器,可见Ubuntu隶属于linux阵营。顺便问
一句楼主既然没有文档何必一定要学ubuntu,还是学有文档的比较方便。
在Ubuntu下安装、配置Ubuntu nfs服务的步骤如下:
1、安装Ubuntu nfs
Ubuntu上默认是没有安装Ubuntu nfs服务器的,因此我们首先安装Ubuntu nfs服务器端:$sudo apt-get install
nfs-kernel-server
在一些文档中,提出还需要使用apt-get来手动安装nfs的客户端nfs-common,以及端口映射器portmap,
但其实这是没有必要的,因为在安装nfs-kernel-server时,apt会自动为我们把它们安装好。
2、配置/etc/exports
Ubuntu nfs允许挂载的目录及权限在文件/etc/exports中进行了定义。
例如,我们要将根目录下的rootfs目录共享出来,那么我们需要在/etc/exports文件末尾添加如下一行:/rootfs
*(rw,sync,no_root_squash)
其中:/rootfs是要共享的目录,*代表允许所有的网络段访问,rw是可读写权限,sync是资料同步写入内存
和硬盘,no_root_squash是Ubuntu nfs客户端分享目录使用者的权限,如果客户端使用的是root用户,那
么对于该共享目录而言,该客户端就具有root权限。
其它Ubuntu nfs常用的参数有:
ro 只读访问
rw 读写访问sync 所有数据在请求时写入共享
async nfs在写入数据前可以响应请求
secure nfs通过1024以下的安全TCP/IP端口发送
insecure nfs通过1024以上的端口发送
wdelay 如果多个用户要写入nfs目录,则归组写入(默认)
no_wdelay 如果多个用户要写入nfs目录,则立即写入,当使用async时,无需此设置。
hide 在nfs共享目录中不共享其子目录
no_hide 共享nfs目录的子目录
subtree_check 如果共享/usr/bin之类的子目录时,强制nfs检查父目录的权限(默认)
no_subtree_check 和上面相对,不检查父目录权限
all_squash 共享文件的UID和GID映射匿名用户anonymous,适合公用目录。
no_all_squash 保留共享文件的UID和GID(默认)
root_squash root用户的所有请求映射成如anonymous用户一样的权限(默认)
no_root_squas root用户具有根目录的完全管理访问权限
anonuid=xxx 指定nfs服务器/etc/passwd文件中匿名用户的UID
anongid=xxx 指定nfs服务器/etc/passwd文件中匿名用户的GID
3、Ubuntu nfs重启服务
$sudo /etc/init.d/portmap restart
$sudo /etc/init.d/nfs-kernel-server restart
4、测试Ubuntu nfs
此时可以运行以下命令来显示一下共享出来的目录:
$showmount -e
或者可以使用以下命令把它挂载在本地磁盘上,例如将/rootfs挂载到/mnt下:
$ sudo mount -t nfs localhost:/rootfs /mnt
可以运行df命令查看是否挂载成功。查看后可以使用以下命令卸载:
$ sudo umount /mnt


发布评论