CentOS 6.4下架设NFS服务器

    NFS是Network File System的简写,即网络文件系统.
网络文件系统是FreeBSD支持的文件系统中的一种,也被称为NFS. NFS允许一个系统在网络上与他人共享目录和文件。通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件。
 
以下是NFS最显而易见的好处:
1.本地工作站使用更少的磁盘空间,因为通常的数据可以存放在一台机器上而且可以通过网络访问到。
2.用户不必在每个网络上机器里头都有一个home目录。Home目录 可以被放在NFS服务器上并且在网络上处处可用。
3.诸如软驱,CDROM,和 Zip(是指一种高储存密度的磁盘驱动器与磁盘)之类的存储设备可以在网络上面被别的机器使用。这可以减少整个网络上的可移动介质设备的数量。

NFS至少有两个主要部分:一台服务器和一台(或者更多)客户机。客户机远程访问存放在服务器上的数据。为了正常工作,一些进程需要被配置并运行。

 

NFS 有很多实际应用。下面是比较常见的一些:
1.多个机器共享一台CDROM或者其他设备。这对于在多台机器中安装软件来说更加便宜跟方便。
2.在大型网络中,配置一台中心 NFS 服务器用来放置所有用户的home目录可能会带来便利。这些目录能被输出到网络以便用户不管在哪台工作站上登录,总能得到相同的home目录。
3.几台机器可以有通用的/usr/ports/distfiles 目录。这样的话,当您需要在几台机器上安装port时,您可以无需在每台设备上下载而快速访问源码。

 

=================================================================

 

 

NFS是NetworkFileSystem的缩写,它最大的功能是可以通过网络让不同的机器、不同的操作系统可以分享个别的文件。这个NFS服务器可以让那你的PC来将网络远程的NFS服务器分享的目录,挂载到本地端的机器当中,在本地端的机器看起来,那个远程主机的目录就好像是自己的一个磁盘分区。

162831845.jpg

基本上NFS这个服务的端口开在2049,但是由于文件系统非常复杂,因此NFS还有其他的程序去启动额外的端口,预设NFS用来传输的端口是随机选择小于1024以下的端口来使用的。客户端要远程调用(RemoteProcedureCall,RPC)的协议来辅助。

RPC最主要的功能就是在指定每个NFS功能所对应的portnumber,并且回报给客户端,让客户端可以连接到正确的端口上去。服务器在启动NFS时,会随机取用数个端口,并主动向RPC注册,因此RPC可以知道每个端口对应的NFS功能,然后RPC又是固定使用port111来监听客户端的需求并回报客户端正确的端口。

注:要启动NFS之前,RPC就要先启动了,否则NFS会无法向RPC注册。另外,RPC若重新启动时,原本注册的数据会不见,因此RPC重新启动后,它管理的所有服务都需要重新启动来重新向RPC注册。

 

 

 

 

 

 

 

 

客户端有NFS文件存取需求时,向服务器端要求数据的流程:

1.客户端会向服务器端的RPC(port111)发出NFS文件存取功能的询问要求;
2.服务器端找到对应的已注册的NFSdaemon端口后,会回报给客户端;
3.客户端了解正确的端口后,就可以直接与NFSdaemon来联机。

 

 

NFS启动的RPCdaemons

rpc.nfsd:这个daemon主要的功能就是在管理客户端是否能够使用服务器文件系统挂载信息等,其中还包含这个登陆者的ID的判别

rpc.mountd:这个daemon主要的功能,则是在管理NFS的文件系统哩!当客户端顺利的通过rpc.nfsd而登入服务器之后,在他可以使用NFS服务器提供的档案之前,还会经过档案权限(就是那个-rwxrwxrwx与owner,group那几个权限啦)的认证程序!他会去读NFS的配置文件/etc/exports来比对客户端的权限,当通过这一关之后客户端就可以取得使用NFS档案的权限啦!(注:这个也是我们用来管理NFS分享之目录的权限与安全设定的地方哩!)

 

NFS的文件访问权限:

客户端以NFS取用服务器端的文件系统时,还得具有

1NFS服务器有开放可写入的权限(与/etc/exports设定有关)

