背景:
在开发和调试阶段,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