centos下配置nfs服务

 以下均为转载:

http://www.chengyongxu.com/blog/centos%E4%B8%8Bnfs%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE/

CentOS下NFS服务器配置

Posted by  – 2010-04-20

 

####################################
#NFS_Configuration
#Author:楚霏
#Date: 2010-4-20
#Update:2010-4-26
#Env: Centos 5.4 x86_64
####################################

二、环境介绍
####################################
两台机器全是Centos 5.4 x86_64
服务端IP=10.0.0.52
客户端IP=10.0.0.166
####################################

三、配置服务端
####################################
#因为默认已经安装portmap,nfs-utils-lib和nfs-utils,所以直接配置即可
#创建要共享的目录

1 mkdir /nfsdata

#nfs的主配置文件是/etc/exports

1 vi /etc/exports
2 #----------------------------引用文字-开始----------------------------
3 #加入
4 /nfsdata 10.0.0.0/24(rw,root_squash,no_all_squash,sync)
5 #----------------------------引用文字-结束----------------------------

#保存设置

1 exportfs -r

#配置文件每行分为段:
#第一段为共享的目录,使用绝对路径
#第二段为客户端地址及权限:
地址可以使用完整IP或网段,例如10.0.0.8或10.0.0.0/24,10.0.0.0/255.255.255.0当然也可以
地址可以使用主机名,DNS解析的和本地/etc/hosts解析的都行,支持通配符,例如:*.chengyongxu.com
权限有:
rw:read-write,可读写;
ro:read-only,只读;
sync:文件同时写入硬盘和内存;
async:文件暂存于内存,而不是直接写入内存;
no_root_squash:NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,也拥有root权限。显然开启这项是不安全的。
root_squash:NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,拥有匿名用户权限,通常他将使用nobody或nfsnobody身份;
all_squash:不论NFS客户端连接服务端时使用什么用户,对服务端分享的目录来说都是拥有匿名用户权限;
anonuid:匿名用户的UID值,通常是nobody或nfsnobody,可以在此处自行设定;
anongid:匿名用户的GID值。
####################################

四、启动、测试
####################################
#先启动所依赖的postmap

1 service portmap start
2 service nfs start

#本地测试

1 showmount -e 10.0.0.52
2 #----------------------------输出文字-开始----------------------------
3 Export list for 10.0.0.52:
4 /nfsdata 10.0.0.0/24
5 #----------------------------输出文字-结束----------------------------

#创建挂载点

1 mkdir /mnt/nfsdata

#挂载

1 mount -t nfs 10.0.0.52:/nfsdata /root/nfsdata

#检查

01 mount
02 #----------------------------输出文字-开始----------------------------
03 /dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)
04 proc on /proc type proc (rw)
05 sysfs on /sys type sysfs (rw)
06 devpts on /dev/pts type devpts (rw,gid=5,mode=620)
07 /dev/hda1 on /boot type ext3 (rw)
08 tmpfs on /dev/shm type tmpfs (rw)
09 none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
10 sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
11 nfsd on /proc/fs/nfsd type nfsd (rw)
12 10.0.0.52:/nfsdata on /root/nfsdata type nfs (rw,addr=10.0.0.52)
13 #----------------------------输出文字-结束----------------------------

#写文件进行测试

1 echo "This is a test" >> /nfsdata/test

#检查一下

1 cat /root/nfsdata/test

#客户端测试
#步骤相似

1 service portmap start
2 service nfs start
3 showmount -e 10.0.0.52
4 mount -t nfs 10.0.0.52:/nfsdata /root/nfsdata

#检查

01 mount
02 #----------------------------输出文字-开始----------------------------
03 /dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)
04 proc on /proc type proc (rw)
05 sysfs on /sys type sysfs (rw)
06 devpts on /dev/pts type devpts (rw,gid=5,mode=620)
07 /dev/hda1 on /boot type ext3 (rw)
08 tmpfs on /dev/shm type tmpfs (rw)
09 none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
10 sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
11 nfsd on /proc/fs/nfsd type nfsd (rw)
12 10.0.0.52:/nfsdata on /root/nfsdata type nfs (rw,addr=10.0.0.52)
13 #----------------------------输出文字-结束----------------------------

#读写一下检查检查

1 cat /root/nfsdata/test
2 vi /root/nfsdata/test

