第09章文件系统选型及NFS网络文件
9.1文件系统知识详解
9.1.1什么是文件系统
文件系统是对一个存储设备上的数据和元数据进行组织的一种机制。文件系统是在一个磁盘或分区上的组织文件方式的方法,是组织储存文件或者数据的方式,目的是易于查询和存储数据,因此,如果磁盘上没有文件系统也就无法储存数据,再磁盘分区后能够使用之前必须建立对应的文件系统才行。
文件系统是基于存储设备的,比如硬盘或者光盘,并且包含文件物理位置的维护,文件系统也可以说是虚拟数据或者网络数据的存储方法。
文件系统的分区格式创建文件系统才能存放数据,不同的分区。
Linux下常见的文件系统ext2,ext3,ext4,zfs,xfs和Reiserfs.
Windows下常见的NTFS,FAT32
9.1.2文件系统选型简单介绍
1)SAS/SATA硬件文件系统选择:
Reiserfs 大量小文件业务首选reiserfs
Xfs 数据库业务。
xt4 视频下载,流媒体,数据库,小文件业务选择。
Ext2 蓝汛的cache业务,cdn网站加速业务,有缓存,没有日志,所以可以用。
9.2NFS的介绍
什么是NFS?NFS是Network File System的缩写,他的主要功能是通过网络让不同的主机系统之间乐意彼此共享文件或者目录,NFS客户端(一般为应用服务器,如web)可以通过挂载的方式将NFS服务器共享的数据文件目录挂载在NFS客户端本地系统中(股灾在某个点上。)从NFS客户端的机器本地来看,NFS服务器端共享的目录就好像客户端自己的磁盘分区者目录一样,而实际上是远程的服务器目录。
9.2.1NFS在企业中的应用场景
在企业中群架构的工作背景中,NFS网络文件系统一般被用来存储共享文件视频,图片等附件动静态资源文件。
NFS是当前互联网系统架构中最常用的数据存储服务之一,特别是中小型企业公司应用频率很高,大公司或者门户除了使用NFS外,还会使用MFS,GFS,FASTFS,TFS等文件分布式文件系统。
为什么要需要NFS?
9.2.2NFS服务的工作原理
1)NFS的挂载原理
挂载的格式: mount 源 目标
挂载NFS :mount 192.168.1.15:/video /video (192.168.1.15为nfs server的ip地址)
查看(df-h)
2) NFS使用的端口和RPC(Remote Procedure Call)服务
经过前面的介绍,我妈知道NFS系统是通过网络来进行数据数据传输的,因此,NFS需要使用一些端口来传输数据,接下来是NFS使用的端口。
NFS传输的端口是不固定的,就会导致客户端无法知道哪个端口是传输NFS的,所以NFS出现一个RPC服务。
NFS的RPC服务最主要的功能是记录每个NFS功能所对应的信息传递给请求数据的NFS客户端,从而可以确保客户端可以连接到正确的NFS端口上去,达到实现传输交互数据的目的,RPC服务类似于NFS服务和NFS客户端之间的一个中介。
9.2.3NFS配置
1.环境准备:
NFS server (192.168.170.133)与 NFS client(192.168.170.134) 两台服务器
申明版本号
[root@server ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) [root@server ~]# uname -r 3.10.0-327.el7.x86_64 [root@server ~]# uname -m x86_64
2.NFS需要的软件包
l Nfs-utils:NFS服务主程序
包括rpc.nfsd,rpc.mountd两个daemons和相关文档说明及执行命令文件等。
l Rpcbind
NFS可以作为一个RPC的程序,在启动任何一个RPC程序前,需要做好端口和功能的对应映射工作,这个映射工作就是由rpcbind做的。,因此,在提供NFS服务之前必须先启动portmap服务
3. NFS软件包(两台都要安装)
[root@server ~]# rpm -aq nfs-utils portmap rpcbind è查看是否安装
[root@server ~]#
我们来用yum进行安装一下
1 | [root@server ~]# yum groupinstall "NFS file server" -y è安装组包 |
指定组中没有可安装或升级的软件包 (我这里无法安装组包,换下一个方法)
[root@server ~]# yum install nfs-utils rpcbind -y è安装 [root@server ~]# rpm -aq nfs-utils portmap rpcbind è检查安装成功 rpcbind-0.2.0-48.el7.x86_64 nfs-utils-1.3.0-0.65.el7.x86_64
4.服务端的配置
重启服务器后进行检查
[root@server ~]# ps -ef|grep rpc root 987 2 0 03:32 ? 00:00:00 [rpciod] rpc 1009 1 0 03:32 ? 00:00:00 /sbin/rpcbind -w root 2836 2813 0 03:35 pts/0 00:00:00 grep --color=auto rpc [root@server ~]# service rpcbind restart è启动rpc服务 [root@server ~]# rpcinfo -p localhost è查看本机的IP地址有没有房源 program vers proto port service 100000 4 tcp 111 portmapper è对外使用111房源(端口),只有自己,无房源 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 [root@server ~]# systemctl stop rpcbind.socket è立即关闭rcp服务 [root@server ~]# rpcinfo -p localhost è检查rcp服务是否开启 rpcinfo: can't contact portmapper: RPC: Remote system error - Connection refused [root@server ~]# service nfs restart è启动nfs服务 Redirecting to /bin/systemctl restart nfs.service [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 47566 status 100024 1 tcp 58747 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 46284 nlockmgr 100021 3 udp 46284 nlockmgr 100021 4 udp 46284 nlockmgr 100021 1 tcp 58986 nlockmgr 100021 3 tcp 58986 nlockmgr 100021 4 tcp 58986 nlockmgr
- 设置两个服务为开机自启动并检查
[root@server /]# systemctl enable rpcbind.service è开机自启动rpcbind
[root@server /]# systemctl enable nfs-server.service è开机自启动nfs
检查有三种方法(以nfs为例)
1、通过进程查看nfs服务是否运行
1 2 |
ps -aux|grep -v grep|grep nfs 或者ps -ef|grep nfsd #有该进程即为开启状态 |
2、通过命令查看nfs服务的状态
1 |
/etc/init.d/nfs status |
3、chkconfig命令查询系统服务
1 |
chkconfig --list nfs |
4、systemctl status nfs-server.service
[root@server /]# ps -ef|grep nfsd è用第一种方法检测nfs root 3348 2 0 04:19 ? 00:00:00 [nfsd4] root 3349 2 0 04:19 ? 00:00:00 [nfsd4_callbacks] root 3355 2 0 04:19 ? 00:00:00 [nfsd] root 3356 2 0 04:19 ? 00:00:00 [nfsd] root 3357 2 0 04:19 ? 00:00:00 [nfsd] root 3358 2 0 04:19 ? 00:00:00 [nfsd] root 3359 2 0 04:19 ? 00:00:00 [nfsd] root 3360 2 0 04:19 ? 00:00:00 [nfsd] root 3361 2 0 04:19 ? 00:00:00 [nfsd] root 3362 2 0 04:19 ? 00:00:00 [nfsd] root 4745 2813 0 04:28 pts/0 00:00:00 grep --color=auto nfsd [root@server /]# systemctl status rpcbind.service è用第四种检测rpcbbind ● rpcbind.service - RPC bind service Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled) Active: active (running) since 六 2019-09-28 03:48:08 CST; 29min ago Main PID: 2996 (rpcbind) CGroup: /system.slice/rpcbind.service └─2996 /sbin/rpcbind -w 9月 28 03:48:08 server systemd[1]: Stopped RPC bind service. 9月 28 03:48:08 server systemd[1]: Starting RPC bind service... 9月 28 03:48:08 server systemd[1]: Started RPC bind service.
- 客户端配置
[root@client ~]# systemctl start rpcbind è启动rpcbind服务 [root@client ~]# systemctl status rpcbind è检查rpcbind是否开启 ● rpcbind.service - RPC bind service Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled) Active: active (running) since 六 2019-09-28 03:13:49 CST; 1h 29min ago Main PID: 2940 (rpcbind) CGroup: /system.slice/rpcbind.service └─2940 /sbin/rpcbind -w 9月 28 03:13:49 client systemd[1]: Starting RPC bind service... 9月 28 03:13:49 client systemd[1]: Started RPC bind service. [root@client ~]#
- 配置服务(服务端)
[root@server /]# ll /etc/exports è查看配置文件 -rw-r--r--. 1 root root 0 6月 7 2013 /etc/exports [root@server /]# cat /etc/exports è默认为空 [root@server /]# mkdir /data è创建共享/data目录,要将目录共享给客户端 mkdir: 无法创建目录"/data": 文件已存在 [root@server /]# cat /etc/exports è将共享文件写入目录 #shared data for bbs by server at 20190927 è注释,好习惯 /data 192.0.0.0/24(rw,sync) è共享目录 共享的网段(权限,写入磁盘) //rw为读和写,没有x权限 ro为只读,这里为rw systemctl restart/reload nfs.service è重启服务 [root@server /]# showmount -e localhost è本机检查是否可以共享 Export list for localhost: /data 192.0.0.0/24 [root@client ~]# showmount -e 192.168.170.133
得到错误提示为
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
解决方法:
查询发现有相关服务nfs和rpc-bind
firewall-cmd --get-service | grep -E (nfs|rpc)
故在防火墙对服务予以放行
firewall-cmd --add-service=nfs
firewall-cmd --add-service=rpc-bind
在客户端再次尝试showmount命令得到不一样的错误提示
1 | rpc mount export: RPC: Unable to receive; errno = No route to host |
再使用firewall-cmd --get-service查询到预设服务中有mountd,在防火墙对其放行
firewall-cmd --add-service=mountd
至此问题解决
[root@client ~]# showmount -e 192.168.170.133 Export list for 192.168.170.133: /data 192.0.0.0/24
添加项目:其他报错
clnt_create: RPC: Program not registered è报错
- 检查是否能ping通
[root@client ~]# ping 192.168.170.134 PING 192.168.170.134 (192.168.170.134) 56(84) bytes of data. 64 bytes from 192.168.170.134: icmp_seq=1 ttl=64 time=0.021 ms 64 bytes from 192.168.170.134: icmp_seq=2 ttl=64 time=0.040 ms
2.检查telnet
1 2 3 | [root@client ~]# telnet 192.168.170.134 Trying 192.168.170.134... telnet: connect to address 192.168.170.134: Connection refused |
现在遇到的问题是telent失败,查询百度解决telnet: connect to address 127.0.0.1: Connection refused拒绝连接
1、检查telnet是否已安装:
1 | rpm -qa telnet1 |
没有输出则需要进行安装
1 | yum -y install telnet1 |
2、检查telnet-server是否已安装:
rpm -qa telnet-server1
没有则进行安装
yum -y install telnet-server1
3、重新启动xinetd
由于telnet服务是由xinetd守护的
在这步时候,重启失败了,我找到了结绝重启xinetd失败的原因:
1. CentOS7.0 telnet-server 启动的问题。
解决方法:
①、先检查CentOS7.0是否已经安装以下两个安装包:telnet-server、xinetd。命令如下:
[root@server ~]# rpm -qa telnet-server
[root@server ~]# rpm -qa xinetd
没有安装,安装命令如下:
1 2 3 4 5 6 7 8 | [root@server ~]# yum list |grep telnet telnet.x86_64 1:0.17-64.el7 @ base telnet-server.x86_64 1:0.17-64.el7 @ base [root@server ~]# yum install telnet.x86_64 [root@server ~]# yum install telnet-server.x86_64 [root@server ~]# yum list |grep xinetd xinetd.x86_64 2:2.3.15-13.el7 @ base [root@server ~]# yum install xinetd.x86_64 |
安装完成后,将xinetd服务加入开机自启动,将telnet服务加入开机自启动: 最后,启动以上两个服务即可:
[root@server ~]# systemctl enable xinetd.service [root@server ~]# systemctl enable telnet.socket [root@server ~]# systemctl start telnet.socket [root@server ~]# systemctl start xinetd [root@server ~]
结果:解决成功
[root@server ~]# service xinetd restart
Redirecting to /bin/systemctl restart xinetd.service
4、查看xinetd的运行情况
netstat -tnlp 1
结果:
[root@client ~]# telnet 192.168.170.134 Trying 192.168.170.134... Connected to 192.168.170.134.
- 挂载及查看成功
[root@client ~]# mount -t nfs 192.168.170.133:/data /mnt
CentOS7系统-服务(以NFS为例)开机启动/重启/查看状态
第一、启动、终止、重启
systemctl start nfs.service #启动
systemctl stop nfs.service #停止
systemctl restart nfs.service #重启
第二、设置开机启动/关闭
systemctl enable nfs.service #开机启动
systemctl disable nfs.service #开机不启动
第三、检查状态
systemctl status nfs.service
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?