2实际的文件权限具有可写入的权限。

 

NFSServer端设定

所需软件:

RPC主程序:rpcbind

NFS主程序:nfs-utils

1
2
[root@centos ~]# yum install rpcbind
[root@centos ~]# yum install nfs-utils

NFS配置文件:

主要配置文件:/etc/exports

NFS文件系统维护指令:/usr/sbin/exportfs

分享资源的登录文件:/var/lib/nfs/*tab

客户端查询服务器分享资源的指令:/usr/sbin/showmount

1
[root@www ~]# vim /etc/exports /tmp 192.168.100.0/24(ro) localhost(rw) *.ev.ncku.edu.tw(ro,sync) [分享目录] [第一部主机(权限)] [可用主机名] [可用通配符]

要将/tmp分别分享给三个不同的主机或网域的意思。记得主机后面以小括号()设计权限参数,若权限参数不止一个时,则以逗号(,)分开。且主机名与小括号是连在一起的喔!在这个档案内也可以利用#来批注呢。

想将/tmp分享出去给大家使用,由于这个目录本来就是大家都可以读写的,因此想让所有的人都可以存取,要让root写入的档案还是具有root的权限

1
2
3
[root@centos ~]# vim /etc/exports
# 任何人都可以用我的 /tmp ,用通配符来处理主机名,重点在no_root_squash
/tmp  *(rw,no_root_squash)

启动rpc、nfs服务

1
2
3
4
5
6
[root@centos ~]# service rpcbind start
Starting rpcbind: [  OK  ]
[root@centos ~]# service nfs start
Starting NFS services:  [  OK  ]
Starting NFS mountd: [  OK  ]
Starting NFS daemon: [  OK  ]

查看开放端口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@centos ~]# netstat -plunt | grep -E '(rpc|nfs)'
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      6023/rpcbind
tcp        0      0 0.0.0.0:52528               0.0.0.0:*                   LISTEN      6069/rpc.mountd
tcp        0      0 0.0.0.0:54929               0.0.0.0:*                   LISTEN      6069/rpc.mountd
tcp        0      0 0.0.0.0:34879               0.0.0.0:*                   LISTEN      6069/rpc.mountd
tcp        0      0 :::35502                    :::*                        LISTEN      6069/rpc.mountd
tcp        0      0 :::111                      :::*                        LISTEN      6023/rpcbind
tcp        0      0 :::60977                    :::*                        LISTEN      6069/rpc.mountd
tcp        0      0 :::39008                    :::*                        LISTEN      6069/rpc.mountd
udp        0      0 0.0.0.0:37102               0.0.0.0:*                               6069/rpc.mountd
udp        0      0 0.0.0.0:111                 0.0.0.0:*                               6023/rpcbind
udp        0      0 0.0.0.0:36248               0.0.0.0:*                               6069/rpc.mountd
udp        0      0 0.0.0.0:57902               0.0.0.0:*                               6069/rpc.mountd
udp        0      0 0.0.0.0:686                 0.0.0.0:*                               6023/rpcbind
udp        0      0 :::111                      :::*                                    6023/rpcbind
udp        0      0 :::34965                    :::*                                    6069/rpc.mountd
udp        0      0 :::686                      :::*                                    6023/rpcbind
udp        0      0 :::42044                    :::*                                    6069/rpc.mountd
udp        0      0 :::36419                    :::*                                    6069/rpc.mountd

查看每个RPC服务的注册状况

1
2
3
4
5
6
[root@www ~]# rpcinfo -p [IP|hostname]
[root@www ~]# rpcinfo -t|-u IP|hostname 程序名称
选项与参数:
-p :针对某 IP (未写则预设为本机) 显示出所有的 port 与 porgram 的信息;
-t :针对某主机的某支程序检查其 TCP 封包所在的软件版本;
-u :针对某主机的某支程序检查其 UDP 封包所在的软件版本;

显示出目前这部主机的RPC状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[root@centos ~]# rpcinfo -p localhost
program vers proto   port  service
100000    4   tcp    111  portmapper
100000    3   tcp    111  portmapper
100000    2   tcp    111  portmapper
100000    4   udp    111  portmapper
100000    3   udp    111  portmapper
100000    2   udp    111  portmapper
100005    1   udp  37102  mountd
100005    1   tcp  34879  mountd
100005    2   udp  57902  mountd
100005    2   tcp  52528  mountd
100005    3   udp  36248  mountd
100005    3   tcp  54929  mountd
100003    2   tcp   2049  nfs
100003    3   tcp   2049  nfs
100003    4   tcp   2049  nfs
100227    2   tcp   2049  nfs_acl
100227    3   tcp   2049  nfs_acl
100003    2   udp   2049  nfs
100003    3   udp   2049  nfs
100003    4   udp   2049  nfs
100227    2   udp   2049  nfs_acl
100227    3   udp   2049  nfs_acl
100021    1   udp  38908  nlockmgr
100021    3   udp  38908  nlockmgr
100021    4   udp  38908  nlockmgr
100021    1   tcp  56488  nlockmgr
100021    3   tcp  56488  nlockmgr
100021    4   tcp  56488  nlockmgr

检查nfs这个程序相关软件版本信息(仅查看TCP)

1
2
3
4
[root@centos ~]# rpcinfo -t localhost nfs
program 100003 version 2 ready and waiting
program 100003 version 3 ready and waiting
program 100003 version 4 ready and waiting

NFS的联机查看

1
2
3
4
[root@www ~]# showmount [-ae] [hostname|IP]
选项与参数:
-a :显示目前主机与客户端的 NFS 联机分享的状态;
-e :显示某部主机的 /etc/exports 所分享的目录数据。

查看设定好的相关exports分享目录信息

1
2
3
[root@centos ~]# showmount -e localhost
Export list for localhost:
/tmp *

当你要扫瞄某一部主机他提供的NFS分享的目录时,就使用showmount-eIP(或hostname)即可

NFS关于目录权限设定的数据非常之多,在/etc/exports只是比较特别的权限参数而已,还有很多预设参数呢!这些预设参数在哪?我们可以检查一下/var/lib/nfs/etab就知道了

1
2
[root@centos ~]# tail /var/lib/nfs/etab
/tmp    *(rw,sync,wdelay,hide,nocrossmnt,secure,no_root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534)

重新编辑/etc/exports文件,不需要重启nfs!如果重新启动nfs的话,要得再向RPC注册!我们可以通过exportfs这个指令

1
2
3
4
5
6
[root@www ~]# exportfs [-aruv]
选项与参数:
-a :全部挂载(或卸除) /etc/exports 档案内的设定
-r :重新挂载 /etc/exports 里面的设定,此外,亦同步更新 /etc/exports 及 /var/lib/nfs/xtab 的内容!
-u :卸除某一目录
-v :在 export 的时候,将分享的目录显示到屏幕上!

NFS客户端的设定

手动挂载NFS服务器分享的资源

所需软件:

1
[root@centos ~]# yum install rpcbind
1
2
3
4
5
6
#启动rpcbind服务
[root@centos ~]# service rpcbind start
#查询服务器提供哪些资源
[root@centos ~]# showmount -e 192.168.246.23
Export list for 192.168.246.23:
/tmp *

建立挂载点

1
2
3
4
5
6
7
8
9
10
[root@centos ~]# mkdir -p /home/nfs/
[root@centos ~]# mount -t nfs 192.168.246.23:/tmp  /home/nfs/
[root@centos ~]# df -Th
Filesystem    Type    Size  Used Avail Use% Mounted on
/dev/sda2     ext4    193G   24G  159G  14% /
tmpfs        tmpfs    1.9G  904K  1.9G   1% /dev/shm
/dev/sda1     ext4    194M   48M  137M  26% /boot
/dev/sda3     ext4    145G  188M  137G   1% /home
192.168.246.23:/tmp
nfs     97G  9.6G   82G  11% /home/nfs

至此,最简单的NFS挂载共享就完成了!

本文出自 “技术在于坚持” 博客,请务必保留此出处http://minilinux.blog.51cto.com/4499123/1307594

 

 

 

 

来源:http://minilinux.blog.51cto.com/4499123/1307594

posted @ 2013-11-06 15:06  xuanfengling  阅读(258)  评论(0编辑  收藏  举报