#注意:
#如果需要开机挂载的话别忘了在/etc/fstab中加入

1 #----------------------------引用文字-开始----------------------------
2 /root/nfsdata   10.0.0.52:/nfsdata
3 #----------------------------引用文字-结束----------------------------

####################################

五、常见错误
####################################
错误一:Cannot register service: RPC

01 service nfs restart
02 #----------------------------输出文字-开始----------------------------
03 Shutting down NFS mountd:                                  [  OK  ]
04 Shutting down NFS daemon:                                  [  OK  ]
05 Shutting down NFS quotas:                                  [  OK  ]
06 Shutting down NFS services:                                [  OK  ]
07 Starting NFS services:                                     [  OK  ]
08 Starting NFS quotas: Cannot register service: RPC: Unable to receive; errno = Connection refused
09 rpc.rquotad: unable to register (RQUOTAPROG, RQUOTAVERS, udp).
10                                                            [FAILED]
11 #----------------------------输出文字-结束----------------------------
12  
13 #解决方法:
14 service portmap start
15 #先启动portmap才行
01 错误二:Address already in use
02 tail -f /var/log/message
03 #----------------------------输出文字-开始----------------------------
04 Apr 10 13:43:27 bogon nfsd[15918]: nfssvc: Setting version failed: errno 16 (Device or resource busy)
05 Apr 10 13:43:27 bogon nfsd[15918]: nfssvc: unable to bind UPD socket: errno 98 (Address already in use)
06 Apr 10 13:45:27 bogon nfsd[15978]: nfssvc: Setting version failed: errno 16 (Device or resource busy)
07 Apr 10 13:45:27 bogon nfsd[15978]: nfssvc: unable to bind UPD socket: errno 98 (Address already in use)
08 Apr 10 13:49:05 bogon nfsd[16080]: nfssvc: Setting version failed: errno 16 (Device or resource busy)
09 #----------------------------输出文字-结束----------------------------
10  
11 #解决方法:
12 ps aux | grep nfs
13 #然后用kill干掉这些进程

错误三:mount: 10.0.0.52:/nfsdata failed, reason given by server: Permission denied

1 #解决方法:
2 a.把该客户端的ip加入服务端的/etc/exports
3 b.服务端的和客户端规则要统一,要么都使用主机名(注意每台机器的hosts文件),要么都使用IP

错误四:客户端挂载超时

01 tail -f /var/log/message
02 #----------------------------输出文字-开始----------------------------
03 Apr 10 14:42:35 localhost kernel: portmap: server localhost not responding, timed out
04 Apr 10 14:42:35 localhost kernel: RPC: failed to contact portmap (errno -5).
05 Apr 10 14:42:46 localhost kernel: RPC: failed to contact portmap (errno -512).
06 Apr 10 14:42:46 localhost kernel: lockd_up: makesock failed, error=-512
07 Apr 10 14:42:46 localhost kernel: RPC: failed to contact portmap (errno -512).
08 #----------------------------输出文字-结束----------------------------
09  
10 #解决方法:
11 service portmap restart
12 service nfs restart

错误五:Error: RPC MTAB does not exist.

01 service nfs start
02 #----------------------------引用文字-开始----------------------------
03 Starting NFS services:                                     [  OK  ]
04 Starting NFS quotas:                                       [  OK  ]
05 Starting NFS daemon:                                       [  OK  ]
06 Starting NFS mountd:                                       [  OK  ]
07 Starting RPC idmapd: Error: RPC MTAB does not exist.
08 #----------------------------引用文字-结束----------------------------
09  
10 #解决方法:
11 #手动执行
12 mount -t rpc_pipefs sunrpc /var/lib/nfs/rpc_pipefs/
13 #需要时加入开机启动时,加入下面两行到/etc/fstab
14 #----------------------------引用文字-开始----------------------------
15 rpc_pipefs /var/lib/nfs/rpc_pipefs rpc_pipefs defaults 0 0
16 nfsd /proc/fs/nfsd nfsd defaults 0 0
17 #----------------------------引用文字-结束----------------------------

####################################

 

 

http://yaronspace.cn/blog/archives/1051

最近搞KVM虚拟机迁移,前提是需要一个共享存储的文件系统来存储系统镜像,本来打算使用KFS来作为分布式文件系统的,但是在修改kvm的镜像读写API后,系统是跑起来了,但是奇慢无比,主要是存在对镜像存在大量的随机读写造成的,这个下次再好好总结下。所以就想到了简单易用的NFS文件系统,下面是具体的配置细节:

