NFS服务搭建

Linux下NFS服务器的搭建与配置

一、NFS服务简介

NFS 就是NetworkFileSystem 的缩写,最早之前是由sun 这家公司所发展出来的。 它最大的功能就是可以透过网络,让不同的机器、不同的操作系统、可以彼此分享个别的档案 (share files)。所以,你也可以简单的将他看做是一个文件服务器 (file server) 呢!这个 NFS 服务器可以让你的 PC 来将网络远程的 NFS 服务器分享的目录,挂载到本地端的机器当中, 在本地端的机器看起来,那个远程主机的目录就好像是自己的一个磁盘分区槽一样 (partition)!使用上面相当的便利!

因为 NFS 支持的功能相当的多,而不同的功能都会使用不同的程序来启动, 每启动一个功能就会启用一些端口来传输数据,因此, NFS 的功能所对应的端口才没有固定住, 而是随机取用一些未被使用的小于 1024 的埠口来作为传输之用。但如此一来又造成客户端想要连上服务器时的困扰, 因为客户端得要知道服务器端的相关埠口才能够联机吧!

此时我们就得需要远程过程调用 (RPC) 的服务啦!RPC 最主要的功能就是在指定每个 NFS 功能所对应的 port number ,并且回报给客户端,让客户端可以连结到正确的埠口上去。 那 RPC 又是如何知道每个 NFS 的埠口呢?这是因为当服务器在启动 NFS 时会随机取用数个埠口,并主动的向 RPC 注册,因此 RPC 可以知道每个埠口对应的 NFS 功能,然后 RPC 又是固定使用 port 111 来监听客户端的需求并回报客户端正确的埠口, 所以当然可以让 NFS 的启动更为轻松愉快了!

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

当客户端有 NFS 档案存取需求时,他会如何向服务器端要求数据呢?

客户端会向服务器端的 RPC (port 111) 发出 NFS 档案存取功能的询问要求;

服务器端找到对应的已注册的 NFS daemon 埠口后,会回报给客户端;

客户端了解正确的埠口后,就可以直接与 NFS daemon 来联机。

由于 NFS 的各项功能都必须要向 RPC 来注册,如此一来 RPC 才能了解 NFS 这个服务的各项功能之 port number, PID, NFS 在服务器所监听的 IP 等等,而客户端才能够透过 RPC 的询问找到正确对应的埠口。 也就是说,NFS 必须要有 RPC 存在时才能成功的提供服务,因此我们称 NFS 为 RPC server 的一种。事实上,有很多这样的服务器都是向 RPC 注册的,举例来说,NIS (Network Information Service) 也是 RPC server 的一种呢

二、所需要的软件及软件结构

要设定好 NFS 服务器我们必须要有两个软件才行,分别是:

RPC 主程序:rpcbind

就如同刚刚提的到,我们的 NFS 其实可以被视为一个 RPC 服务,而要启动任何一个 RPC 服务之前,我们都需要做好 port 的对应 (mapping) 的工作才行,这个工作其实就是『 rpcbind 』这个服务所负责的!也就是说,在启动任何一个 RPC 服务之前,我们都需要启动 rpcbind 才行! (在 CentOS 5.x 以前这个软件称为 portmap,在 CentOS 6.x 之后才称为 rpcbind 的!)

NFS 主程序:nfs-utils

就是提供 rpc.nfsd 及 rpc.mountd 这两个 NFS daemons 与其他相关 documents 与说明文件、执行文件等的软件!这个就是 NFS 服务所需要的主要软件啦!一定要有喔!

 NFS 这个咚咚真的是很简单,上面我们提到的 NFS 软件中,配置文件只有一个,执行档也不多, 记录文件也三三两两而已吶!赶紧先来看一看吧! ^_^

主要配置文件:/etc/exports

这个档案就是 NFS 的主要配置文件了!不过,系统并没有默认值,所以这个档案『不一定会存在』,你可能必须要使用 vim 主动的建立起这个档案喔!我们等一下要谈的设定也仅只是这个档案而已吶!

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

这个是维护 NFS 分享资源的指令,我们可以利用这个指令重新分享 /etc/exports 变更的目录资源、将 NFS Server 分享的目录卸除或重新分享等等,这个指令是 NFS 系统里面相当重要的一个喔!至于指令的用法我们在底下会介绍。

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

在 NFS 服务器的登录文件都放置到 /var/lib/nfs/ 目录里面,在该目录下有两个比较重要的登录档, 一个是 etab ,主要记录了 NFS 所分享出来的目录的完整权限设定值;另一个 xtab 则记录曾经链接到此 NFS 服务器的相关客户端数据。

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

这是另一个重要的 NFS 指令。exportfs 是用在 NFS Server 端,而 showmount 则主要用在 Client 端。这个 showmount 可以用来察看 NFS 分享出来的目录资源喔!

就说不难吧!主要就是这几个啰!


三、系统环境

系统CentOS6.8

IP 192.168.2.203

四、安装NFS服务

1、查看系统是否已安装NFS

[root@bogon ~]# rpm -qa |grep nfs

