网络文件系统 | NFS 服务

NFS存储服务

定义

NFS即网络文件系统,是一种通过网络方式共享文件系统的通用共享解决方案。

版本对比

Centos 7 版本默认使用版本v4,最小化安装的应该没有。

更多的版本对比可以参考官方网站的FAQ:http://nfs.sourceforge.net/

版本特点
NFSv2被众多的操作系统支持,兼容性会更好
NFSv3更多的特点:更快的速度、更大的单个文件大小、更多便于排错的错误及信息、对TCP/IP协议的支持…
NFSv4提供有状态的连接,易被追踪连接状态,增强安全性…

NFS原理

在这里插入图片描述

  • 服务端首先启动RPC服务,开启111端口

  • 服务端再启动NFS服务,并向RPC注册端口信息(每次启动NFS服务的端口不固定)

  • 客户端启动RPC服务,向服务端的RPC服务请求服务端的NFS端口号(因为此时服务端的NFS端口号已经在RPC服务中注册了)

  • 服务端的RPC反馈NFS端口号信息给客户端

  • 客户端通过获取的NFS端口号与服务端的NFS建立连接,进行数据的传输

注意事项:在Centos 7中rpcbind用来替换Centos老版本中的portmap提供RPC协议服务

NFS服务端的安装

服务端需要安装的服务:NFS和rpcbind

对应的安装服务名称: nfs-utils 和 rpcbind

# yum -y install nfs-utils  rpcbind

在这里插入图片描述

启动服务

# 先启动rpcbind,再启动NFS
systemctl start rpcbind
systemctl start nfs
# 加入开机自启
systemctl enable rpcbind
systemctl enable nfs

在这里插入图片描述

NFS服务器的配置

通过读取/etc/exports配置文件来获取哪些客户端可以访问哪些NFS共享文件系统:

  • 空白行将被忽略
  • 以#开头的内容为注释
  • 配置文件中可以通过\符号转义换行
  • 每个共享的文件系统需要独立一行
  • 客户端主机列表需要使用空格隔开
  • 支持通配符

一条完整的语法结构:(主机与选项之间没有空格)

共享路径 客户端主机(选项)

共享路径 客户端主机1(选项1) 客户端主机2(选项2)

NFS选项的属性表:

NFS选项描述NFS选项描述
ro只读共享rw可读可写共享
sync同步写操作async异步写操作
wdelay延迟写操作root_squash屏蔽远程root权限
no_root_squash不屏蔽远程root权限all_squash屏蔽所有的远程用户权限
# 将/home/test配置成NFS共享文件
# 语法结构
/home/test *(rw,no_root_squash,no_all_squash,anonuid=0,anongid=0,sync)
# 查看共享的文件夹
[root@vm01 test]# showmount -e 192.168.137.2
Export list for 192.168.137.2:
/home/test *

在这里插入图片描述

客户端访问NFS

客户端安装RPC服务:yum -y install nfs-utils

启动服务:systemctl start rpcbind

# 可通过showmount命令查看服务器共享文件夹信息
[root@vm02 ~]# showmount -e 192.168.137.2
Export list for 192.168.137.2:
/home/test *
[root@vm02 ~]#

客户端手动挂载访问方式:mount 服务端ip:共享路径 本机路径

# 将上述的NFS挂载到其他服务器的/home/test下
[root@vm02 ~]# mkdir /home/test
[root@vm02 ~]# mount 192.168.137.2:/home/test /home/test
[root@vm02 ~]# df -h
文件系统                  容量  已用  可用 已用% 挂载点
devtmpfs                  908M     0  908M    0% /dev
tmpfs                     919M     0  919M    0% /dev/shm
tmpfs                     919M  8.7M  911M    1% /run
tmpfs                     919M     0  919M    0% /sys/fs/cgroup
/dev/mapper/centos-root    18G  1.5G   17G    9% /
/dev/sda1                 297M  133M  164M   45% /boot
tmpfs                     184M     0  184M    0% /run/user/0
192.168.137.2:/home/test   18G  2.6G   16G   15% /home/test					# 挂载成功
[root@vm02 ~]#

