架构设计:系统存储(4)——块存储方案(4)

架构设计:系统存储(3)——块存储方案(3) (接上文《架构设计:系统存储(2)——块存储方案(2)》) 5-2、磁盘阵列设备 目前磁盘阵列设备被广泛应用在从民用... 阅读详情

转自http://blog.youkuaiyun.com/yinwenjie/article/details/52430409

================================
(接上文《架构设计:系统存储(3)——块存储方案(3)》)
6-2、Ext2和Ext3的区别

在上文6-1小节中介绍的Ext文件系统结构主要适用于Ext2和Ext3文件系统,这两个版本的Ext文件系统在数据组织结构上基本上没有什么变化。Ext3文件系统相对于Ext2文件系统所做的主要优化在数据写入策略上。
6-2-1、Ext2写入过程概要

Linux操作系统为了加快I/O操作过程,当有文件需要写入文件系统时Linux操作系统并不会立刻将文件数据实际写入data block,而是存储到一个内存区块中。如果您通过top命令或者Free命令,就可以看到这个名叫cache memory的内存区块。

[root@lab-backup ~]# free
             total       used       free     shared    buffers     cached
Mem:       3805272    3662628     142644        508    1758376    1491128
-/+ buffers/cache:     413124    3392148
Swap:      3948540          0    3948540

无论是Ext2文件系统还是Ext3文件系统又或者是Ext4文件系统,写入cache memory区块的这个过程是不会改变的。以上示例效果中还有一个叫做buffers memory的内存区块,这个区块缓存了文件系统的部分Inode信息,这样保证了操作系统不会随时到文件系统上寻找Inode——优化文件系统的读性能。cache memory区块和buffers memory区块由操作系统自行管理,它们只会使用当前没有被应用程序占用的空闲内存。当应用程序请求新的内存区块且空闲内存不够时,操作系统会释放部分cache memory区块或者buffers memory区块。后文我们讲解Linux下的Page Cache技术时,还会对这部分只是进行详细讲解。当cache memory区块写满或者到达一个等待时间后,操作系统就会正式开始向文件系统写数据了。

在Ext2文件系统中,完成文件写入的过程可以简要的进行如下描述:首先文件系统会在收到文件写入请求后根据算法寻找一个还没有使用的Inode,这个算法过程根据不同文件系统小版本和Linux内核版本的不同而有所变化,但寻找原则都是一样的,即尽可能为文件寻找连续的inode和data block。上文已经提到Ext文件系统中,每一个block group都有Block bitmap区域和Inode bitmap区域分别用于记录block group中的block和Inode的使用情况。在寻找Inode的这个步骤中,block group的Block bitmap、Inode bitmap区域还不会被写入任何变化,block group的Group description table区域也不会被写入任何变化。

接下来Ext2文件系统就要向硬件层正式写入数据了,这个步骤还包括建立Inode和data block的关联信息。最后当文件系统相对空闲的情况下,文件系统才会更新block group中的Block bitmap、Inode bitmap和Group description table区域。正常情况下这种操作过程并没有太大的问题,因为文件系统随时都清楚哪些Block bitmap、Inode bitmap被真正使用了,哪些Block bitmap、Inode bitmap是被使用但还没有来得及更改状态。当文件系统正常关闭时Ext2文件系统会设置一个校验标记Valid bit=1,表示本次文件系统的操作正常结束。

但是如果当文件系统因为各种原因异常关闭时(例如断电)这个标记的值就为0,那么问题就来了。因为哪些已经被使用但还没有来得及被标示的Block bitmap、Inode bitmap区域,和真实的使用情况就存在误差了。虽然操作系统下次启动时会对整个文件系统进行扫描试图恢复操作(主要目的是恢复Block bitmap、Inode bitmap和真实事情情况的一致性),但是操作系统并不保证一致性被全部恢复。这样看来Ext2文件系统的写入过程至少存在一下几个问题:

由于data block块的写入操作和Block bitmap、Inode bitmap区域的更新过程是分开进行的,所以当系统异常关闭时Ext2文件系统并不能保证Block bitmap、Inode bitmap的状态和真实的block使用情况完全一致。所以才会有系统重启时试图恢复磁盘一致性的修复操作。

Ext2文件系统对于大文件的读写性能并不好,这是因为当文件特别大时,Ext2文件系统会启用三级间接指针和四级间接指针建立Inode和data block的联系。虽然当data block size为4KB时单个文件的大小可达4TB,但是因为存储大文件时会启用二级、三级甚至四级间接指针,这大大增加了文件系统上的索引查找时间。所以这种多级索引的思路除了可以增加单个文件容量外,对提升大文件的读写性能实际上并没有太多帮助。

另外Ext2文件系统在向data block写入文件数据时,将以data block size(默认为4KB)为单位依次向硬件层提交数据,这就是为什么在其它设置不变的情况下,如果将Ext2文件系统的data block size格式化为8KB,会增加一定的磁盘读写性能的原因。

6-2-2、Ext3日志模式

以上小节中提到的Ext2文件系统的明显问题中,最严重的应该还是文件系统异常情况下Block bitmap、Inode bitmap可能出现的一致性问题。所以Ext3文件系统在基本保持Ext2文件系统组织结构的前提下,使用索引日志的思路来解决Ext2文件系统上的数据一致性问题。

Ext3文件系统又被称为日志文件系统,它在Ext2文件系统的基础上做的主要改动就是,在正式写入data block数据并建立Inode索引前,通过在磁盘上的某块固定位置写入一段日志数据的方式建立这两个操作过程的关系,并根据后续操作进行日志数据的保留/删除,以达到保持操作一致性的目的。这样一来,即使文件系统上一次异常关闭,当文件系统再次启动时也不需要再进行整个文件系统Inode和data block扫描了,只需要重新加载日志数据文件系统就可以知道上一次异常关闭时还有哪些Block bitmap、Inode bitmap没有处理完。

Ext3文件系统支持三种日志模式,他们在数据一致性和I/O性能上有所区别:

journal日志模式

在这种模式下,当文件系统正式开始进行磁盘操作前会在磁盘的上专门的日志区域创建这个文件的副本,包括这个文件的Inode和data block完整信息,副本创建完成后才会按照正常的写入过程进行文件写入。当写入操作正常完成后,文件系统会删除日志区域的文件副本。这样一来当文件系统发生异常并重启后,e2fsck检测程序会扫描日志区域中的副本:如果发现文件副本本身就不完整,则会丢弃这部分副本。如果发现文件副本是完整的,则会继续完成正式文件的写入过程,最后删除文件副本。很显然journal日志模式会增加单个文件的磁盘操作次数,所以journal日志模式是三种日志模式中速度最慢的一种。但是journal日志模式却可以做到最完整的数据一致性要求。

ordered日志模式

ordered日志模式是Ext3/Ext4文件系统默认的日志模式。这种模式比 journal日志模式快了许多,因为ordered日志模式下Ext文件系统的日志区域并没有真正记录文件的真实数据,不会发生一个文件的多次读写过程。当文件系统为新文件确定了Inode和block区域后,这些Inode、Block bitmap、Inode bitmap等索引信息将会首先保存到文件系统的日志区域,并形成一个事务单位。当文件数据被完整写入磁盘对应的block后,文件系统才会将日志区域的Inode信息和block信息提交到对应的block group中,完成整个写入过程。当文件系统发生异常并重启后,e2fsck检测程序会扫描日志区域中的副本:如果发现还有事务单位没有被提交,那么磁盘上对应的block位置上的信息将被清除,以保持文件信息一致性。

writeback日志模式

