计算机存储—大话存储II读书

总线

计算机总线示意图
CPU与北桥连接的总线叫做系统总线,也称为前端总线。南桥上一般集成众多外设的控制器,比如磁盘控制器、USB控制器等。
设备地址映射:每个IO设备在启动时都要向内存中映射一个或多个地址,这个地址有8位长,又被称为IO端口。针对这个地址的数据,统统被北桥芯片重定向到总线上实际的设备上。假如,IDE磁盘控制器地址被映射到地址0xA0,CPU根据程序机器代码,向这个地址发出多条指令来完成一个读操作。

柱面和盘片上的磁道
磁道被分成一段段的等距圆弧(每个圆弧就是一个扇区,每个扇区可以存放512Bde 数据和一些其他信息),每个扇区中的数据作为一个单元同时读出或写入,是读写的最小单位。一个扇区有两个主要部分:存储数据地点的标识符和存储数据的数据段。

扇区示意图
扇区头标包括组成扇区三级地址的三个数字。扇区所在的柱面。磁头编号。扇区在磁道上的位置,即扇区号。
CHS地址:柱面Cylinder、磁头Header、扇区Sector。
CHS编址在早期的小容量硬盘中非常流行,但是目前的大容量硬盘的设计和低级格式化方式已经有所变化,所以CHS编址方式已经不再使用,而转为LBA编址方式。
LBA(Logical Block Address)。LBA1表示0号盘片0号磁道0号扇区,依次类推,LBA地址到实际的盘片、磁道和扇区地址的映射工作由磁盘内部的逻辑电路来查询ROM中的对应表得到这样就完成了物理地址到逻辑地址的抽象、虚拟和映射。

硬盘接口

在这里插入图片描述
硬盘接口技术

  • 用于ATA指令系统的IDE接口
  • 用于ATA指令系统的SATA接口
  • 用于SCSI指令系统的并行SCSI接口
  • 用于SCSI指令系统的串行SCSI(SAS)接口
  • 用于SCSI指令系统的IBM专用串行SCSI接口(SSA)
  • 用于SCSI指令系统的并且承载于FabreChannel协议的串行FC接口(FCP)

SCSI ID用于区分基于SCSI指令系统的不同硬盘。但在逻辑上,每个SCSI ID下面可以区分出若干LUN ID。(
SCSI控制器初始化时,会对每个SCSI ID上的设备发出一条Report LUN指令,用来收集每个SCSI ID设备的LUN信息)对于带有RAID功能的SCSI接口磁盘阵列设备来说,由于会产生很多的虚拟磁盘,需要LUN来扩充可寻址范围,所以习惯上称磁盘阵列生成的虚拟磁盘为LUN。而LUN对于传统SCSI总线来说意义不大,因为传统SCSI设备本身不可物理上再分。
在这里插入图片描述

机器刚通电,操作系统还没有启动起来并加载磁盘控制器驱动的时候,此时是怎么访问磁盘的呢?BIOS中存放了初始化系统所必须的基本代码。系统BIOS初始化过程中有这么一步,就是查找磁盘控制器的BIOS地址,然后执行这个地址上的代码,也就是磁盘控制器的BIOS代码,来初始化磁盘控制器。磁盘控制器自己的BIOS可以存放在主板上单独的ROM中,也可以存放在系统BIOS所在的ROM里的一块空间,控制器BIOS所包含的就是基本的控制器驱动程序,说白了就是向系统BIOS注册Int13中断向量。初始化时执行这个驱动程序而使得CPU可以发送对应的读指令,提取磁盘0磁道的第一个扇区中的代码载入内存执行,从而加载OS。
磁盘控制器驱动程序、磁盘控制器和磁盘驱动器控制电路三者的关系

RAID

可以使用软件或硬件实现RAID。对于软件RAID,操作系统最底层还是能感知到实际物理磁盘的,但是对于硬件RAID来说操作系统根本无法感知底层的物理磁盘,而只能通过厂家提供的RAID卡的管理软件来查看卡上所连接的物理磁盘。而且,配置RAID卡的时候,也不能在操作系统下完成,而必须进入这个硬件来完成(或者在操作系统下通过RAID卡配置工具来设置)。一般RAID卡都是在开机自检的时候,进入它的ROM配置程序来配置各种RAID功能。

