ITEEDU

宿主机ubuntu中安装NFS及使用

站长原创,版权所有ITEEDU,2011-05-26

1.安装NFS

sudo apt-get install nfs-kernel-server
会自动安装nfs-common和portmap

2. 配置portmap

  (1)编辑/etc/default/portmap, 将 -i 127.0.0.1 去掉。
  (2)配置/etc/hosts.deny,禁止任何host能和你的NFS服务器进行NFS连接,加入:

            ### NFS DAEMONS
        portmap:ALL
        lockd:ALL
        mountd:ALL
        rquotad:ALL
        statd:ALL
  (3) 配置/etc/hosts.allow,允许那些你想要的主机和你的NFS服务器建立连接。
    下列步骤将允许任何IP地址以192.168.2开头的主机(连接到NFS服务器上),也可以指定特定的IP地址。加入:       
            ### NFS DAEMONS
        portmap: 192.168.2.
        lockd: 192.168.2.
        rquotad: 192.168.2.
        mountd: 192.168.2.
        statd: 192.168.2.

3. 配置/etc/exports

    要将/home/rock/armc目录让138.198.177.*的IP共享, 则在该文件末尾添加下列语句:

        /home/rock/armc    *(rw,sync,no_root_squash)
        运行 $ sudo exportfs -r 更新。
    这里如果指定ip范围,mount测试的时候得到"权限不够"的错误  
       /home/rock/armc    138.198.177.*(rw,sync,no_root_squash)  
其实,如果没有portmap的配置,直接配置/etc/exports也行,这是只要不指定ip的范围即可啦。

4. 查看NFS server的export list

运行 $ showmount -e 查看NFS server的export list。

5. 重启nfs服务

运行 $ sudo /etc/init.d/nfs-kernel-server restart 重启nfs服务。

6. 测试NFS

可以尝试一下挂载本地磁盘(假设本地主机IP地址为:192.128.2.1,将/home/rock/armc挂载到/mnt)

 $ sudo mount 138.198.177.39:/home/rock/armc /mnt/nfs
运行 $ df 看看结果
 $ sudo umount /mnt
注意被拷贝文件的读/写权限!
另外, 可以使用一定的参数:
使用加参数的办法:
mount -o nolock,rsize=1024,wsize=1024,timeo=15 192.168.2.130:/home/rock/armc /mnt/nfs

7.NFS问题总结

笔者在mount的时候遇到了一些问题,导致浪费了好多时间。现在整理出来,跟大家一起分享。

首先ping一下,看看网络是否接通,再在minicom中运行:

mount -o nolock 192.168.2.1:/home/rock/armc /mnt/nfs
或者
mount -t nfs -o nolock 192.168.2.1:/home/rock/amrc /mnt/nfs
没有什么问题的话, 就把主机的/home/rock/armc目录挂载到开发板的/mnt/nfs目录了。
但是随后我在板子上运行宿主机上的程序时, 总是出现这样的提示:
nfs:server  192.168.2.1 not responding, still trying

出现这种问题之后,笔者每次都是重新启动开发板,然后很苦恼地发现:not find this file or directory。

然后又反复地将/mnt/nfs中的文件拷贝到开发板的其他目录时,依然是:

nfs:server  192.168.2.1 not responding, still trying。

但是,最终的目标目录中却有刚刚拷贝的内容,这让人瞬间欣喜,但是就因为瞬间的骄傲,让笔者之后反复的浪费时间。 最终发现,其实质上所拷贝到的内容要不是空的(大小是0),要不就是文件大小和宿主机上的不一样。也难怪它显示:not find this file or directory。

后来,偶然发现了文件大小有问题是通过:file helloQt。推理出来是NFS遗漏文件的问题。

事实确实如此呀!

nfs: server xxx.xxx.xxx.xxx not responding, still trying的现象是mount正常,但ping的时候丢包率比较大,拷贝或运行一些数据量大于1K的程序将马上出现这个提示,然后几乎无响应。
这个问题的解决办法如下:
(1)使用加参数的办法:mount -o nolock,rsize=1024,wsize=1024,timeo=15 192.168.2.130:/home/rock/armc /mnt/nfs
(2)不通过HUB,直接使用交叉线连接开发板和宿主机 。

注意:

(1)也可以将共享文件mount到开发板上的一个空目录中/tmp。

(2)通过NFS所建立起来的共享文件夹,是宿主机和开发板共同所享有的。用户可以将宿主机上的文件直接放入共享文件夹中,在开发板上mount之后,即可看到新添加的文件;同时,用户也可以将开发板上的文件放入共享文件件中,在宿主机上直接打开共享文件夹就可以查看新添加的文件。