NFS攻略 - Linux文件服务器搭建与使用实例

 

原文地址:http://codingstandards.iteye.com/blog/816376  

 

本文内容包括:

1 NFS概述及实例

2 Linux下NFS服务端的设置

3 Linux下NFS客户端的设置

4 Windows下NFS客户端的安装及设置

 

2 Linux NFS 服务端的设置

 

2.1 在Linux下配置NFS共享目录

 

下面以实例来讲述如何在Linux下配置NFS服务器,假定我们需要共享的目录是/vmsnfs。

 

如果这个目录还不存在,那么就先创建它;否则,跳过此步。

mkdir /vmsnfs

 

将该目录中所有文件和子目录的属主和组更改为nfsnobody。

chown -R nfsnobody /vmsnfs

chgrp -R nfsnobody /vmsnfs

或者并作一条执行

chown -R nfsnobody:nfsnobody /vmsnfs

注:如果以后直接在服务器上的共享目录创建文件或目录,要记得将属主和组设置为nfsnobody。否则客户端在访问时会出现“Permission denied”。

 

在/etc/exports文件中添加所需要共享的目录及参数,比如

/vmsnfs *(rw,async)

这里的意思是说,需要共享/vmsnfs这个目录,对所有客户端(*)都是可读写的(rw),并且是异步方式来访问。 因为不设置其他参数, 客户端创建文件或目录时默认的属主和组就是nfsnobody,即使客户端使用的账号是root。这也就是上面为什么要更改文件或目录的属主和组为nfsnobody的原因。

 

让共享目录生效

(重新)启动nfs服务

service portmap start

service nfs restart

或者

exportfs -a

 

检查防火墙设置

如果开启了防火墙,那么就要检查一下与nfs有关的端口是否允许访问。

目前我尝试了一些方法,都没法在开启防火墙的情况下正常使用nfs,所以干脆把防火墙关掉了。

chkconfig iptables off

service iptables stop

有这方面经验的大虾请帮忙补充一下解决办法。

 

如果要永久的共享此目录,最好将相关的服务设置为开机自动启动。

chkconfig portmap on

chkconfig nfs on

 

至此,在Linux下配置NFS服务端的任务就完成了。(建议:重启一下系统确认配置能自动设置)

 

2.2 在Linux下配置NFS的其它问题

 

Q:能限定共享目录客户端的网段和读写权限吗?

A:可以。比如:可以设置有些网段或机器是只读的,有些是可读写的。如下所示:

/vmsnfs 192.168.0.0/24(rw,async) 192.168.1.0/255.255.255.0(ro,sync)

/vmsnfs   192.168.0.0/24(rw)    *(ro)

/vmsnfs  192.168.6.179(rw) 192.168.6.17(ro)

如果想了解更多NFS配置参数,请参考NFS相关资料【1】。

 

Q:怎么确认nfs共享服务已经在运行了?

A:使用chkconfig命令查看portmap和nfs服务是否都已经启动,如下所示:

[root@new55 ~]# chkconfig --list portmap

portmap         0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭

[root@new55 ~]# chkconfig --list nfs

nfs             0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭

[root@new55 ~]#

 

Q:怎么确认某个目录已经被分享?

A:使用exportfs可以看到共享目录列表,exportfs -v可以看到更详细的信息。

[root@new55 ~]# exportfs

/vmsnfs         <world>

[root@new55 ~]# exportfs -v

/vmsnfs         <world>(rw,async,wdelay,root_squash,no_subtree_check,anonuid=65534,anongid=65534)

[root@new55 ~]# showmount -e

Export list for new55:

/vmsnfs *

[root@new55 ~]#

 

Q:修改了/etc/exports如何使之生效?

A:有多种方式,如下之一:

exportfs -a

exportfs -r

service nfs restart

 

Q:如何显示哪些端口用来提供rpc服务?

A:rpcinfo -p 或者 rpcinfo -p localhost

NFS服务没有启动时

[root@new55 ~]# rpcinfo -p

   程序 版本 协议   端口

    100000    2   tcp    111  portmapper

    100000    2   udp    111  portmapper

    100024    1   udp    984  status

    100024    1   tcp    987  status

启动 NFS服务之后

[root@new55 ~]# rpcinfo -p

   程序 版本 协议   端口

    100000    2   tcp    111  portmapper

    100000    2   udp    111  portmapper

    100024    1   udp    984  status

    100024    1   tcp    987  status

    100011    1   udp   1006  rquotad

    100011    2   udp   1006  rquotad

    100011    1   tcp   1009  rquotad

    100011    2   tcp   1009  rquotad

    100003    2   udp   2049  nfs

    100003    3   udp   2049  nfs

    100003    4   udp   2049  nfs

    100021    1   udp  34440  nlockmgr

    100021    3   udp  34440  nlockmgr

    100021    4   udp  34440  nlockmgr

    100003    2   tcp   2049  nfs

    100003    3   tcp   2049  nfs

    100003    4   tcp   2049  nfs

    100021    1   tcp  37635  nlockmgr

    100021    3   tcp  37635  nlockmgr

    100021    4   tcp  37635  nlockmgr

    100005    1   udp    609  mountd

    100005    1   tcp    612  mountd

    100005    2   udp    609  mountd

    100005    2   tcp    612  mountd

    100005    3   udp    609  mountd

    100005    3   tcp    612  mountd

 

Q:怎么看哪些客户端正在用共享目录?

A:使用showmount -a查看被客户端挂载过的详细信息,showmount -d查看被客户端挂载过的共享目录。在showmount手册页中可以看到showmount -a看到的信息是不可靠的,像下面列出192.168.6.113就只是曾经访问nfs服务器的机器,而此时并未启动。

[root@new55 ~]# showmount -a

All mount points on new55:

192.168.6.113:/vmsnfs

192.168.6.179:/vmsnfs

192.168.6.17:/vmsnfs

[root@new55 ~]# showmount -d

Directories on new55:

/vmsnfs

[root@new55 ~]#

 

Q:怎么从别的机器看nfs服务端共享了哪些目录?

A:使用showmount -e <ip_or_host>就可以看到nfs服务器上共享的目录情况。

[root@sunrise17 ~]# showmount -e 192.168.6.55

Export list for 192.168.6.55:

/vmsnfs *

[root@sunrise17 ~]#

 

Q:在Linux配置了防火墙的情况下怎么启用NFS服务?

A:有待研究,欢迎高手指点。我使用的RHEL5.5上默认的防火墙设置如下:

[root@new55 ~]# iptables-save

 

# Generated by iptables-save v1.3.5 on Thu Nov 18 09:44:44 2010

*filter

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [900:105354]

:RH-Firewall-1-INPUT - [0:0]

-A INPUT -j RH-Firewall-1-INPUT

-A FORWARD -j RH-Firewall-1-INPUT

-A RH-Firewall-1-INPUT -i lo -j ACCEPT

-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT

-A RH-Firewall-1-INPUT -p esp -j ACCEPT

-A RH-Firewall-1-INPUT -p ah -j ACCEPT

-A RH-Firewall-1-INPUT -d 224.0.0.251 -p udp -m udp --dport 5353 -j ACCEPT

-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT

-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT

-A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT

-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited

COMMIT

# Completed on Thu Nov 18 09:44:44 2010

[root@new55 ~]#

 posted on 2012-10-16 11:07  小代码  阅读(97)  评论(0编辑  收藏  举报