带CPU的RAID卡俨然就是一个小的计算机系统,有自己CPU、内存、ROM、总线和IO接口。SCSI RAID卡上一定要包含SCSI控制器,因为其后端连接的依然是SCSI物理磁盘。其前端连接到主机的PCI总线上,所以一定要有一个PCI总线控制器来维护PCI总线的仲裁、数据发送接收等功能呢。还需要一个ROM,一般都是用Flash芯片作为ROM,其中存放着初始化RAID卡必须的代码以及实现RAID功能所需的代码。RAM的作用是作为数据缓存,及RAID卡上的CPU执行RAID运算所需要的内存空间。

RAID卡结构示意图

逻辑划分

由于磁盘容量增长迅速,在其上实现RAID后,其可用容量很大,可在其上进行逻辑划分,称为逻辑盘技术。目前各种RAID卡都可以划分逻辑盘,逻辑盘大小任意设置。每个逻辑盘都认成一块单独的物理磁盘。这里不要和分区搞混,分区是OS在一块物理磁盘上做的再次划分。而RAID卡提供给OS的,任何时候,都是一块或几块逻辑盘,也就是OS认为的物理磁盘。OS在这个磁盘上,可以进行分区、格式化等操作。RAID卡对逻辑磁盘进行划分,既然要划分,就要心中有数,比如某块磁盘的某个区域,划分给哪个逻辑盘用,对应逻辑盘的LBA地址是多少,这块磁盘的RAID类型是什么等。而这些东西不像RAID映射那样根据几个简单的参数就能确定,而对应关系是可以随时变化的,比如扩大和缩小、移动等。所以有必要在每块磁盘上保留一个区域,专门记录这种逻辑盘划分信息、RAID类型以及组内的其他磁盘信息等,这些信息统称为RAID信息。不同厂家、不同品牌的产品实现不一样,SNIA委员会为了统一RAID信息的格式,专门定义了一种叫做DDF的标准。一种RAID类型中包含的磁盘共同组成一个RAID Group,简称RG。逻辑盘就是从这个RG中划分出来的,原则上逻辑盘不能跨RG来划分,就是不能让一个逻辑盘的一部分处于一个RG,另一部分处于另一个RG。因为RG的RAID类型不一样,其性能也就不一样。DDF布局图

卷管理层

高级VM

在操作系统上运行一层软件来实现对RAID控制器提交给OS的逻辑磁盘的管理(RAID控制器是硬件底层实现RAID,实现的逻辑盘操作起来不灵活)。实际中有很多基于这种思想的产品,通用名称叫做卷管理器(Volume Manager,VM)。比如微软和Veritas合作开发的LDM(逻辑磁盘管理)。用于Linux、AIX、HPUX系统的LVM(Logical Volume Manager)以及用于Sun Solaris系统的Disk Suite。它们都是基于在OS层面,将OS识别到的物理磁盘(可以是真正的物理磁盘,也可以是经过RAID卡虚拟化的逻辑磁盘)进行组合,并再分配的软件。

扫描二维码关注公众号,回复: 4080944 查看本文章

LVM逻辑卷管理器的技术结构
PV:LVM将操作系统识别到的物理磁盘(或者RAID控制器提交的逻辑磁盘)改了个叫法,叫做Physical Volume,即物理卷。
VG:多个PV可以被逻辑地放到一个VG中,也就是Volume Group卷组。VG是一个虚拟的大存储空间,逻辑上是连续的。尽管它可以由多块PV组成,但是VG会将所有的PV首尾相连,组成一个逻辑上连续编址的大存储池。
PP:Physical Partition 物理区块,它是在逻辑上再将一个VG分割成连续的小块。注意是逻辑上分割,而不是物理上分割,也就是说LVM会记录PP的大小(由几个扇区组成)和PP序号的偏移。这样就相当于在VG这个大池中顺序切割,如果设定一个PP大小为4MB,那么这个PP就会包含8192个实际物理磁盘上的扇区。如果PV是实际的一块物理磁盘,那么这些扇区就是连续的。如果PV本身是已经经过RAID控制器虚拟化而成的一个LUN,那么这些扇区很可能位于若干条带中,也就是这8192个扇区物理上不一定连续。
LP:PP可以再次组成LP,即Logical Partition(逻辑区块)。一个LP可以对应一个PP,也可对应多个PP。前者对应前后没什么区别,后者又分两种情况:一种为多个PP组成一个大LP,像RAID0一样;另一种是一个LP对应几份PP,这几份PP每一份内容都是一样,类似于RAID1,多个PP内容互为镜像,然后用一个LP来代表它们,往这个LP写数据。也就同时写入了这个LP对应的几份PP中。
LV:若干LP经过连续组合组成LV(Logical Volunme,逻辑卷),也就是LVM所提供的最终可用来存储数据的单位。生成的逻辑卷,在主机看来还是和普通磁盘一样,可以对其进行分区、格式化等。