NFS高级设置

  1. NFS服务相关进程说明

    nfs:NFS服务器的主进程

    nfslock:为NFS文件系统提供锁机制

    rpcbind:提供地址与端口注册服务

    rpc.mountd:处理NFSv2与NFSv3的mount请求

    rpc.nfsd:动态处理客户端请求

    lockd:内核线程,服务端与客户端运行,用来实现NLM网络协议,允许NFSv2与NFSv3客户端对文件加锁

    rpc.statd:网络状态监控协议

    rpc.rquotad:提供用户配额信息

    rpc.idmapd:提供NFSv4名称映射,/etc/idmapd.conf必须配置

  2. NFS客户端的高级设置

客户端手动挂载NFS访问格式:

mount -t nfs -o 选项 主机地址:共享目录 本地挂载目录

选项可多个同时使用,彼此使用逗号分隔

挂载选项的属性:

挂载选项说明
-t挂载的设备上的文件系统类型
-r只读挂载
-w读写挂载
-n不更新/etc/mtab
-a自动挂载所有支持自动挂载的设备:定义在了/etc/fstab文件中,且挂载选项中有“自动挂载”功能
-L以卷标指定挂载设备
-U以UUID指定要挂载的设备
-B绑定目录到另一个目录上
-o挂载文件系统的选项
async:异步模式;
sync:同步模式;
atime/noatime:包含目录和文件;
diratime/nodiratime:目录的访问时间戳
auto/noauto:是否支持自动挂载
exec/noexec:是否支持将文件系统上应用程序运行为进程
dev/nodev:是否支持在此文件系统上使用设备文件;
suid/nosuid是否支持在此文件系统上使用特殊权限
remount:重新挂载
ro:只读
rw:读写
user/nouser:是否允许普通用户挂载此设备
acl:启用此文件系统上的acl功能
mount -t nfs -o noac,nfsvers=4,_netdev 192.168.137.2:/home/test /home/test

NFS命令工具

exportfs

# 重新读取/etc/exports文件
exportfs -r
# 显示详细信息
exportfs -v

在这里插入图片描述

nfsstat

查看NFS共享状态

# 显示NFS服务端状态
[root@vm01 ~]# nfsstat -s
Server rpc stats:
calls      badcalls   badclnt    badauth    xdrcall
29         0          0          0          0

Server nfs v4:
null         compound
1         3% 28       96%

Server nfs v4 operations:
op0-unused   op1-unused   op2-future   access       close        commit
0         0% 0         0% 0         0% 2         2% 0         0% 0         0%
create       delegpurge   delegreturn  getattr      getfh        link
0         0% 0         0% 0         0% 23       26% 4         4% 0         0%
lock         lockt        locku        lookup       lookup_root  nverify
0         0% 0         0% 0         0% 3         3% 0         0% 0         0%
open         openattr     open_conf    open_dgrd    putfh        putpubfh
0         0% 0         0% 0         0% 0         0% 22       25% 0         0%
putrootfh    read         readdir      readlink     remove       rename
2         2% 0         0% 0         0% 0         0% 0         0% 0         0%
renew        restorefh    savefh       secinfo      setattr      setcltid
0         0% 0         0% 0         0% 0         0% 0         0% 0         0%
setcltidconf verify       write        rellockowner bc_ctl       bind_conn
0         0% 0         0% 0         0% 0         0% 0         0% 0         0%
exchange_id  create_ses   destroy_ses  free_stateid getdirdeleg  getdevinfo
1         1% 1         1% 0         0% 0         0% 0         0% 0         0%
getdevlist   layoutcommit layoutget    layoutreturn secinfononam sequence
0         0% 0         0% 0         0% 0         0% 1         1% 26       30%
set_ssv      test_stateid want_deleg   destroy_clid reclaim_comp
0         0% 0         0% 0         0% 0         0% 1         1%
# 仅显示客户端状态
[root@vm02 ~]# nfsstat -c				# 客户端执行
Client rpc stats:
calls      retrans    authrefrsh
31         0          31

