NFS挂载问题的解决:mount clntudp_create: RPC: Port mapper failure - RPC: Unable to receive
可能原因: a)防火墙问题,但是,关闭防火墙还是提示错误。
b)如果设置了hosts.deny和hosts.allow两个文件中的192.168.0.*,则在etc/exports里面用*,设置之后用exportfs –r更新,然后重启nfs-kernel-server。
===================================================================
转载在Linux机器之间用NFS共享文件的方法.
http://wangxinpier.javaeye.com/blog/156805
假设我们有一台server机器A,一台客户机器B.我们要在B上使用A的文件.
或者说,把A上的某个文件夹mount到B上.
主要步骤:
(1)在A上安装软件: nfs-kernel-server,nfs-common,portmap.B上,也尽量都安装这些软件.
(2)安装之后,检验这些服务是否可以正常启动,执行:
sudo /etc/init.d/portmap start
sudo /etc/init.d/nfs-kernel-server start
如果正常,则安装成功.
(3)修改A上文件夹的访问权限.
sudo vim /etc/exports
A上所有共享的NFS目录在/etc/exports中列出,这个文件控制对目录的共享。
书写规则是:(每个共享规则一行)
共享目录 主机(参数)
例如:
/mnt/cdrom *.abc.com(ro,sync) master.abc.com(rw,sync)
上面的规则代表将/mnt/cdrom目录以只读同步方式共享给*.abc.com域,并且以读写同步方式共享给master.abc.com主机。
任何共享目录都要指定sync或async,也就是指定文件写入磁盘之前共享NFS目录是否响应命令。
下面是一些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_squash root用户具有根目录的完全管理访问权限
anonuid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的UID
anongid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的GID
(4)修改完成后,一定要重新启动nfs服务:
sudo /etc/init.d/nfs-kernel-server restart
至此,在A上的工作已经完成.
(5)在B端挂载nfs文件夹.
sudo apt-get install nfs-common
showmount -e 192.168.0.1
sudo mount -t nfs 192.168.0.1:/home/test /mnt/share
卸载挂载的文件夹:
sudo unount /mnt/share
==========================================================================
如果出现挂载不成功的问题,则需要按照以下步骤进行设置:
<一>NFS服务器端的配置
1 安装服务器端:
$ sudo apt-get install nfs-kernel-server
内含客户端所需的套件:nfs-common和portmap
2 服务器端的配置:
·配置portmap
$ sudo dpkg-reconfigure portmap , 对Should portmap be bound to the loopback address? 选N.
·配置/etc/hosts.deny
$ sudo gedit /etc/hosts.deny
(禁止任何host(主机)能和你的NFS服务器进行NFS连接),加入:
### NFS DAEMONS
portmap:ALL
lockd:ALL
mountd:ALL
rquotad:ALL
statd:ALL
·配置/etc/hosts.allow
$ sudo gedit /etc/hosts.allow
允许那些你想要的主机和你的NFS服务器建立连接。下列步骤将允许任何IP地址以192.168.13开头的主机(连接到NFS服务器上),也可以指定特定的IP地址。参看man页 hosts_access(5), hosts_options(5)。
### NFS DAEMONS
portmap: 192.168.13.
lockd: 192.168.13.
rquotad: 192.168.13.
mountd: 192.168.13.
statd: 192.168.13.
就是先禁止所有IP访问你的共享目录,然后指定某些IP可以访问。
3 运行 $ sudo /etc/init.d/portmap restart 重启portmap daemon.
4 配置/etc/exports:
$ sudo gedit /etc/exports
NFS挂载目录及权限由/etc/exports文件定义,/etc/exports实际上就是nfs服务器的核心配置文件了.
比如我要将我的home目录中的/home/warmbupt/arm/nfs目录让局域网内的所有的IP共享, 则在该文件末尾添加下列语句:
/home/test/arm/nfs * (rw,sync,root_squash)
以上配置的说明:
所有的NFS客户端能够共享NFS服务器 /home/test/arm/nfs 目录内容.且有读,写权限, 并且该用户进入 /home/test/arm/nfs目录后的身份假如是root,会被squash为匿名用户。最好加上sync, 否则 $ sudo exportfs -r 时会给出警告, sync是NFS的默认选项.
·参数介绍:
分享的目录 主机名称1或IP1(参数1,参数2) 主机名称2或IP2(参数3,参数4)
/media/sda6/share *(rw,sync)
/media/sda6/share是要共享的目录,*代表允许所有的网络段访问,rw是可读写权限。
·保存,更新。
sudo exportfs -ra //warning:/mirror does not support nfs export
·重启服务
sudo /etc/init.d/portmap restart
sudo /etc/init.d/nfs-kernel-server restart
参数
rw: 可擦写的权限
ro: 只读的权限
no_root_squash: 登入 NFS 主机使用分享目录的使用者,如果是 root 的话,那么对于这个分享的目录来说,他就具有 root 的权限!这个项目『极不安全』,不建议使用!
root_squash: 在登入 NFS 主机使用分享之目录的使用者如果是 root 时,那么这个使用者的权限将被压缩成为匿名使用者,通常他的 UID 与 GID 都会变成 nobody 那个身份;
all_squash: 不论登入 NFS 的使用者身份为何,他的身份都会被压缩成为匿名使用者,通常也就是 nobody 啦!
anonuid: 前面关于 *_squash 提到的匿名使用者的 UID 设定值,通常为 nobody,但是你可以自行设定这个 UID 的值!当然,这个 UID 必需要存在于你的 /etc/passwd 当中!
anongid: 同 anonuid ,但是变成 group ID 就是了
sync: 资料同步写入到内存与硬盘当中
async: 资料会先暂存于内存当中,而非直接写入硬盘
·设置的实例:
a). /tmp *(rw,no_root_squash) //*号表示所有的IP都可以访问
b). /tmp *(rw)
/home/public 192.168.0.*(rw) *(ro) //下面两行作用一样
/home/public 192.168.0.0/24(rw) *(ro)
c). /home/test 192.168.0.100(rw) //只对某部机器设置权限
d). /home/linux *.linux.org(rw,all_squash,anonuid=40,anongid=40) //当*.linux.org登陆此NFS主机,并且在/home/linux下面写入档案时,该档案的所有人与所有组,就会变成/etc/passwd 里面对应的UID为40的那个身份的使用者了.
5 修改目录权限 :chmod 777 -R /home/test/arm/nfs
运行 $ showmount -e 查看NFS server的export list.若更改了/etc/exports, 运行 $ sudo exportfs -r 更新
运行 $ sudo /etc/init.d/nfs-kernel-server restart 重启nfs服务)
$ sudo iptables -F
·测试NFS:
运行 $ df 看看结果
===========================================================
(二)NFS客户端的配置
在开发系统上,同样地,目标系统作为NFS的客户端,需要安装NFS客户端程序。如果是Debian/Ubuntu系统,则需要安装nfs-common。
$ sudo apt-get install nfs-commmon
注:nfs-common和nfs-kernel-server都依赖于portmap!
===========================================================
(三)NFS使用
在客户机上面执行
#sudo /etc/init.d/portmap start
将portmap服务开启。
然后执行(192.168.13.212这是我的服务器IP地址):
# showmount -e 192.168.13.212
如果显示了刚才设置的共享文件夹,证明成功了。
最后执行:
# mount 192.168.13.212:/home/test/arm/nfs /home/nfs/public
这样进入/home/nfs/public 目录就可以看到里面的内容了。
****************************************************
在客户机端创建用于挂载的目录。
sudo mkdir /mnt/share
sudo chmod 777 /mnt/share/
客户就可以加载了