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高级设置
-
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必须配置
-
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动态注册端口信息,端口信息是动态随机生成的,如果配置固定的端口号有助于我们进行防火墙规则的设置文章来源:https://www.toymoban.com/news/detail-744206.html
通过配置文件进行设置:/etc/sysconfig/nfs文章来源地址https://www.toymoban.com/news/detail-744206.html
- MOUNTD_PORT:设置mountd程序端口号
- LOCKD_TCPPORT:设置TCP的lockd程序端口号
- LOCKD_UDPPORT:设置UDP的lockd程序端口号
- STATD_PORT:设置rpc.statd程序端口号
- NFS端口:TCP/UDP 2049
- rpcbind端口:TCP/UDP 111
到了这里,关于网络文件系统 | NFS 服务的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!