1,NFS服务器的安装

在CentOS系统中,默认情况下已经安装了NFS文件系统,如果没有安装就需要手工安装了

#rpm –q nfs-utils portmap

2, 查看NFS是否启动

#service nfs starus
#service portmap status

3,启动NFS

#service nfs start
#service portmap status

 

4,修改NFS系统配置文件

#vim /etc/exports

/home/yaronli/nfs_space *(sync,rw)

解释说明:

/home/yaronli/nfs_space:共享目录名
*:表示所有主机都可以连接改NFS
(sync,rw):设置选项

    sync:设置NFS服务器同步写磁盘,这样不会轻易丢失数据,建议所有的NFS共享目录都使用该选项
    ro:设置输出的共享目录只读,与rw不能共同使用
   rw:设置输出的共享目录可读写,与ro不能共同使用

exports文件中“客户端主机地址”字段可以使用多种形式表示主机地址

    192.168.152.13 指定IP地址的主机
    nfsclient.test.com 指定域名的主机
    192.168.1.0/24 指定网段中的所有主机
   *.test.com 指定域下的所有主机
    * 所有主机

5,生效配置文件
命令#exportfs –rv 可以让新设置的exports文件内容生效
以上是Server端的配置步骤

Client端的配置步骤如下:
1,直接mount到nfs server即可

# mount -t nfs 10.60.1.91:/home/yangguang/nfs_space  /mnt/
说明:
10.60.1.91:是nfs server的ip地址
/home/yangguang/nfs_space: 是nfs server中的共享目录
/mnt:为本地的目录

执行成功后,即可在/mnt目录中看到nfs server 挂载的内容
2,卸载已经挂载的nfs共享目录

#umount /mnt/

常用命令:

显示当前主机中NFS服务器的输出列表
# showmount -e
显示当前主机NFS服务器中已经被NFS客户机挂载使用的共享目录
# showmount -d
显示NFS服务器的输出
# showmount -e 10.60.1.91

本文地址:http://www.yaronspace.cn/blog/index.php/archives/1051

 

 

 

http://hi.baidu.com/52xjm/blog/item/fa5372360de134c6a3cc2ba0.html

 经过我的的实践,在Centos6下必须先启动rpcbind,而不是portmap:

service   rpcbind  start
  再安装启动NFS成功!
 
 
 
1、是否安装了NFS和portmap RPM包
[root@ha01 /]# rpm -qa | grep nfs
nfs-utils-1.0.9-44.el5
nfs-utils-lib-1.0.8-7.6.el5

[root@ha01 /]# rpm -qa | grep portmap
portmap-4.0-65.2.2.1

2、若没有安装则需要安装如下的RPM包
[root@ha01 /]# find /media/ -name nfs*
/media/CentOS_5.5_Final/CentOS/nfs4-acl-tools-0.3.3-1.el5.i386.rpm
/media/CentOS_5.5_Final/CentOS/nfs-utils-lib-1.0.8-7.6.el5.i386.rpm
/media/CentOS_5.5_Final/CentOS/nfs-utils-1.0.9-44.el5.i386.rpm
/media/CentOS_5.5_Final/CentOS/nfs-utils-lib-devel-1.0.8-7.6.el5.i386.rpm

[root@ha01 /]# find /media/ -name portmap*
/media/CentOS_5.5_Final/CentOS/portmap-4.0-65.2.2.1.i386.rpm

3、NFS配置
NFS Server:192.168.1.100
NFS Client:192.168.1.200

NFS Server:
共享目录:/nfspool
NFS 运行用户(RPM包自动生成):nfsnobody

[root@ha01 /]# mkdir /nfspool
[root@ha01 /]# chown nfsnobody:nfsnobody /nfspool
[root@ha01 /]# id nfsnobody
uid=65534(nfsnobody) gid=65534(nfsnobody) groups=65534(nfsnobody) context=root:system_r:unconfined_t:SystemLow-SystemHigh
[root@ha01 /]# chown -R nfsnobody:nfsnobody /nfspool/.
[root@ha01 /]# vi /etc/exports
/nfspool 192.168.1.200(rw,async,anonuid=65534,anongid=65534)