[root@bogon ~]# rpm -qa |grep rpcbind

[root@bogon ~]#

2、安装NFS

[root@bogon ~]#yum-yinstallnfs-utils rpcbind

已加载插件:fastestmirror

设置安装进程

Loading mirror speeds from cached hostfile

... ...

已安装:

  nfs-utils.x86_641:1.2.3-70.el6_8.2rpcbind.x86_640:0.2.0-12.el6                         

作为依赖被安装:

  keyutils.x86_64 0:1.4-5.el6        libevent.x86_640:1.4.13-4.el6        libgssglue.x86_640:0.1-11.el6         

  libtirpc.x86_64 0:0.2.1-11.el6_8    nfs-utils-lib.x86_640:1.1.5-11.el6    python-argparse.noarch0:1.2.1-2.1.el6 

完毕!

五、服务端配置


在NFS服务端上创建共享目录/data/lys并设置权限

[root@bogon ~]#mkdir-p /data/lys

[root@bogon ~]# ll /data/总用量 4drwxr-xr-x.2root root409610月2118:10 lys

[root@bogon ~]#chmod666/data/lys/

编辑export文件

[root@bogon ~]# vim /etc/exports /data/lys192.168.2.0/24(rw,no_root_squash,no_all_squash,sync)

常见的参数则有:

参数值    内容说明

rw  ro    该目录分享的权限是可擦写 (read-write) 或只读 (read-only),但最终能不能读写,还是与文件系统的 rwx 及身份有关。

sync  async    sync代表数据会同步写入到内存与硬盘中,async 则代表数据会先暂存于内存当中,而非直接写入硬盘!

no_root_squash  root_squash    客户端使用 NFS 文件系统的账号若为 root 时,系统该如何判断这个账号的身份?预设的情况下,客户端 root 的身份会由 root_squash 的设定压缩成 nfsnobody, 如此对服务器的系统会较有保障。但如果你想要开放客户端使用 root 身份来操作服务器的文件系统,那么这里就得要开 no_root_squash 才行!

all_squash    不论登入 NFS 的使用者身份为何, 他的身份都会被压缩成为匿名用户,通常也就是 nobody(nfsnobody) 啦!

anonuid  anongid    anon 意指 anonymous (匿名者) 前面关于

*_squash 提到的匿名用户的 UID 设定值,通常为 nobody(nfsnobody),但是你可以自行设定这个 UID 的值!当然,这个 UID 必需要存在于你的 /etc/passwd当中! anonuid 指的是 UID 而 anongid 则是群组的 GID 啰。

配置生效

[root@bogon lys]# exportfs -r

启动rpcbind、nfs服务

[root@bogon lys]# service rpcbind start

正在启动 rpcbind:                                        [确定]

[root@bogon lys]# service nfs start

启动 NFS 服务:                                            [确定]

启动 NFS mountd:                                          [确定]

启动 NFS 守护进程:                                        [确定]

正在启动 RPC idmapd:                                      [确定]

查看 RPC 服务的注册状况

[root@bogon lys]# rpcinfo -p localhost

  program vers proto  port  service

    1000004tcp111  portmapper

    1000003tcp111  portmapper

    1000002tcp111  portmapper

    1000004udp111  portmapper

    1000003udp111  portmapper

    1000002udp111  portmapper

    1000051udp49979  mountd

    1000051tcp58393  mountd

    1000052udp45516  mountd

    1000052tcp37792  mountd

    1000053udp32997  mountd

    1000053tcp39937  mountd

    1000032tcp2049  nfs

    1000033tcp2049  nfs

    1000034tcp2049  nfs

    1002272tcp2049  nfs_acl

    1002273tcp2049  nfs_acl

    1000032udp2049  nfs

    1000033udp2049  nfs

    1000034udp2049  nfs

    1002272udp2049  nfs_acl

    1002273udp2049  nfs_acl

    1000211udp51112  nlockmgr

    1000213udp51112  nlockmgr

    1000214udp51112  nlockmgr

    1000211tcp43271  nlockmgr

    1000213tcp43271  nlockmgr

    1000214tcp43271nlockmgr

选项与参数:-p :针对某 IP (未写则预设为本机) 显示出所有的 port 与 porgram 的信息;-t :针对某主机的某支程序检查其 TCP 封包所在的软件版本;-u :针对某主机的某支程序检查其 UDP 封包所在的软件版本;

在你的 NFS 服务器设定妥当之后,我们可以在 server 端先自我测试一下是否可以联机喔!就是利用 showmount 这个指令来查阅!

[root@bogon lys]# showmount -e localhost

Export list for localhost:/data/lys192.168.2.0/24

选项与参数:-a :显示目前主机与客户端的 NFS 联机分享的状态;-e :显示某部主机的 /etc/exports 所分享的目录数据。

六、客户端配置

安装nfs-utils客户端

[root@bogon ~]#yum-yinstallnfs-utils

已安装:

  nfs-utils.x86_641:1.2.3-70.el6_8.2                                                                                 