这是一种异步日志模式,文件系统的日志区域虽然也记录将写入磁盘的新文件的Inode、Block bitmap、Inode bitmap等索引信息。但是和ordered日志模式不同的是,这些日志信息记录过程和文件数据的写入过程没有先后关联,并且也不存在“提交”的概念。当文件系统发生异常并重启后,e2fsck检测程序也不会按照日志区域的数据状态进行一致性修复。writeback日志模式在大多数情况下能够提供最佳的Ext3/Ext4文件系统性能,因为日志功能几乎是关闭的。

从以上三种Ext3文件系统日志模式的简述中,可以发现的Ext3日志并不保证数据不丢失。实际上保证数据不丢失并不是Ext3日志的目标,而保证数据一致性才是Ext3日志的主要目标。为了达到这个目标,日志数据甚至会主动丢弃无法复原的副本数据。
6-2-3、设置文件系统日志级别

本小节介绍如何查看和设置Ext3/Ext4文件系统的日志模式。首先为了确定当前文件系统是否开启了日志模式,可以使用dumpe2fs命令进行查看:

# dumpe2fs /dev/sdb2 
dumpe2fs 1.41.12 (17-May-2010)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          0e94b563-8348-4056-8770-67fa34e2b903
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype 
......
Journal backup:           inode blocks
Journal features:         (none)
日志大小:             128M
Journal length:           32768
Journal sequence:         0x00000001
Journal start:            0
......
//以下的block group信息可以忽略

可以看到Filesystem features选项中有一个has_journal关键信息标识,这表示当前文件系统已经开启了日志功能。如果没有看到这个标记,则说明文件系统本身还没有开启日志功能——这种情况下Ext3文件系统就和Ext2文件系统没有太大区别了。

以下命令可以开启Ext3/Ext4文件系统的日志功能:

# tune2fs -O has_journal /dev/sdb2
tune2fs 1.41.12 (17-May-2010)
Creating journal inode: done

以下命令可以关闭Ext3/Ext4文件系统的日志功能:

# tune2fs -O ^has_journal /dev/sdb2
tune2fs 1.41.12 (17-May-2010)

但必须注意这并不表示指定了具体的日志模式,在开启了文件系统日志功能的情况下读者可以在使用mount进行具体挂载时指定日志模式。如下所示:

mount -o data=journal /dev/sdb2 /mnt/hgfs/

以上命令的data参数部分可以换成ordered、writeback和journal,代表文件系统支持的三种日志模式。设置完成后文件一同也完成了挂载。但是怎么检查日志模式设置是否成功呢?读者可以通过dmesg命令查看Linux系统的内核日志,在日志的最后一行会有最近一次的挂载信息,类似如下:

# dmesg
......
EXT3-fs (sdb2): using internal journal
EXT3-fs (sdb2): mounted filesystem with journal data mode
SELinux: initialized (dev sdb2, type ext3), uses xattr

可以看到内核日志信息的最后一行信息说明最近完成的内核变动操作,是按照journal日志模式挂载sdb2分区。当然内核日志信息包含了很多无用的信息,读者还可以通过以下命令索引出需要查看的信息:

# dmesg | grep -B 1 "mounted filesystem"
......
sd 2:0:0:0: [sda] Attached SCSI disk
EXT4-fs (sda2): mounted filesystem with ordered data mode. Opts:
--
Microcode Update Driver: v2.00 <tigran@aivazian.fsnet.co.uk>, Peter Oruba
EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts:
--
EXT3-fs (sdb2): using internal journal
EXT3-fs (sdb2): mounted filesystem with journal data mode
......

当然最终我们还是要实现磁盘的永久挂载,这是就需要更改Linux操作系统中的/etc/fstab文件了。如果读者使用的是文件系统默认的ordered日志模式,则不需要在/etc/fstab文件中进行额外的设置。但如果不是这样的话,读者在设置/etc/fstab文件时,就要在其中的options列说明文件系统使用的日志模式。类似如下所示:

