关闭

转载_在Linux机器之间用NFS共享文件的方法及其错误解决.

4885人阅读 评论(0) 收藏 举报
分类:

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/ 

客户就可以加载了 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:350788次
    • 积分:3724
    • 等级:
    • 排名:第8658名
    • 原创:15篇
    • 转载:263篇
    • 译文:0篇
    • 评论:17条
    最新评论