Server端启动服务:
[root@ha01 /]# service portmap start
启动 portmap:                                             [确定]
[root@ha01 /]# service nfslock start
[root@ha01 /]# service nfs start
启动 NFS 服务:                                            [确定]
关掉 NFS 配额:                                            [确定]
启动 NFS 守护进程:                                      [确定]
启动 NFS mountd:                                      [确定]

NFS Client:
远程NFS目录在客户端的挂载点:/nfs

[root@ha02 /]# mkdir /nfs
[root@ha02 /]# service portmap start
启动 portmap:                                             [确定]

[root@ha02 /]# chown nfsnobody:nfsnobody /nfs
[root@ha02 /]# chmod 777 /nfs

[root@ha02 /]# mount -t nfs -o soft,intr,bg,timeo=50 192.168.1.100:/nfspool /nfs

测试:
[root@ha02 /]# ls -all /nfs
总计 20
drwxr-xr-x  2 nfsnobody nfsnobody 4096 04-02 13:53 .
drwxr-xr-x 24 root      root      4096 04-02 13:49 ..
-rw-r--r--  1 root      root         0 04-02 13:53 test.t    

Client启动后的自动mount:
[root@ha02 /]# vi /etc/fstab
192.168.1.100:/nfspool /nfs nfs soft,intr,bg,timeo=50 0 0

4、服务起停顺序
启动:
service portmap start
service nfslock  start
service nfs  start
停止:
service nfslock stop
service nfs stop
service portmap stop

5、安全性
portmap PORT: 111
NFS PORT: 2049

防止使用IP欺骗和RPC重定向技术通过lo回环进行攻击以及限定授权主机:
iptables -A INPUT -p udp -d 127.0.0.1 --dport 111 -j DROP
iptables -A INPUT -p udp -d 127.0.0.1 --dport 2049 -j DROP
iptables -A INPUT -p udp -s 192.168.100.2 --dport 111 -j ACCEPT
iptables -A INPUT -p udp -s 192.168.100.2 --dport 2049 -j ACCEPT

说明:

1、exports参数说明
rw: 读写模式;
async: 异步磁盘读写;
anonu(g)id: 指定NFS在进行操作时所使用的匿名用户uid/gid

2、NFS 管理命令
showmount -e 在NFS Server上执行此命令显示NFS Server上所有的共享卷;
showmount -e 192.168.1.100在NFS Client上执行此命令显示NFS Server上所有共享卷;
export -av 根据/etc/exports导出所有卷;
export -rv 重新导出所有卷,增加/etc/exports中的新项目、删除不存在的项目、更新改变的项目;
 
 
Centos5.3下安装配置NFS  

使用NFS服务,至少需要启动以下系统守护进程。 
chkconfig nfs on 
chkconfig portmap  on

一:服务器端的设定 
1)修改配置文件 
vi /etc/exports 
/home  192.168.1.2(rw,async) *(ro)               #注意红色部分没有空格
/home    192.168.1.*(rw,sync,no_root_squash,no_subtree_check) 
rw:可读写的权限; 
ro:只读的权限; 
no_root_squash:登入到NFS主机的用户是ROOT用户,他就拥有ROOT的权限,此参数很不安全,建议不要使用。 
root_squash:在登入 NFS 主使用分享之目的使用者如果是 root 
all_squash:不管登陆NFS主机的用户是什么都会被重新设定为nobody。 
anonuid:将登入NFS主机的用户都设定成指定的user id,此ID必须存在于/etc/passwd中。 
anongid:同 anonuid ,但是成 group ID 就是 
sync:资料同步写入存储器中。 
async:资料会先暂时存放在内存中,不会直接写入硬盘。 
insecure 允许从这台机器过来的非授权访问。

2)启动服务 
/etc/rc.d/init.d/portmap start 
/etc/rc.d/init.d/nfs start 
3)exportfs命令 
启动了NFS之后又修改了/etc/exports,这个时候我们就可以用exportfs命令来使改动立刻生效,该命令格式如下: 
exportfs [-aruv] 
-a :全部mount或者unmount /etc/exports中的内容 
-r :重新mount /etc/exports中分享出来的目录 
-u :umount 目录 
-v :在 export 的时候,将详细的信息输出到屏幕上。 
具体例子: 
exportfs -rv <==全部重新export一次! 
exportfs -au <==全部都卸载了。

 