# vim /etc/fstab
......
/dev/sdb2       /mnt/hgfs       ext3        data=journal        0 0
......

7、下文介绍

上一节我们讨论了Ext3文件系统相对于Ext2文件系统最大的改进点——日志模式。但是Ext2文件系统中另外一个问题还没有做太多调整:因为存储大文件时Ext2/Ext3文件系统会启用二级、三级甚至四级间接指针建立Inode和data block的联系,这样的做法会降低文件系统上对大文件的读写能力。

Ext4文件系统的细节文章就不再过多介绍了,因为系统存储这个专题到到现在已经从最底层硬件设备开始到阵列结构再到操作系统上的文件系统进行了说明,相信读者已经理解了为什么这种传统的存储方案被称为块存储方案了。但是真正和软件架构有关的知识却还一点都没有介绍。这显然偏离了本专题最初规划。

对Ext4文件系统有兴趣的读者可以继续参考Ext官方文档(https://kernelnewbies.org/Ext4) ,从下文开始我们将转入普遍搭建在块存储方案之上的关系型数据库的相关知识介绍(主要为MySQL数据库),包括影响关系型数据库性能的重要因素、如何进行关系型数据库集群的搭建。

块存储、文件存储、对象存储核心区别与实战选型指南 在数据存储领域,理解不同存储类型的核心原理是构建高效、可扩展应用架构的基础。存储技术从底层的数据组织方式上可分为块存储、文件存储和对象存储三大类。块存储提供最底层的原始块设备访问,具备极低延迟和强一致性,是数据库、虚拟机等高性能场景的基石。文件存储则在块设备之上构建了目录树结构,通过标准文件协议(如NFS、SMB)提供共享访问能力,适用于代码共享、日志集中管理等需要文件语义的场景。对象存储采用扁平化的桶-对象模型和HTTP RESTful API,专为海量非结构化数据设计,具备近乎无限的扩展性和高耐用性,其 阅读详情

相关推荐

Oracle云存储解决方案比较:对象存储vs块存储vs文件存储

本文旨在为技术决策者、架构师和开发人员提供Oracle云存储解决方案的全面比较。Oracle对象存储(Object Storage)Oracle块存储(Block Volume)Oracle文件存储(File Storage)通过深入分析每种存储类型的技术实现、性能特征和适用场景,帮助读者做出明智的技术选型决策。首先介绍三种存储类型的基本概念和Oracle实现深入分析各自的架构原理和技术实现提供性能指标和实际测试数据比较通过代码示例展示具体使用方法分析典型应用场景和最佳实践。

AI云原生与云计算技术学院 908

三种存储类型:块存储、文件存储、对象存储

链接:https://www.zhihu.com/question/21536660/answer/1159036357 链接:https://www.cnblogs.com/hukey/p/8323853.html https://www.cnblogs.com/sylar5/p/11520149.html 存储类型 先从三种存储类型开始。 看了很多文章,感觉都无从下手,因为我还不了解为什么有这么多的存储方式和存储类型,所以先不看这些概念的定义,先了解为什么会有这些概念。 为什么会有这么多存储

Aiky哇 2万+

块存储还是对象存储?高可用架构下,别再选错了!

在高可用架构设计中,对象存储与块存储的选择取决于数据特性和业务需求。对象存储(如OSS、COS)适合存储非结构化文件,具备多副本、跨AZ容灾等天然高可用特性,适用于用户上传内容、图片视频等场景。块存储(如云硬盘、EBS)则提供低延迟、高IOPS和完整文件系统支持,是数据库、容器等关键业务的必备选择。实际应用中可结合两者优势:热数据用块存储保证性能,冷数据归档至对象存储降低成本。正确选择存储方案将直接影响系统的稳定性和运维效率。

Echo_Wish 126

无限容量分布式文件存储解决方案

FastDFS 是一个轻量级、开源的、高性能、分布式的文件系统。文件存储文件同步文件访问(文件上传和文件下载)解决了大容量存储和负载均衡的问题FastDFS 非常适合以文件为载体的在线服务,如相册网站、视频网站等等。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制。并注重高可用、高性能等指标。使用FastDFS很容易搭建一套高性能的文件服务器集群,提供文件上传、下载等服务。FastDFS是一种轻量级对象存储解决方案。

沉浸式Study 1457

AutoCAD2014与ObjectARX开发环境搭建实战指南

本文提供了一份详细的AutoCAD2014与ObjectARX开发环境搭建实战指南。内容涵盖从AutoCAD2014、Visual Studio 2010及ObjectARX 2014 SDK的版本匹配与环境准备,到Wizard安装、编码问题解决、Visual Studio配置,并最终通过一个完整的绘图命令开发示例,手把手引导开发者创建并加载第一个可运行的ObjectARX插件,为后续深入开发奠定坚实基础。

weixin_28475533的博客 286

KEPServerEX与三菱iQ-R系列PLC通讯

KEPServerEX与三菱iQ-R系列PLC通讯Mitsubishi Ethernet北京东方鼎晨科技有限公司目 录1. 前言2. 三菱PLC端相关设置3. Kepware端相关设置KEPServerEX是美国PTC Kepware公司生产的具有行业性的连接平台,KEPServerEX支持150多种通讯协议,用于向您的所有应用程序提供单一来源的工业自动化数据。该平台的设计使用户能够通过一个直观的用户界面来连接、管理、监视和控制不同的自动化设备和软件应用程序。KEPServerEX利用OPC(自动化产业的互

qq_28768521的博客 8095

Java对象存储深度解析:从本地到云端的4大主流方案实战(附完整代码)

"作为Java全栈开发者,你是否还在为海量非结构化数据存储方案选型而困惑?本文深度剖析4种企业级对象存储实现方案:本地存储的高效实现、自建MINIO集群的部署技巧、阿里云OSS的SDK最佳实践,以及FastDFS在分布式场景下的独特优势。通过完整的代码示例和性能对比数据,带您掌握不同场景下的技术选型策略。特别包含SpringBoot集成方案、多存储源动态切换等进阶技巧,适用于需要处理图片/视频存储、日志归档等场景的中高级开发者。文末附各方案的成本效益分析表,助您做出最优架构决策。"

Zyw907155124的博客 5253

Unity Shader学习笔记/Urp/水墨风效果

Unity Shader学习

qq_63133691的博客 2116

分布式块存储的引擎如何设计?

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34240520的博客 268

基于STM32平衡小车设计

随着智能硬件的发展,基于STM32的两轮智能平衡车作为一种新型的智能移动工具,具备较高的应用价值。本文旨在设计并实现一款基于STM32微控制器的智能平衡车系统,提升其稳定性和操控性,探索如何通过传感器数据和控制算法实现精确平衡控制。 本设计基于STM32微控制器,选择了STM32F103系列作为核心控制器,具有足够的处理能力和丰富的外设接口。系统通过MPU6050传感器获取三轴加速度和三轴陀螺仪数据,实现实时姿态检测。电机驱动部分采用合适的驱动模块,能够控制两个直流电机,并支持PWM调速。设计中还包括OL

m0_74026776的博客 2730

莆田市C++专项选拔第一轮题4

现在小明同学想要从两堆硬币中各选择一枚硬币,使得两枚硬币的面值之和 不超过 k。不同的硬币组合,就算面值相同,也视为不同的方案。现在他把这些硬币分成了两堆,已知两堆硬币分别有 n 和 m 枚硬币。可选方案有: (1,2), (1,1), (1,1), (5,2), (5,1), (5,1),共 6 种。第一行三个整数 n, m, k,分别表示第一堆硬币的数量,第二堆硬币的数量,以及面值之和的上限。对于30%的数据,1 ≤ n , m ≤ 1000 , 1 ≤ b , c ≤ 1000。

lpstudio的博客 924

架构设计:系统存储(1)——块存储方案(1)

在“系统存储”专题中,我们将按照“从上至下”的顺序向读者介绍整个“系统存储”体系。在这个专题中我们将至少介绍机械硬盘的主要结构、磁盘阵列的分类、操作系统的EXT文件系统、NAS文件共享存储方案、分布式文件系统重要技术点和分布式文件系统示例。最后如果有时间我们将自行设计一款分布式文件系统。下图可以大致描述笔者的写作思路:本专题首先会花费几篇文章向读者介绍块存储的知识,包括最底层机械硬盘、固态硬盘的构造结构和工作过程。块存储的知识中我们还将介绍磁盘阵列技术,包括磁盘阵列的组织方式和设备类型。

smart_an的专栏 1398

uniapp - [微信小程序 | 安卓苹果app] 详细实现接入天地图完整流程,提供显示地图、IP 属地定位 / 用户定位的城市名称、用户定位的经纬度超多功能(复制运行示例代码,详细注释及常见问题)

uni-app,微信小程序,安卓app,苹果app,App端,支付宝小程序,nvue,天地图,国家天地图api,接入使用天地图,uniApp小程序端接入天地图,uniapp安卓苹果app端接入天地图,微信小程序平台如何引入天地图,天地图Api使用教程,如何在uniapp里集成天地图,使用天地图获取当前定位,天地图api教程,天地图官方文档,天地图详细使用教程,Uniapp项目如何使用天地图,项目引入天地图配置及使用教程,使用天地图获取用户定位,天地图获取用户当前位置信息(经纬度),如何通过天地图拿到用户定位

🏆 前端领域优质创作者 1万+

架构设计:系统存储(2)——块存储方案(2)

作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!

smart_an的专栏 1017

【Settings随记:二】一级菜单,二级菜单的添加与隐藏,添加辅助功能

首先会去调用父类的onCreatePreferences(Bundle savedInstanceState, String rootKey)方法,然后调用addPreferencesFromResource(R.xml.assistant_function)方法(这个方法是父类的)加载二级菜单的xml配置文件,实现创建二级菜单,这个配置文件路径在res/xml/assistant_function.xml。controller:该item的控制器,控制它的内容展示,是否可用,也可以控制它的点击事件等。

镇元子的博客 1595

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Cortex块存储架构深度解析:从设计原理到性能调优的终极指南

你是否曾经遇到过Prometheus存储空间不足的问题?或者面对海量监控数据时查询性能急剧下降的困境?Cortex作为Prometheus的分布式存储解决方案,其块存储架构正是为解决这些问题而生。让我们一起来探索这个强大系统的内部工作机制。 ## 为什么需要块存储架构? 传统Prometheus的单机存储模式在面对大规模监控场景时面临诸多挑战:存储容量有限、查询性能瓶颈、数据可靠性不足。Cor

gitblog_00718的博客 1062

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【存储】存储协议全景:文件存储、块存储、对象存储选型指南

本文对比了块存储、文件存储和对象存储的核心区别及适用场景: 存储类型对比 块存储:提供裸盘级访问(iSCSI/FC/NVMe-oF),延迟最低,适合数据库/虚拟机 文件存储:提供POSIX文件接口(NFS/SMB),支持多机共享目录,适合部门共享/HPC 对象存储:通过HTTP API访问(S3),无限扩展,适合图片/视频/备份等静态数据 关键选择维度 数据访问方式:直接块操作 vs 文件读写 vs REST API 管理复杂度:需自建文件系统 vs 开箱即用 性能需求:低延迟优先 vs 高吞吐优先 冗余策

Gwumingzhibei的博客 426

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

上一篇: 架构设计:系统存储(3)——块存储方案(3)
下一篇: 架构设计:系统存储(5)——MySQL数据库性能优化(1)
lm_123_456
博客等级 码龄11年 35粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值