centos7搭建nfs服务器

一.NFS简介

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

NFS服务端、RPC协议、客户端三者可以理解为房源、中介、租客之间的关系:

 

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

要设定好 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 服务所需要的主要软件啦!一定要有喔!
    • 主要配置文件:/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 分享出来的目录资源喔!

三、环境准备

[root@server ~]# cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core)
[root@server ~]# uname -r
3.10.0-693.el7.x86_64
[root@server ~]# hostname -I
10.0.0.10 

四、安装NFS服务和RPC-bind服务

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

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

2、安装NFS

[root@server ~]# yum -y install nfs-utils rpcbind

五、服务端配置

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

[root@server ~]# mkdir -p /data/nfsdir

  [root@server ~]# chmod 666 /data/nfsdir/
  [root@server ~]# ll /data/
   total 0
   drw-rw-rw- 2 root root 6 Apr 16 08:52 nfsdir

编辑export文件

[root@server ~]# vi /etc/exports
/data/nfsdir 10.0.0.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@server ~]# exportfs -r

启动rpc和nfs(注意顺序)

[root@server ~]# systemctl start rpcbind
[root@server ~]# systemctl start nfs

查看RPC服务的注册情况

[root@server ~]# 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
    100024    1   udp  54506  status
    100024    1   tcp  34836  status
    100005    1   udp  20048  mountd
    100005    1   tcp  20048  mountd
    100005    2   udp  20048  mountd
    100005    2   tcp  20048  mountd
    100005    3   udp  20048  mountd
    100005    3   tcp  20048  mountd
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    3   tcp   2049  nfs_acl
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    3   udp   2049  nfs_acl
    100021    1   udp  44948  nlockmgr
    100021    3   udp  44948  nlockmgr
    100021    4   udp  44948  nlockmgr
    100021    1   tcp  41426  nlockmgr
    100021    3   tcp  41426  nlockmgr
    100021    4   tcp  41426  nlockmgr
选项与参数:
-p :针对某 IP (未写则预设为本机) 显示出所有的 port 与 porgram 的信息;
-t :针对某主机的某支程序检查其 TCP 封包所在的软件版本;
-u :针对某主机的某支程序检查其 UDP 封包所在的软件版本;

利用showmount命令检查服务端连机情况

[root@server ~]# showmount -e localhost
Export list for localhost:
/data/nfsdir 10.0.0.0/24
选项与参数:
-a :显示目前主机与客户端的 NFS 联机分享的状态;
-e :显示某部主机的 /etc/exports 所分享的目录数据。

六、客户端配置

创建需要挂载的目录

[root@client01 ~]# mkdir /nfsdir

查看服务端的共享目录信息

[root@client01 ~]# showmount -e 10.0.0.10
Export list for 10.0.0.10:
/data/nfsdir 10.0.0.0/24

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

mount -t nfs 192.168.2.203:/data/lys /lys -o proto=tcp -o nolock

七.测试

查看挂载情况

[root@client01 ~]# df -h|grep nfsdir
10.0.0.10:/data/nfsdir    17G  1.3G   16G   8% /nfsdir

服务端在共享目录下生成一个测试文件

[root@server ~]# echo "hello nfs" > /data/nfsdir/test.txt

客户端查看

[root@client01 ~]# ll /nfsdir/
total 4
-rw-r--r-- 1 root root 10 Apr 16 09:19 test.txt

  [root@client01 ~]# cat /nfsdir/test.txt
  hello nfs

客户端生成文件内容

[root@client01 ~]# echo "client also write message" >> /nfsdir/test.txt 
[root@client01 ~]# cat /nfsdir/test.txt                                 
hello nfs
client also write message

服务端查看文件内容

[root@server ~]# cat /data/nfsdir/test.txt 
hello nfs
client also write message

卸载已挂载的NFS

[root@client01 ~]# umount /nfsdir/
[root@client01 ~]# df -h|grep nfsdir
[root@client01 ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   17G  1.2G   16G   7% /
devtmpfs                 220M     0  220M   0% /dev
tmpfs                    231M     0  231M   0% /dev/shm
tmpfs                    231M  4.6M  226M   2% /run
tmpfs                    231M     0  231M   0% /sys/fs/cgroup
/dev/sda1               1014M  125M  890M  13% /boot
tmpfs                     47M     0   47M   0% /run/user/0

补充部分:

由于每次nfs启动向rpc注册端口都是随机生成,不是固定的,这样就给我们防火墙的设置带来不便。

[root@server ~]# 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
    100024    1   udp  54506  status
    100024    1   tcp  34836  status
    100005    1   udp  20048  mountd
    100005    1   tcp  20048  mountd
    100005    2   udp  20048  mountd
    100005    2   tcp  20048  mountd
    100005    3   udp  20048  mountd
    100005    3   tcp  20048  mountd
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    3   tcp   2049  nfs_acl
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    3   udp   2049  nfs_acl
    100021    1   udp  44948  nlockmgr
    100021    3   udp  44948  nlockmgr
    100021    4   udp  44948  nlockmgr
    100021    1   tcp  41426  nlockmgr
    100021    3   tcp  41426  nlockmgr
    100021    4   tcp  41426  nlockmg

通过修改配置文件,将注册端口固定。

[root@server ~]# echo -e "RQUOTAD_PORT=30001\nLOCKD_TCPPORT=30002\nLOCKD_UDPPORT=30002\nMOUNTD_PORT=30003\nSTATD_PORT=30004" >>/etc/sysconfig/nfs 
[root@server ~]# tail -5 /etc/sysconfig/nfs
RQUOTAD_PORT=30001
LOCKD_TCPPORT=30002
LOCKD_UDPPORT=30002
MOUNTD_PORT=30003
STATD_PORT=30004

重启nfs,并查看注册端口

[root@server ~]# systemctl restart nfs
[root@server ~]# 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
    100024    1   udp  54506  status
    100024    1   tcp  34836  status
    100005    1   udp  30003  mountd
    100005    1   tcp  30003  mountd
    100005    2   udp  30003  mountd
    100005    2   tcp  30003  mountd
    100005    3   udp  30003  mountd
    100005    3   tcp  30003  mountd
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    3   tcp   2049  nfs_acl
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    3   udp   2049  nfs_acl
    100021    1   udp  38083  nlockmgr
    100021    3   udp  38083  nlockmgr
    100021    4   udp  38083  nlockmgr
    100021    1   tcp  46265  nlockmgr
    100021    3   tcp  46265  nlockmgr
    100021    4   tcp  46265  nlockmgr

这下防火墙只需要开发这些相应的端口就可以了。

 

over...

转载于:https://www.cnblogs.com/benjamin77/p/8854164.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值