Client nfs v4:
null         read         write        commit       open         open_conf
0         0% 0         0% 0         0% 0         0% 0         0% 0         0%
open_noat    open_dgrd    close        setattr      fsinfo       renew
0         0% 0         0% 0         0% 0         0% 3        10% 0         0%
setclntid    confirm      lock         lockt        locku        access
0         0% 0         0% 0         0% 0         0% 0         0% 2         6%
getattr      lookup       lookup_root  remove       rename       link
6        20% 3        10% 1         3% 0         0% 0         0% 0         0%
symlink      create       pathconf     statfs       readlink     readdir
0         0% 0         0% 2         6% 1         3% 0         0% 0         0%
server_caps  delegreturn  getacl       setacl       fs_locations rel_lkowner
5        16% 0         0% 0         0% 0         0% 0         0% 0         0%
secinfo      exchange_id  create_ses   destroy_ses  sequence     get_lease_t
0         0% 0         0% 1         3% 1         3% 0         0% 3        10%
reclaim_comp layoutget    getdevinfo   layoutcommit layoutreturn getdevlist
0         0% 1         3% 0         0% 0         0% 0         0% 0         0%
(null)
1         3%
# 显示挂载信息
[root@vm02 ~]# nfsstat -m
/home/test from 192.168.137.2:/home/test
 Flags: rw,sync,relatime,vers=4.1,rsize=262144,wsize=262144,namlen=255,acregmin=0,acregmax=0,acdirmin=0,acdirmax=0,hard,noac,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.137.3,local_lock=none,addr=192.168.137.2
# 以列表形式显示信息
[root@vm02 ~]# nfsstat -l
nfs v4 client        total:       31
------------- ------------- --------
nfs v4 client       fsinfo:        3
nfs v4 client       access:        2
nfs v4 client      getattr:        6
nfs v4 client       lookup:        3
nfs v4 client  lookup_root:        1
nfs v4 client     pathconf:        2
nfs v4 client       statfs:        1
nfs v4 client  server_caps:        5
nfs v4 client   create_ses:        1
nfs v4 client  destroy_ses:        1
nfs v4 client  get_lease_t:        4
nfs v4 client    layoutget:        1
nfs v4 client       (null):        1
# 都可以与-l组合使用,便于查看信息

rpcinfo

# 生成RPC信息报表
# 显示指定主机rpcbind操作信息表
[root@vm01 ~]# rpcinfo -m
PORTMAP (version 2) statistics
NULL    SET     UNSET   GETPORT DUMP    CALLIT
0       0/0     0/0     1/1     0       0/0

PMAP_GETPORT call statistics
prog            vers    netid     success       failure
mountd          3       tcp       1             0

RPCBIND (version 3) statistics
NULL    SET     UNSET   GETADDR DUMP    CALLIT  TIME    U2T     T2U
0       0/0     0/0     0/0     0       0/0     0       0       0

RPCBIND (version 4) statistics
NULL    SET     UNSET   GETADDR DUMP    CALLIT  TIME    U2T     T2U
0       0/0     0/0     0/0     0       0/0     0       0       0
VERADDR INDRECT GETLIST GETSTAT
0       0       0       1
# 显示指定主机RPC注册信息
[root@vm01 ~]# rpcinfo -p
   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  20048  mountd
    100005    1   tcp  20048  mountd
    100024    1   udp  44103  status
    100024    1   tcp  45007  status
    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  47704  nlockmgr
    100021    3   udp  47704  nlockmgr
    100021    4   udp  47704  nlockmgr
    100021    1   tcp  35644  nlockmgr
    100021    3   tcp  35644  nlockmgr
    100021    4   tcp  35644  nlockmgr
# 显示指定主机所有注册RPC的信息程序,不指定主机时默认显示本机信息
[root@vm01 ~]# rpcinfo -s
   program version(s) netid(s)                         service     owner
    100000  2,3,4     local,udp,tcp,udp6,tcp6          portmapper  superuser
    100005  3,2,1     tcp6,udp6,tcp,udp                mountd      superuser
    100024  1         tcp6,udp6,tcp,udp                status      29
    100003  4,3       udp6,tcp6,udp,tcp                nfs         superuser
    100227  3         udp6,tcp6,udp,tcp                nfs_acl     superuser
    100021  4,3,1     tcp6,udp6,tcp,udp                nlockmgr    superuser

配置固定的端口号

NFS向rpcbind动态注册端口信息,端口信息是动态随机生成的,如果配置固定的端口号有助于我们进行防火墙规则的设置

通过配置文件进行设置:/etc/sysconfig/nfs

  • MOUNTD_PORT:设置mountd程序端口号
  • LOCKD_TCPPORT:设置TCP的lockd程序端口号
  • LOCKD_UDPPORT:设置UDP的lockd程序端口号
  • STATD_PORT:设置rpc.statd程序端口号
  • NFS端口:TCP/UDP 2049
  • rpcbind端口:TCP/UDP 111
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值