2.1 存储空间管理
简单来讲,存储空间就是存储的物理空间,存储空间管理的方式有很多种。在本书中,
我们主要介绍卷、RAID 技术及 LUN(Logical Unit Number,逻辑单元号)3种。
2.1.1 卷
卷其本质就是硬盘上的存储区域。一个硬盘包括好多卷,一卷也可以跨越许多磁盘。在
Windows系统中,可以使用一种文件系统(如 FAT 或NTFS)对卷进行格式化并为其分配驱动
器号。
为了能更好地理解卷,我们首先介绍一下基本磁盘和动态磁盘的概念。磁盘的使用方式
可以分为两类:“基本磁盘”和“动态磁盘”。
“基本磁盘”非常常见,我们平常使用的磁盘基本上都是“基本磁盘”。“基本磁盘”受 26 个
英文字母的限制,也就是说,磁盘的盘符只能是 26个英文字母中的一个。因为A、B 已经被软
驱占用,实际上磁盘可用的盘符只有C~Z 24个。另外,在“基本磁盘”上只能建立4个主分区
(注意:是主分区,而不是扩展分区)。
另一种磁盘类型是“动态磁盘”。“动态磁盘”不受 26 个英文字母的限制,它是用“卷”来命
名的。“动态磁盘”的最大优点是可以将磁盘容量扩展到非邻近的磁盘空间。
那么,对应卷来说,也分为基本卷和动态卷。以Windows系统为例,基本卷就是驻留在基
本磁盘上的主磁盘分区或逻辑驱动器,而驻留在动态磁盘上的卷就是动态卷。Windows支持5
种类型的动态卷,主要有简单卷、带区卷、跨区卷、镜像卷和RAID-5卷5种。为了便于读者理
解,下文将以Windows系统为例,分别介绍这5种动态卷。
1. 简单卷
简单卷是物理磁盘的一部分,它工作时就好像是物理上的一个独立单元,通过将卷扩展
到相同或不同磁盘上的未分配空间上,以增加现有简单卷的大小。
要扩展简单卷,该卷必须尚未格式化,也可将简单卷扩展到同一计算机上其他动态磁盘
的区域中。当将简单卷扩展到一个或多个其他磁盘时,它将变为一个跨区卷。
2. 跨区卷
跨区卷必须建立在动态磁盘上,是一种和简单卷结构相似的动态卷。其将来自多个磁盘
的未分配空间合并到一个逻辑卷中,这样可以更有效地使用多个磁盘系统上的所有空间和
所有驱动器号。
如果需要创建卷,但又没有足够的未分配空间分配给单个磁盘上的卷,则可通过将来自
多个磁盘的未分配空间的扇区合并到一个跨区卷来创建足够大的卷。用于创建跨区卷的未
分配空间区域的大小可以不同。先将一个磁盘上为卷分配的空间充满,然后从下一个磁盘开
始,再将该磁盘上为卷分配的空间充满。
跨区卷可以在不使用装入点的情况下获得更多磁盘上的数据。通过将多个磁盘使用的
空间合并为一个跨区卷,从而可以释放驱动器号用于其他用途,并可创建一个较大的卷用于
文件系统。
增加现有卷的容量称作“扩展”,只能使用 NTFS 文件系统格式化的现有跨区卷可由所有
磁盘上未分配空间的总量进行扩展。但是,在扩展跨区卷之后,不删除整个跨区卷便无法删
除它的任何部分。
3. 带区卷
带区卷由两块或两块以上的硬盘组成,也是一种动态卷,必须创建在动态磁盘上。当文
件存到带区卷时,系统会将数据分散存于各块硬盘的空间,若使用专业的硬件设备和磁盘
(如阵列卡、SCSI硬盘等),可提高文件的访问效率,并降低CPU 的负荷。
利用带区卷,可以将数据分块,并按一定的顺序在阵列中的所有磁盘上分布数据,与跨
区卷类似。带区可以同时对所有磁盘进行写数据操作,从而可以相同的速率向所有磁盘写数
据。在理论上,带区卷的读写速度是带区卷所跨越的所有n个硬盘中最慢的一个的n倍。
带区卷使用 RAID-0,从而可以在多个磁盘上分布数据。带区卷不能被扩展或镜像,并且
不提供容错。如果包含带区卷的其中一个磁盘出现故障,则整个卷无法工作。
4. 镜像卷
镜像卷是具有容错能力的动态卷,它通过使用卷的两个副本或镜像复制存储在卷上的
数据,从而提供数据冗余性,写入到镜像卷上的所有数据都写入到位于独立的物理磁盘上的
两个镜像中。
如果其中一个物理磁盘出现故障,则该故障磁盘上的数据将不可用,但是系统可以使用
未受影响的磁盘继续操作。当镜像卷中的一个镜像出现故障时,则必须将该镜像卷中断,使
得另一个镜像成为具有独立驱动器号的卷。然后可以在其他磁盘中创建新镜像卷,该卷的可
用空间应与之相同或更大。
当创建镜像卷时,最好使用大小、型号和制造商都相同的磁盘。
5. RAID-5卷
RAID 又叫“廉价磁盘冗余阵列”或“独立磁盘的冗余阵列”。在RAID-5卷中,Windows通过
给该卷的每个硬盘分区中添加奇偶校验信息带区来实现容错。如果某个硬盘出现故障,
Windows便可以用其余硬盘上的数据和奇偶校验信息重建发生故障的硬盘上的数据。
由于要计算奇偶校验信息,所以RAID-5卷上的写操作要比镜像卷上的写操作慢一些。但
是,RAID-5 卷由于能比镜像卷提供更好的读性能,因此RAID-5卷适合于大规模序列化读写
操作。
与镜像卷相比,RAID-5 卷的性价比较高,而且 RAID-5 卷中的硬盘数量越多,冗余数据
带区的成本越低。
2.1.2 RAID技术
RAID 为廉价磁盘冗余阵列(Redundant Array of Inexpensive Disks)。RAID 技术将一个个单
独的磁盘以不同的组合方式形成一个逻辑硬盘,从而提高了磁盘读取的性能和数据的安全
性。不同的组合方式可用RAID 级别来标识。
RAID 技术是由美国加州大学伯克利分校D.A. Patterson教授在1988年提出的,作为高性
能、高可靠的存储技术,在今天已经得到了广泛的应用。
1. RAID 级别
RAID 技术经过不断的发展,现在已拥有了从RAID0到RAID5 6种明确标准级别的RAID
级别。另外,还有6、7、10(RAID1与RAID0的组合)、01(RAID0与RAID1的组合)、30(RAID3
与RAID0的组合)、50(RAID0与RAID5的组合)等。
不同的RAID 级别代表着不同的存储性能、数据安全性和存储成本。下面着重介绍常用
的RAID0、RAID1、RAID5和RAID10。
(1)RAID0
RAID0也称为条带化(stripe),将数据分成一定的大小顺序写到阵列的磁盘里。RAID0可
以并行地执行读写操作,可以充分利用总线的带宽。理论上讲,一个由N 个磁盘组成的
RAID0系统,它的读写性能将是单个磁盘读取性能的N 倍,且磁盘空间的存储效率最大
(100% )。RAID0有一个明显的缺点:不提供数据冗余保护,一旦数据损坏,将无法恢复。
RAID0示意图如图2-1所示。
图2-1 RAID0示意图
如图2-1所示,系统向RAID0系统(由4个磁盘组成)发出的I/O 数据请求被转化为4项操
作,其中每一项操作都对应于一块物理硬盘。通过建立RAID0,原先顺序的数据请求被分散
到4块硬盘中同时执行。从理论上讲,4块硬盘的并行操作使同一时间内磁盘的读写速度提升
了4倍。但由于总线带宽等多种因素的影响,实际的提升速率会低于理论值。但是,大量数据
并行传输与串行传输比较,性能必然大幅提高。
(2)RAID1
RAID1称为镜像(mirror),它将数据完全一致地分别写到工作磁盘和镜像磁盘,因此它的
磁盘空间利用率为 50% ,在数据写入时时间会有影响,但是读的时候没有任何影响。RAID0
提供了最佳的数据保护,一旦工作磁盘发生故障,系统自动从镜像磁盘读取数据,不会影响
用户工作。RAID1主要应用于对数据保护极为重视的应用方面。RAID1示意图如图2-2所示。
图2-2 RAID1示意图
(3)RAID5
RAID5 是一种存储性能、数据安全和存储成本兼顾的存储方案。RAID5阵列的磁盘上既
有数据,也有数据校验信息,数据块和对应的校验信息会存储于不同的磁盘上,当一个数据
盘损坏时,系统可以根据同一带区的其他数据块和对应的校验信息来重构损坏的数据。
RAID5示意图如图2-3所示。
图2-3 RAID5示意图
RAID5 可以理解为是 RAID0 和 RAID1 的折衷方案。RAID5 可以为系统提供数据安全保
障,但保障程度要比 RAID1 低,而磁盘空间利用率要比RAID1高。RAID5具有和RAID0近似
的数据读取速度,只是多了一个奇偶校验信息,写入数据的速度比对单个磁盘进行写入操作
稍慢。同时,由于多个数据对应一个奇偶校验信息,RAID5 的磁盘空间利用率要比RAID1高,
存储成本相对较低。
RAID5在数据盘损坏时的情况和RAID3相似,由于需要重构数据,所以性能会受到影
响。
(4)RAID10
RAID10 是 RAID1 和 RAID0 的结合,也称为 RAID(0+1),先做镜像,然后做条带化,既
提高了系统的读写性能,又提供了数据冗余保护。RAID10的磁盘空间利用率和RAID1是一样
的,为50% 。RAID10适用于既有大量的数据需要存储,又对数据安全性有严格要求的领域,
如金融和证券等。RAID10示意图如图2-4所示。
图2-4 RAID10示意图
(5)JBOD
JBOD(Just Bundle Of Disks)译成中文是“简单磁盘捆绑”,通常又称为Span。JBOD 不是标
准的RAID 级别,只是在近几年才被一些厂家提出,并被广泛采用。
JBOD 是在逻辑上把几个物理磁盘一个接一个串联到一起,从而提供一个大的逻辑磁
盘。JBOD 上的数据简单地从第一个磁盘开始存储,当第一个磁盘的存储空间用完后,再依
次从后面的磁盘开始存储数据。
JBOD 存取性能完全等同于对单一磁盘的存取操作。JBOD 也不提供数据安全保障。它
只是简单地提供一种利用磁盘空间的方法。JBOD 的存储容量等于组成JBOD 的所有磁盘的
容量总和。
2. 不同RAID 级别的对比
在各个RAID 级别中,使用最广泛的是RAID0、RAID1、RAID10和RAID5。
RAID0,将数据分成条带顺序写入一组磁盘中。RAID0不提供冗余功能,但是却提供了
卓越的吞吐性能,因为读写数据是在一组磁盘中的每个磁盘上同时处理的,吞吐性能远远超
过单个磁盘的读写性能。
RAID1,每次写操作都将分别写两份到数据盘和校验盘上,每对数据盘和校验盘成为镜
像磁盘组。也可使用并发的方式来读数据,提高吞吐性能。如果镜像磁盘组中的某块磁盘出
错,则数据可以从另外一块磁盘获得,而不会影响系统的性能,然后,使用一块备用磁盘将
健康磁盘中的数据复制出来,这两块磁盘又组成新的镜像组。
RAID10,即 RAID1 与 RAID0 的结合,既做镜像,又做条带化,数据先镜像,再做条带
化。这样,数据存储既保证了可靠性,又极大地提高了吞吐性能。RAID01也是RAID0与
RAID1的结合,但它是对条带化后的数据进行镜像。与RAID10不同,一个磁盘的丢失等同于
整个镜像条带的丢失,所以一旦镜像盘失败,存储系统就成为一个 RAID0 系统(即只有条带
化)。
RAID5是将数据校验循环分散到各个磁盘中,它像RAID0 一样将数据条带化分散写到一
组磁盘中,但同时生成校验数据,作为冗余和容错使用。校验磁盘包含了所有条带的数据的
校验信息。RAID5将校验信息轮流写入条带磁盘组的各个磁盘中,即每个磁盘上既有数据信
息,同时又有校验信息,RAID5的性能得益于数据的条带化,但是某个磁盘的失败却将引起
整个系统的下降。这是因为系统将在承担读写任务的同时,重新构建和计算出失败磁盘上的
数据,此时要使用备用磁盘对失败磁盘的数据进行重建,以恢复整个系统的健康。
从一个普通应用来讲,要求存储系统具有良好的 IO 性能,同时也要求对数据安全做好
保护工作。所以,RAID10和RAID5应该成为我们重点关注的对象。
2.1.3 逻辑单元号(LUN)
LUN 的全称是Logical Unit Number,也就是逻辑单元号。我们知道,SCSI(Small Computer
SysteMInterface,小型计算机系统接口)总线上可挂接的设备数量是有限的,一般为6个或15
个,我们可以用对象设备ID 即Target ID(也有称为SCSI ID 的)来描述这些设备,设备只要一
加入系统,就有一个代号,我们在区分设备的时候,只用说几号几号就可以了。
而实际上我们需要用来描述的对象是远远超过该数字的,于是我们引进了LUN 的概念。
也就是说,LUN ID 的作用就是扩充了Target ID。每个对象设备下都可以有多个 LUN 设备,
通常简称 LUN 设备为 LUN,这样就可以说每个设备的描述由原来的Target x变成Target x
LUN y了。显而易见的,我们描述设备的能力增强了。就好比,以前给别人邮寄东西,写地址
的时候为:XX 市中山路88号XXX(收),但是自从高楼大厦越来越多,你却不得不这么写:XX
市中山路88号XX 大厦518室XXX(收)。
所以可以看出,LUN 就是为了使用和描述更多设备及对象而引进的一个方法而已,并没
有什么特别的地方。
那么,到底LUN 是什么呢?
LUN ID 不等于某个设备,它只是个号码而已,不代表任何实体属性,在我们的实际环境
中,我们碰到的LUN 可能是磁盘空间,可能是磁带机,或者是其他存储设备、介质、空间等。
LUN 的神秘之处在于,它很多时候不是什么可见的实体,而是一些虚拟的对象。比如一
个阵列柜,主机那边看作是一个对象设备,为了某些特殊需要,我们要将磁盘阵列柜的磁盘
空间划分成若干个小的单元给主机来用,于是就产生了一些什么逻辑驱动器的说法,也就是
比对象设备级别更低的逻辑对象,我们习惯于把这些更小的磁盘资源称之为LUN0、LUN1、
LUN2…而操作系统的机制使然,操作系统能识别的最小存储对象级别就是LUN Device,这
是一个逻辑对象,所以很多时候被称为逻辑设备。
有人说,在我的 Windows 中,就认到一个磁盘,没看到什么 LUN的说法,那是不是说
LUN 就是物理磁盘呢?回答是否定的。其实在磁盘的属性里就可以看到有一个LUN 的值,
只是因为磁盘没有被划分为多个存储资源对象,而是将整个磁盘当作一个LUN 来用,LUN
ID 默认为0,如此而已。
我们也曾碰到过这样的问题,比如有人问,我们有一个磁盘阵列,连到了两台主机上,
我们划分了一个 LUN 给两台主机,然后想先在操作系统中将磁盘分为两个分区,让两台主
机分别使用两个分区,当某一台主机宕机之后,使用集群软件将该分区切换到另外一台主机
上去,这样可行吗?答案也是否定的。因为集群软件操作的磁盘单元是 LUN,而不是分区,
所以该操作是不可行的。当然,在一些环境中,一般也是一些要求比较低的环境,可以在多
台主机上挂载不同的磁盘分区,但是这种情况下,实际上是没有涉及磁盘的切换的,所以在
一些高要求的环境中,这种情况根本就不允许存在。
还要说明的是,在有些厂商和有些产品的概念中,LUN ID 被绑定到了具体的设备上,比
如IBM的一些带库,整个带库只有一个对象设备ID,然后带库设备被分配为LUN0、LUN1、
LUN2…,但是我们要注意到,这只是产品做了特别设计,也是少数情况。
1. 存储和主机的LUN
可能有些人会把阵列中的磁盘和主机的内部磁盘的一些概念弄混淆了。在磁盘阵列和
磁带库大行其道的时代,存储越来越智能化,越来越像一个独立的机器。实际上,存储和主
机的独立本来就是一个必然趋势。在存储越来越重要的时代,存储要自立门户是必然的事。
如果我们把存储当作一个独立的主机来看,理解起来就很简单了。我们说到 LUN 的概
念的时候,就要将其分为两个层面:一个层面就是在阵列这个机器的操作系统识别到的范
围,另一个层面就是服务器的操作系统识别到的范围。这两个层面是相对独立的,因为如果
我们把存储当作一个主机来看,那么它自然有自己的设备、对象、LUN 之说,而服务器也有
自己的设备、对象、LUN 之说。
另一方面,这两个层面又是相互关联的。一个阵列的控制系统,大多都有虚拟化的功
能,阵列想让主机看到什么样的东西,主机才能看到相应的东西。当然,服务器识别到的最
小的存储资源,就是 LUN 级别的。那么主机的HBA 卡(光纤存储卡)看到的存储上的存储资
源主要就靠两个东西来定位:一个就是存储系统的控制器(Target),另一个就是LUN ID。这个
LUN 是由存储的控制系统给定的,是存储系统的某部分存储资源。
2. LUN 与卷
LUN 是对存储设备而言的,volume 是对主机而言的。该如何去理解呢?
首先选择存储设备上的多个硬盘形成一个RAID 组,再在RAID 组的基础上创建一个或
多个LUN(一般创建一个LUN)。许多厂商的存储设备只支持一个RAID 组上创建一个LUN。
此时LUN 相对于存储设备来说是一个逻辑设备。
而当网络中的主机连接到存储设备时,就可以识别到存储设备上的逻辑设备LUN,此时
LUN 相对于主机来说就是一个“物理磁盘”,与C 盘、D 盘所在磁盘的属性是相同的。在该“物
理磁盘”上创建一个或多个分区,再创建文件系统,才可以得到一个卷。此时卷相对于主机而
言是一个逻辑设备。
另外,从容量大小方面比较卷,分区、LUN、RAID的关系为:卷=分区≤主机设备管理器
中的磁盘=LUN≤RAID≤存储设备中硬盘的总容量。
《云存储解析[精品]》- 2.1 存储空间管理