作为依赖被安装:

  keyutils.x86_64 0:1.4-5.el6        libevent.x86_640:1.4.13-4.el6        libgssglue.x86_640:0.1-11.el6         

  libtirpc.x86_64 0:0.2.1-11.el6_8    nfs-utils-lib.x86_640:1.1.5-11.el6    python-argparse.noarch0:1.2.1-2.1.el6 

  rpcbind.x86_64 0:0.2.0-12.el6     

完毕!


创建挂载目录

[root@bogon ~]#mkdir/lys

查看服务器抛出的共享目录信息

[root@bogon ~]# showmount -e192.168.2.203Export list for192.168.2.203:/data/lys192.168.2.0/24

为了提高NFS的稳定性,使用TCP协议挂载,NFS默认用UDP协议

[root@bogon ~]#mount-t nfs192.168.2.203:/data/lys /lys -o proto=tcp -o nolock

七、测试结果

查看挂载结果

[root@bogon ~]#df-h

Filesystem            Size  Used Avail Use% Mounted on/dev/mapper/VolGroup-lv_root

                      18G  1.1G  16G7% /tmpfs                112M    0112M0% /dev/shm/dev/sda1            477M  54M  398M12% /boot192.168.2.203:/data/lys

                      18G  1.1G  16G7% /lys

服务端

[root@bogon lys]#echo"test"> test.txt

客户端

[root@bogon ~]#cat/lys/test.txt test

[root@bogon ~]# echo "204" >> /lys/test.txt

服务端

[root@bogon lys]#cat/data/lys/test.txt

test204

卸载已挂在的NFS

[root@bogon ~]#umount/lys/[root@bogon ~]#df-h

Filesystem            Size  Used Avail Use% Mounted on/dev/mapper/VolGroup-lv_root

                      18G  1.1G  16G7% /tmpfs                112M    0112M0% /dev/shm/dev/sda1            477M  54M  398M12% /boot


到此结束


补充部分:

为了方便配置防火墙,需要固定nfs服务端口

NFS启动时会随机启动多个端口并向RPC注册,这样如果使用iptables对NFS端口进行限制就会有点麻烦,可以更改配置文件固定NFS服务相关端口。

[root@bogon lys]# rpcinfo -p localhost

  program vers proto  port  service

    1000004tcp111  portmapper

    1000003tcp111  portmapper

    1000002tcp111  portmapper

    1000004udp111  portmapper

    1000003udp111  portmapper

    1000002udp111  portmapper

    1000051udp49979  mountd

    1000051tcp58393  mountd

    1000052udp45516  mountd

    1000052tcp37792  mountd

    1000053udp32997  mountd

    1000053tcp39937  mountd

    1000032tcp2049  nfs

    1000033tcp2049  nfs

    1000034tcp2049  nfs

    1002272tcp2049  nfs_acl

    1002273tcp2049  nfs_acl

    1000032udp2049  nfs

    1000033udp2049  nfs

    1000034udp2049  nfs

    1002272udp2049  nfs_acl

    1002273udp2049  nfs_acl

    1000211udp51112  nlockmgr

    1000213udp51112  nlockmgr

    1000214udp51112  nlockmgr

    1000211tcp43271  nlockmgr

    1000213tcp43271  nlockmgr

    1000214tcp43271nlockmgr

分配端口,编辑配置文件:

[root@bogon lys]# vim /etc/sysconfig/nfs

添加:

RQUOTAD_PORT=30001LOCKD_TCPPORT=30002LOCKD_UDPPORT=30002MOUNTD_PORT=30003STATD_PORT=30004

重启

[root@bogon lys]# service nfs restart

关闭 NFS 守护进程:                                        [确定]

关闭 NFS mountd:                                          [确定]

关闭 NFS 服务:                                            [确定]

Shutting down RPC idmapd:                                  [确定]

启动 NFS 服务:                                            [确定]

启动 NFS mountd:                                          [确定]

启动 NFS 守护进程:                                        [确定]

正在启动 RPC idmapd:                                      [确定]

查看结果

[root@bogon lys]# rpcinfo -p localhost

  program vers proto  port  service

    1000004tcp111  portmapper

    1000003tcp111  portmapper

    1000002tcp111  portmapper

    1000004udp111  portmapper

    1000003udp111  portmapper

    1000002udp111  portmapper

    1000051udp30003  mountd

    1000051tcp30003  mountd

    1000052udp30003  mountd

    1000052tcp30003  mountd

    1000053udp30003  mountd

    1000053tcp30003  mountd

    1000032tcp2049  nfs

    1000033tcp2049  nfs

    1000034tcp2049  nfs

    1002272tcp2049  nfs_acl

    1002273tcp2049  nfs_acl

    1000032udp2049  nfs

    1000033udp2049  nfs

    1000034udp2049  nfs

    1002272udp2049  nfs_acl

    1002273udp2049  nfs_acl

    1000211udp30002  nlockmgr

    1000213udp30002  nlockmgr

    1000214udp30002  nlockmgr

    1000211tcp30002  nlockmgr

    1000213tcp30002  nlockmgr

    1000214tcp30002nlockmgr

可以看到,随机端口以固定

iptables策略问题完美解决!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271