二:客户端的操作: 
1、showmout命令对于NFS的操作和查错有很大的帮助 
showmout 
-a :这个参数是一般在NFS SERVER上使用,是用来显示已经mount上本机nfs目录的cline机器。 
-e :显示指定的NFS SERVER上export出来的目录。 
例如: 
showmount -e 192.168.0.30 
2、mount nfs目录的方法: 
mount -t nfs hostname(orIP):/directory /mount/point 
具体例子: 
mount -t nfs 192.168.0.1:/tmp /mnt/nfs

3、与NFS有关的一些命令介绍 
nfsstat: 
查看NFS的运行状态,对于调整NFS的运行有很大帮助 
rpcinfo: 
查看rpc执行信息,可以用于检测rpc运行情况的工具。

完成!

                                                 一个NFS实例

目标:1。实现手动挂载

             2。实现自动挂载,卸载

方法:NFS服务器依靠的几个程序包:portmap,nfs,依次安装,启动。

[root@localhost ~]# service portmap status

portmap (pid 4213) is running...

[root@localhost ~]#

[root@localhost ~]# service nfs status

rpc.mountd (pid 4559) is running...

nfsd (pid 4556 4555 4554 4553 4552 4551 4550 4549) is running...

[root@localhost ~]#

NFS的服务器配置/ect/explores,系统默认不一定有,没有就自己新建一个

/var/ftp/pub/   192.168.1.0/24(rw)

很简单:共享的目录  共享给谁(可以是IP,主机名,网段,域名) 读写权限

 

重起portmap和nfsd服务,注意先后顺序,先portmap。

 

现在我检查一下共享是否已经成功:

[root@localhost ~]# showmount -e 192.168.1.200

Export list for 192.168.1.200:

/var/ftp/pub 192.168.1.0/24

说明我们服务器端的共享是成功的!

 

现在配置客户端

手动加载比较简单

首先,参看一下共享

[root@RHEL mnt]# showmount -e 192.168.1.200

Export list for 192.168.1.200:

/var/ftp/pub 192.168.1.0/24

然后使用命令挂载

[root@RHEL mnt]# mount -t nfs 192.168.1.200:/var/ftp/pub /temp

[root@RHEL mnt]# cd /temp

[root@RHEL temp]# ls -l /temp

total 340

drwxr-xr-x 2 root      root        4096 Mar 31  2009 1

drwxr-xr-x 2 nfsnobody nfsnobody   4096 Mar 31  2009 2

下面配置自动挂载,卸载。

安装autofs服务

[root@RHEL temp]# service autofs status

automount (pid 5655) is running...

配置/etc/auto.master

添加一条记录

/mnt    /etc/auto.mnt --timeout=10

挂载点   这个挂载点的具体配置  多少时间没有访问将自动短开连接(秒)

配置/etc/auto.mnt

nfs     -fstype=nfs,rw  192.168.1.200:/var/ftp/pub

挂载点下的目录名 挂载的文件类型,读取权限 共享的路径

 

重新启动autofs服务

 [root@RHEL temp]# service autofs restart

Stopping automount:                                        [  OK  ]

Starting automount:                                        [  OK  ]

验证:

我们挂载到/mnt下的,先看一下/mnt下有些什么

[root@RHEL /]# ls /mnt

[root@RHEL /]#

什么都没有

 

我们再访问/mnt/nfs

[root@RHEL /]# ls /mnt/nfs

1               EULA        isolinux                 RPM-GPG-KEY-redhat-release

2               eula.en_US  README-en                Server

Cluster         GPL         RELEASE-NOTES-en         TRANS.TBL

ClusterStorage  images      RPM-GPG-KEY-redhat-beta  VT

这些正是服务器上的共享文件,说明自动挂载已经成功。同时,我们也可以得出结论,挂载点下的文件(也就是/etc/auto.mnt第一列)是自动建立的,不需要我们手动建立。

再看卸载,其实很简单,刚才在配置/etc/auto.master中已经设置了timeout=10秒,所以我们现在在回过去看/mnt下还有没有nfs目录

[root@RHEL /]# ls /mnt

[root@RHEL /]#

已经没有了,卸载成功! 

其实再往下就可以做异地定时自动备份,只要at和cp命令搭配使用。

posted @ 2012-04-09 16:10  陳聽溪  阅读(520)  评论(0)    收藏  举报