LVM表面上实现了物理盘的融合,但是还是需要记录物理盘等信息,这个区域叫做VGDA。LVM通过读取每块物理磁盘上的这个区域来获取LVM的配置信息,比如PP大小、初始偏移、PV数量和信息、排队顺序及映射关系等。LVM初始化会读取这些信息,然后在缓存中生成对应的映射公式,从而完成LV的挂载。挂载之后,就可以接受IO了,比如上层访问某个LV的LBA 0xFF地址,那么LVM就需要通过缓存中的映射关系判断这个地址对应到实际物理磁盘是哪个或哪几个实际地址。假设这个地址实际对应了磁盘a的LBA 0xAA地址,那么就会通过磁盘控制器驱动直接给这个地址发数据,然后这个地址被RAID控制器收到后,可能还要做一次转换。因为OS层的“物理磁盘”可能对应真正的存储总线上的多块物理磁盘,这个映射就需要RAID控制器来做了。
VGDA示意图

低级VM

OS本身会自带卷管理软件层,这个卷管理软件非常简单,只能管理单个磁盘,而不能将它们组合虚拟成卷,不具有高级卷管理软件的一些灵活功能。OS自带的一些简单VM卷管理软件,只会待用总线驱动(一种监视IO总线Plug And Play,即PNP,即插即用),发现硬件之后再挂接对应这个硬件的驱动,然后查询出这个硬件的信息,其中就包括容量,所以我们才会在磁盘管理器中看到一块块的磁盘设备。即从底层向上依次是物理磁盘、磁盘控制器、IO总线、总线驱动、磁盘控制器驱动、卷管理软件程序、OS磁盘管理器中看见的磁盘设备。而高级卷管理软件是将原本OS自带的简陋的卷管理功能进行了扩展,比如可以对多个磁盘进行组合、再分等。不管是OS单一VM还是高级VM,磁盘在VM这一层处理之后,应该称为卷比较恰当,就算卷只由一块磁盘抽象而成。

分区管理可以看作是一种最简单的卷管理方式。分区就是将一块磁盘抽象成一个仓库,然后将这个仓库划分成具体的一库区、二库区等。比如一块100GB磁盘,如果只分一个区,就显得很不便于管理。对磁盘进行分区就是使用低级VM管理软件对磁盘进行管理,比如Windows自带得磁盘管理器。分区信息被保存在分区表中,分区表位于磁盘0磁道0磁头0号扇区上,也就是LBA1这个地址得扇区上。这个扇区叫做MBR,即主引导记录。MBR扇区不仅仅保存分区表,还保存了BIOS跳转时所需要执行得第一句指令代码,所以才叫做主引导记录。
BIOS和UEFI

高级VM没有抛弃MBR分区的解决方案,而是在MBR基础上,又增加了类似VGDA这种更加灵活的数据结构来动态管理磁盘。

文件系统中的IO方式

在这里插入图片描述
图中IO Manager是操作系统内核的一个模块,专门用来管理IO,并协调文件系统、卷、磁盘驱动程序各个模块之间的运作。

  • 某时刻,应用程序调用文件系统接口,准备写入某文件从某个字节开始的若干字节。
  • IO Manager最终将这个请求发送给文件系统模块。
  • 文件系统将某个文件对应的逻辑偏移映射成卷的LBA地址偏移。
  • 文件系统向IO Manager请求调用卷管理软件模块接口。
  • 卷管理软件将卷对应的LBA地址偏移翻译映射成实际物理磁盘对应的LBA地址偏移,并请求调用磁盘控制器驱动程序。
  • IO Manager向磁盘控制器驱动程序请求将对应LBA地址段的数据从内存写入某块物理磁盘。

磁盘阵列

JBOD磁盘柜:将所有磁盘放入机柜,配有独立电源和散热系统,接口方面,内部其实就是一条SCSI线缆,只不过将它做到了电路板上。
在这里插入图片描述
磁盘阵列:在机柜中加入RAID控制器
在这里插入图片描述

人们将最原始的存储架构称为DAS Direct(Dedicate) Attached Storage,直接连接存储,意思是指存储设备只用于与独立的一台主机服务器连接,其他主机不能使用这个存储设备。如PC中的磁盘或只有一个外部SCSI接口的JBOD都属于DAS架构。

