背景:

在开发和调试阶段,nfs是不可或缺的方式。
nfs:Network File System
nfs方式本质上相当于将PC宿主机上某个特定的目录当做开发的网络硬盘使用,这样通过网络挂载方式直接将需调试的内容挂载到开发板上,无需反复烧写。

reference:Linux NFS faq 

环境:Ubuntu 11.10

 

1、安装nfs软件包。

$ sudo apt-get install nfs-kernel-server

2、进行配置。

相关的配置文件:

$ gedit /etc/default/nfs-kernel-server
 NEED_SVCGSSD=no       //no is default


不启用NFSv4安全配置,如果启用,客户端也需启用。

$  gedit /etc/default/nfs-common
 NEED_IDMAPD=yes       //此项将打开ID映射
 NEED_GSSD=no        //no is default


这是一个common配置文件,客户端和服务器端要有相同的配置。
ID映射用于解决服务器端UID和客户端UID不同导致的无法访问资源的情况。通过UID映射,只需要相同的用户名即可。

$ gedit/etc/idmapd.conf
 [Mapping]
 Nobody-User = nobody
 Nobody-Group = nogroup


既然启用了ID映射,就需要配置。

$ gedit /etc/exports
写入

/home/leona/sharenfs *(rw,sync,no_root_squash)


解释:
/sharenfs是nfs共享目录;
*表示任何IP都可以共享这个目录。也可以授予可读写这个目录的ip地址;
rw-可读写
(nohide-如果被挂载的目录下的其他目录也是挂载的,此选项将使它们可见)
(insecure - 允许客户端不使用保留端口)
sync-每次写操作要同步到物理存储器上(而不是仅写入内存)
no_root_squash-当客户端以root的UID/GID(=0)挂载时,不会分配一个匿名UID/GID(也就是说它创建的文件将属于root)。

3、重启nfs服务。

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


说明:如果只是更新/etc/exports,只需运行

$ sudo exportfs -ra


即可生效

4、挂载。
客户端必须安装nfs-common:

$ sudo apt-get install nfs-common


尝试挂载本地磁盘(我的Linux系统的ip为192.168.159.136,将/home/sharenfs挂载到/mnt:

$ sudo mount 192.168.159.136:/home/leona/sharenfs /mnt


运行$ df看看结果。要注意sharenfs和mnt的路径要正确,不然会出现下文中的错误。

$ sudo umount /mnt

 


错误:
1、

access denied by server while mounting 192.168.159.136:/sharenfs



2、

mount.nfs: rpc.statd is not running but is required for remote locking.
 mount.nfs: Either use '-o nolock' to keep locks local, or start statd.
 mount.nfs: an incorrect mount option was specified.

记录:

su root: 临时切换到root用户,需要输入密码,切换后环境变量不变,取得root的部分权限,且只能使用trunk用户path路径中的命令,不能使用root用户path路径中的独有命令。


改变权限:

# chmod 777 -R sharenfs


使用showmount -e 来查看当前的配置是否生效

# showmount -e
 /home/leona/sharenfs *


说明已生效。


 


对于实际的应用系统,每次启动LINUX系统后都手工启动nfs服务器是不现实的,需要设置系统在指定的运行级别自动启动portmap和nfs服务。

# chkconfig --list portmap   //如果没有chkconfig会提示安装 
 
 portmap 0:off 1:off 2:off 3:off 4:off 5:off 6:off 
 
# chkconfig --list nfs-kernel-server
nfs-kernel-server 0:off 1:off 2:on 3:on 4:on 5:on 6:on