SAN概念的出现,只是个开头,因为按照SCSI总线16个节点的限制,不可能接入很多磁盘。要扩大这个SAN的规模。如果仅仅用并行SCSI总线,那么SAN只能像PCI总线一样作为主机的附属品,而不能成为一个真正独立的网络。

FC网络

Fibre Channel也就是网状通道的意思。像TCP/IP一样,FC协议集同样具备TCP/IP协议集以及以太网中的很多概念,比如FC交换、FC交换机、FC路由器、FC路由、SPF路由算法等。FC的出现就是为了取代SCSI协议集的底层传输模块,由FC协议的底层模块担当传输通道和手段,将SCSI协议集的上内容传送到对方。

前端升级为FC
FC在盘阵的前端接口技术的革命成功之后,又在后端的接口技术取得了成功。FC技术的两种拓扑,一个称霸前端,一个称霸后端,在磁盘阵列领域发挥得淋漓尽致。与此同时,磁盘生产厂家也在第一时间将FC协议中的L端口和FC硬件芯片做到了磁盘驱动器上,取代了传统的SCSI端口。同时,根据FC协议的规定编写了新的Firmware,用于从FC数据帧中提取SCSI指令和数据,完成FC协议通信逻辑。
SAN(系统区域网络) storage Area Network 存储区域网络,直到FC革命成功之后,其意义才真正体现出来。

SAS技术

适用于存储系统的网络不只FC一个,同档次的网络传输系统还有一个叫做SAS的,全称为Serial Attached SCSI,即串行SCSI。FCP也属于串行SCSI,SAS只是一个名称。SAS是2001年被Compaq、IBM、LSI Logic、Maxtor和Seagate联合提上日程的。现在普遍用于PC的SATA硬盘,也是从2001年之后才逐渐展露头角的。的确,当时几大厂商在开发串行ATA时就考虑将SCSI一同纳入开发范围。正是由于这种因缘关系,今天普遍用于PC服务器和小型机的本地硬盘的SAS磁盘的接口形状与SATA盘是相同的,只是比SATA盘多了一个数据接口,像FC磁盘一样用来连接两路控制器。
SAS网络与FC有一个本质区别,即SAS为全交换式架构,不像FC一样有Fabric和FCAL两种架构。如果让一个控制器和多块磁盘作为网络节点直接连接到SAS网络中的话,那么控制器和所有磁盘之间都是全双工线速无阻塞交换的,控制器可以直接向任何一块磁盘收发数据,同样,磁盘也可以在任何时刻直接向控制器发送数据。

NAS

使用FC网络交换设备
为了节约成本将FC网络交换设备改为使用以太网交换机
使用以太网交换机

网络文件系统

上图所示,磁盘阵列划分为多个LUN供使用者使用,至于怎么使用需要由使用者用文件系统来管理卷。那么多个使用者就要实现多种文件系统。而网络文件系统解决了这个问题,对外提供统一用户接口。使用者通过网络与盘阵上的集中式文件系统进行交互。针对上层逻辑,微软定义了自己的一套规范,叫做CIFS(Common Internet File System)。Linux和UNIX系统使用NFS(Network File System)。这些上层协议都是利用TCP/IP协议进行传输。这种文件系统逻辑不是在本地运行,而是在网络上的其他节点运行,使用者通过外部网络将读写文件的信息传递给运行在远端的文件系统,也就是调用远程的文件系统模块,而不是在本地内存中调用文件系统的API来进行。所以网络文件系统又叫做远程调用式文件系统,也就是RPC FS(Remote Procedure Call File System)。相对于SAN来说,这种网络文件系统不仅磁盘或卷在远程节点上,连文件系统功能也搬运到远程节点上。人们把这种带有集中式文件系统功能的盘阵,叫做网络附加存储(Network Attached Storage, NAS)。
在这里插入图片描述

在这里插入图片描述

IP SAN

ISCSI(Internet Small Computer System Interface)协议,使得SCSI语言可以通过Internet来传递,也就是承载于TCP/IP之上。与FC协议类似,ISCSI将发起通信的一方称为Initiator,将被连接端称为Target。
在这里插入图片描述
TCP/IP之所以可以与FC竞争,就是因为其优良的扩展性,而不是因为它的速度。后端需要的首先是性能,而不是扩展性。所以,后端还是交给FC处理。
后来,索性将ISCSI为代表的以TCP/IP作为传输方式的网络存储系统称为IP SAN,即基于IP的存储区域网络。值得说明的是,IP SAN并不一定要用以太网作为链路层,可以用任何支持IP的链路层。

协议融合

Protocol over Protocol,PoP,即一种协议被打包封装或映射到另一种协议之上。协议融合的三种方式

  • 调用(use),也就是一种协议完全利用另一种协议
  • 隧道封装(Tunnel),一种协议将另一种协议的完整数据包全打包隧道封装到新协议数据包中。
  • 映射(Map),一种协议对另一种协议进行映射翻译,只将原来协议的Payload层数据提取出来,重新打包到新协议数据包中。
    调用,就是一种协议自身没有某些功能,需要使用另一种协议提供的功能。比如TCP调用IP,因为TCP没有寻址功能,所以它利用IP来寻址。隧道封装就是将一种协议的完整数据包(包括Payload和协议开销)作为另一种协议的Payload来进行封装,打包传输到目的地,然后解开外层协议的封装信息,露出内部被封装承载的协议完整数据包,再交给内层协议处理逻辑模块进行处理。映射就是将内层协议的部分或全部逻辑,映射翻译到外层协议对应的功能相似的逻辑上。
    FC不可扩展,TCP/IP扩展性强。可以将FC协议封装到TCP/IP协议中传输。一种是以Tunnel为主的模式,称为FCIP,另一种是以Map为主的模式,称为IFCP。在FCIP模式中,通信的双方各增加一个FCIP网关,任何FC协议的逻辑都需要封装到TCP/IP协议中传输。在IFCP模式中,通信的双方各增加一个IFCP网关,作为协议转换设备使用。IFCP GW将FC协议终止在本地,提取Payload数据,对外以TCP/IP设备的形式出现并传输数据,到达对方之后,对方的IFCP GW再从IP包中提取出Payload,然后将其封装到FC帧中,对其内部以FC设备的形式出现。

在这里插入图片描述

存储系统虚拟化

存储集群

常见的集群文件系统有PVFS 、PVFS2、Lustre、GFS、GPFS、DFS、SANFS、SANergy等
集群存储系统的数据分布有两种方式:

  • 将多份整体数据每一份都分开存放于集群中的每个节点上
  • 将多份独立的数据,每一份放在一个独立节点上或手动决定数据分割的份数以决定利用的节点数目
    集群存储系统可以分为基于Block协议访问的传统存储集群,以及基于NAS协议访问的NAS集群系统,还有一类属于文件系统集群。
    在这里插入图片描述

云存储
在这里插入图片描述
在这里插入图片描述
基础IT架构层:云底层的集群架构可以有两种实现方式;第一种途径是利用现有的网络,网络技术是把现有的、零散的、非专用的所有资源整合起来,在其上加入虚拟层,形成一个计算和存储的分布式集群,在这个集群之上再来实现云服务层,第二种途径是专门的集中式并行集群数据中心,加上虚拟层,然后再加上云服务层。但一般新建的数据中心都是采用后者,也就是直接使用专用的集群系统来充当基础IT架构层。
基础架构/集群管理层:有了集群还不够,还必须在这个集群之上覆盖一层或几层虚拟化层来增加整个系统的弹性,将所有资源虚拟化为资源池。对于计算资源,也就是集群中的服务器节点,通过使用VMware、Citrix等虚拟机平台可以完成这个工作。而对于存储节点,也需要有这么一种虚拟化平台。目前来看,能够满足这种需求的存储空间虚拟化平台,只有分布式文件系统或者分布式卷管理系统才能满足。另外,网络、服务器以及存储集群基础架构需要一个管理模块,负责整个集群的监控、硬件资产管理、硬件故障更换管理等。
资源部署层
在这里插入图片描述
中间件层
当有了物理环境、IT基础架构、基础架构监控管理、资源分配部署回收层之后,一个充实的基座就有了。在这个基座之上,就可以完成各种业务的部署。应用层与资源层之间可能需要一个中间层来适配。这个层次不仅位于应用引擎和资源部署引擎之间,云架构中所有层次之间可能都需要各种适配。
应用引擎层
应用引擎层则是产生各种业务应用的温床了,这一层提供一个通用的业务开发平台,或者将其他平台所开发的应用适配进来,然后统一发布。
业务展现与运营层
可以把云分为云存储、云主机、云计算三大块服务。IaaS属于云存储或云主机范畴,PaaS和SaaS则属于云计算范畴。

猜你喜欢

转载自blog.csdn.net/asmartkiller/article/details/83626373