标题：分层存储与虚拟化技术
前言
随着信息技术的发展，新产生的电子数据近年来呈现出井喷式的增长，而这又带动着对于存储的大量需求。这种需求增长不仅仅限于企业用户，多媒体数据、邮件等个人信息也使得普通用户对于存储容量的需求也出现了明显的增长。当前PC的标准存储容量配置300G、500G已经是非常普遍的了。想象一下前几年配置容量为40G，60G的时代，甚至更往前到KB、MB的时代，似乎现在的机器容量配置实在是十分奢侈。我们不需要引用 IDC 对于存储市场的调查分析数据，我们都已经切身感受到自己似乎身处于电子数据宇宙中。
市场的发展推动需求的提高，并且催生新的需求，而这些变化及新需求又推动着技术的进步与变革。满足市场的需求无外乎在于对原有技术的深耕细作、组合升级原有技术、或者发明一种新的技术手段。而存储市场也不外乎这样的发展历程。需求、市场、变化推动着我们不得不重新思考原有技术实现，推动我们再深入研究不同的技术。而外部软、硬件技术的发展也使得我们可以以一种全新的应用方式来发展及深化这些技术，让这些技术生出春天般的生命力。
特别是虚拟化技术出现，则完全催生出一个全新的存储应用。同时，诸如这样新的存储应用及其他的需求，则促使我们对于存储分层技术及存储虚拟化技术的进一步探索研究。
分层存储
什么是分层存储分层存储其实已经不是一个新鲜的概念，而是已经在计算机存储领域应用多年。其与计算机的发明与发展相伴相生。在冯－诺依曼提出计算机的模型“存储程序”时就已经包含了分层存储的概念。“存储程序”原理，是将根据特定问题编写的程序存放在计算机存储器中，然后按存储器中的存储程序的首地址执行程序的第一条指令，以后就按照该程序的规定顺序执行其他指令，直至程序结束执行。在这里的外存储器与内存储器，就是一个分层存储的最初模型。
分层存储（Tiered Storage），也称为层级存储管理（Hierarchical Storage Management），广义上讲，就是将数据存储在不同层级的介质中，并在不同的介质之间进行自动或者手动的数据迁移，复制等操作。同时，分层存储也是信息生命周期管理的一个具体应用和实现。
而实际上，将相同成本及效率的存储介质放在不同层级之间进行数据迁移复制在实用性及成本上并不是有效的数据存储方式。因此，在不同的层级之间使用有差别的存储介质，以期在相同成本下，既满足性能的需要又满足容量的需要。这种存储介质上的差别主要是在存取速度上及容量上。存取速度快的介质通常都是存储单位成本（每单位存储容量成本，如1元/GB）高，而且容量相对来讲比较低。相应的，存取速度慢的介质通常是为了满足容量与成本方面的要求，既在相同的成本下可以得到更大的容量。所以，从这方面来说，分层存储其实是一种在高速小容量层级的介质层与低速大容量层级的介质层之间进行一种自动或者手动数据迁移、复制、管理等操作的一种存储技术及方案。
一般来说，分层存储中，我们将存取速度最快的那一层的介质层称为第0层（Tier 0），依次为第1层，第2层等等。理论上说，层级的划分可以有很多层，但是在实践中，最多的层级在5层左右。过多的层级会增加数据及介质管理的难道及可用性。因此在层级的设置上有一个拐点，即层级达到一个特定的层数时，会导致成本的上升，而使得可用性、可靠性都会相应下降。通常层级的设定在2－4层之间。如下图所示：
  为什么需要分层存储在计算机系统中，CPU 的运行速度往往要比内存速度快上好几百倍甚至更多，为了更多地榨取CPU的计算能力，就需要在访问数据的速度上进行提升，否则内存的速度将成为整个系统的性能短板。因此在这样的思想下，CPU慢慢发展出来1级或者2级这样的存储缓存。实际也表明，缓存的存在确实对于系统性能的提升起到了巨大的推动作用。
相应的，内存的访问速度又是硬盘访问速度的几百倍甚至更多，也是基于CPU类似的指导思想，我们能不能在存储之间也进行这样的分层（或者说缓存）以期提高系统的I/O性能，以满足应用对系统提出的更多高I/O的需求呢？
从某种意义上说，内存其实也就是充当了CPU与外部存储之间的另一个级别的缓存。作为用户来讲，我们当然希望所有需要用到的数据都最好是存在最高速的存储当中。但是这样近乎是乌托邦式的理想至少在当前来说是不现实的。在技术上的难度不说，成本的压力就会使得用户喘不过气来，再一个就是有没有必要的问题，因为有的数据根本都不需要一直存于这样的存储中。在计算机界中有一个很有名的理论，就是说，加上一个中间层，就可以解决计算机中许多的问题。而这个“中间层”也正是我们所寻求的，实际也证明这样的中间层确实取得了非常好的效果。
据IDC数据预测，到2012年，信息数据的增长将会达到50%的复合年增长率，这个增长主要源于越来越来多数据内容生成并存储，经济全球化使用商业各个部门及与商业伙伴之间需要保持连接，使得更多的数据被生成，复制及保存。法规遵从及管理，还有容灾与备份都使得数据的增长持续上升。天下没有一劳永逸的解决方案，我们需要根据不同的数据存储需求，设计不同的存储方案。比如归档，我们可以将数据存储在磁带上，比如需要频繁访问的实时数据我们可以放在内存或者SSD（固态硬盘）设备中，对于容灾或者备份，我们可以使用大容量低成本的存储来应对。正所谓好钢用在刀刃上，用户也希望把资金投向更能产生效益的存储上。
除了需要满足不同的存储需求，还有出于对于高性能高吞吐量应用的支持。因为有的应用需要这样存储系统。特别是现在风头正劲的虚拟化技术。为了在一台设备上支持更多的虚拟应用，就需要系统支持更大的吞吐量以及更高的性能。全部采用高速介质在成本上现在依然不是可行的，也不是必须的。因为根据数据局部性原理，往往被频繁访问的数据是局部而有限的。为了应对部份这样的数据而全采用高速存储实在是过于奢侈。如果我们针对这部份数据另开小灶来解决不是更好？所以分层存储在这里就可以大展拳脚。我们把高频率访问的数据放在高速存储介质上，而其他的数据放在速度较慢一些的介质上，这实际上就是提高了系统的吞吐量。分层存储介质的分类从计算机系统角度来说，最上层的存储层应该是CPU内的各类型寄存器，其次是CPU内的缓存，其次再是系统内存。因为从分层存储的定义上，此类型存储器是符合定义规则的。因为这些存储器速度与容量都有差别，越靠近CPU的存储器成本越高，速度越快，容量越小，并且在CPU的控制下，数据这些不同类型的存储器中间进行自动的转存。比如寄存器通常在16、32、64、128位之间，而缓存则在几十个字节及到几兆字节之间，内存容量当前通常都在几百兆字节以上，服务器级的内存也上几十个吉字节。很有意思的是，这类型的分层也非常符合上图所示的效益成本曲线图。层级过多时，对于CPU的硬件设计及不同层次之间的数据一致性的保证都是一个挑战。所以，现代CPU在寄存器与内存之间的缓存基本在1-3级。而我们通常使用的386平台的CPU（Intel 及 AMD）基本上都只有两级缓存。这类存储都有一个共同的特点，就是系统掉电后数据不复存在。我们将此类型的分层存储称为易失性存储分层，或者内部存储器分层存储。
而另外一种分类，则是非易失性分层存储，或者叫外部分层存储。此类型的存储介质一般包括固态硬盘（SSD）、机械式硬盘、光盘、闪存盘（包括外置硬盘）、磁带库等等。而此类的存储介质分层正是我们所要关注的，如没有特殊的说明情况下，在此文档中所说的分层存储都是指外部分层存储。一般来说，作为第0层的存储介质通常为 RAM 磁盘（随机访问存储磁盘，其速度与内存同速，但是价格昂贵，使用环境基本上是特殊计算环境）以及 SSD，第1层可能有 FC 15K硬盘或者SAS 15K硬盘，或者相应的10K硬盘。第2层可能有其他类型的硬盘及磁盘库等。第3层，可能是如磁带库以及光盘库这样的离线介质。当然这样的分层不是标准，但是一个实践中常用的分层策略。
如 D2D2T 这样的存储方案，其实就是分层存储的一个实践方案。数据从本地的磁盘转存于于另一个远程的磁盘（D2D）。这个磁盘的形式可以是一个JBOD，或者一个虚拟存储设备，然后再通过一定的转存策略将这个磁盘的数据转存于磁带库或者磁带（D2T）。爱数备份存储柜X系列都支持D2D2T这样的应用。分层存储需要考虑的问题由上一节可知道，外部分层存储只不过是内部分层存储的一个外延。所以，外部分层存储考虑的问题与内部分层存储实际上是大同小异的。
1、    首先是数据一致性的问题。这个问题比较好理解。如果不同的数据在不同的存储层级之间存在时，数据的改写必然导致数据的不致的问题。在内部分层存储时，可以采用通写策略或者回写策略。而不同的方法也有各自优缺点，这里就不再赘述。但是外部分层存储与内部分层存储有一个最大的不同是，内存储最终数据需要写到内存中，而外分层存储中，则不是必须的。当然也可以设计成这样的实现方案，但是这样话，分层存储的性能优势则必定会受到影响。数据在不同层级之间的连续性可以由一个虚拟层来保证。这个我们在谈到虚拟化时会讨论这个问题。
2、    第二个问题就是命中率的问题。如何设计一套算法或者实现策略来提高数据系统的命中率是分层存储中是否能起到其相应作用的关键。这个与CPU的缓存机制是完全一样的。不过，CPU的缓存机制已经有一套非常成熟的算法设计。而外部分层存储与内部分层存储有其不同的特性，因此，CPU中的缓存机制不能全部照拿过来用。特别是CPU的缓存机制还主要是硬件设计上面的问题。而外部存储层可能还与一些逻辑设计相关，比如文件系统，文件等。从这点上说，外部分层存储的软件设计上比起CPU缓存的设计可能要更复杂一些。
3、    第三个问题就是在分层介质的选择上。上面也提过，不同层级之间的介质应该是有差别的，否则就失去了分层的意义。一般来说，高速介质应该是小容量、高成本，随着层级的往下走，其成本容量曲线应该呈现如下的形式：
  　　即容量越大的单位成本越低，速度越慢，因此应该放到更低的层级中，反之亦然。因此，在存储介质的配置上如何找到一个合适的点，使得成本与效益最优化则是在分层介质选择及策略制定上需要考虑的问题。下面的图中给出了一个实际的可能的配置方案：  　　1、    第四个问题就是数据分层的级别。对于数据的描述有字节级，块级（包括扇区及簇），文件级及文件系统级。当然不同的级别有不同的应用场合，并不是哪种级别好于哪个级别。对于文件级的分层，对于归档，法规遵从则比较适合。对于文件系统级的则多用于容灾及备份系统中。对于块级则可能用在虚拟化中较为合适。因此需要根据不同的需求制定不同的分层级别。
2、    第五个问题就是数据的迁移策略的设计。可以根据数据的重要性、访问频度、大小、年龄来制定迁移策略。但是如同第四点所说明的那样，不同的策略是有不同的应用场合的，没有孰优孰劣的问题。好的策略应该是不同最优策略的组合，也就是因“需”制宜地选择合适的迁移算法或者方法。根据年龄进行迁移的策略可以用在归档及容灾备份系统中。根据访问频度则可以用于虚拟化存储系统中等等。类似的方法已经用于计算机软件设计或者硬件设计当中的很多地方，如LRU（最近最少使用）、ARC（自适应交替缓存）都是可以借鉴的。
存储虚拟化技术
什么是存储虚拟化根据SNIA（Storage Networking Industry Association，中文译名为“存储网络联合会”）官方对于Virtualization（存储虚拟化技术）的定义，如下：
1、     是将存储（子）系统内部功能与具体应用、主机及通用网络资源分离、隐藏及抽象的行为。以期达到存储或数据管理的网络无关性。
2、    对于存储服务及设备的虚拟化应用，以期达到整合设备功能、隐藏复杂细节以及向已经存在的底层存储资源添加新的应用。
从上面的定义可以看到，虚拟化包括两层的含意，一个是动词，一个是名词。动词表明了如何来达到虚拟化，而名词则说明了应用的目的。对于当前数据的几何式增长以及带来的数据管理的复杂性，加之存储、备份及容灾需求的发展，存储系统需要一个更高级的抽象，以此来获得应用的更大的灵活性。
虚拟化存储与存储虚拟化是两个极易混用的概念，简单来说，存储虚拟化是指就是指的SNIA中的第一个定义，既将存储抽象;而虚拟化存储则是第二条定义，既是侧重于对存储虚拟化的应用。也就是存储虚拟化与虚拟化存储是同一个概念（Virtualization）的两个面。因此为了避免在两者之间跳来跳去，在此文档中，都将这两个概念统一称为存储虚拟化技术。当要特别指明是哪个面的时候，我们就直接使用相应的概念。存储虚拟化技术的前世今生与分层存储技术一样，存储虚拟化技术是与计算机一起发展起来的概念。比如内存系统中的地址就是对于内存位置及其数据的一种抽象。这种抽象其实就是一种虚拟化。其次到外部存储器中，对于硬盘扇区一开始使用（CHS）编址方式到的LBA编址方式就是一种存储虚拟化技术，再到后来的RAID技术，再到分层存储都是在不同等级上的虚拟化。因此，虚拟化技术由来已久，只是在当前数据暴增的情况下，对于存储虚拟化技术提出了更高层次的抽象要求，加上虚拟机技术也为这个概念推波助澜，使得存储虚拟化技术从深宫走向台前成为妇孺皆知的名词。关于SNIA的共享存储模型为了让终端用户与存储设备生产厂商能在同一个平台概念上进行讨论，SNIA 对于存储定义了一个SNIA共享存储模型，如下示：
  　　在上面的模型中，虚拟化技术可以在不同的层进行抽象。当然，在第一级的抽象中就有CHS以及LBA的编址方式。而每一个层都为上一层提供虚拟化接口。当然，最底层与最上层因为没有更下一层及更上一层，他们是这个模型中的两个端点。最底层永远为上一层提供虚拟化接口，而最上一则只使用其下一层的虚拟接口。
当前有许多的技术在不同层中对存储层中进行虚拟化，包括物理存储，RAID磁盘，LUN（Logical Unit Number），存储区域，LUN分区，LUN遮罩及影射，文件系统，数据库对象。相应地实现这些虚拟化技术的设施有磁盘阵列，阵列控制器，存储交换机，路由器，分布式虚拟设备，总线适配器，操作系统以及相应的应用层软件。这些不同的技术表明对于解决共有的存储问题，虚拟化是一个很关键的技术方向。为什么需要存储虚拟化技术随着技术的发展以及对于数据存储及管理的要求不断在提高，对于存储系统所提出的要求也自然水涨船高。比如达到100%的系统可用时间以及对于系统失效的容灾能力，即系统的单点失效不会导致整个系统的瘫痪。而随着企业自身的发展及建设，企业内部的存储基础架构基本都是异构的平台。而这样的复杂性已经成为保证业务连续性的障碍。而存储中此类型的诸多问题其实都可以通过存储虚拟化技术来解决：
1、    在没有虚拟化技术的支持的情况下，SAN网络上单点的失效或者交换的失效是一个严重的问题，企业则为了保证存储的可用性及连续性不得不投入高昂的费用，以此来保证整个存储系统的可靠性。
2、    存储中的性能是评价一个存储系统服务质量（QoS）的关键参数。在异构平台环境中，为了保证满足应用要求的存储性能是一个极为复杂的工作。存储虚拟化技术使得在性能的保障上提供了实现可能性，也保证了可评估的QoS。
3、    存储中的数据对于企业的日常的工作及生产都是至关重要的，对于数据的丢失所适成的损失对于一些企业来说可能就是一场灾难，而存储虚拟化技术可以在这一方面大有所为。虚拟化技术则使得用户可以以可承受的成本代价得到高端的解决方法。
4、    对于纯存储（磁盘）的需求的增长，导致了存储空间的应用效率变低。据调查在开放式系统中对于存储的利用率，磁盘仅为30-50%，而磁带为 20-40%，也就是说，企业每买一个GB的同时需要多买2-3G的存储，产生这种低使用率的问题主要原因是存储与主机的绑定关系，为了保证每个主机都能正常工作，用户常常一次性分配大量的存储空间，而这些存储空间即使在未使用的情况下，也不能被其他的主机占用。而虚拟化技术可以提供这样的按需提供的功能，并且与分层存储结合在一起，可提供不同等级的服务质量。存储虚拟化技术的分类存储虚拟化技术根据不同的分类原则会有不同的类型。比如根据虚拟化实现在数据传输路径中的位置来分有带内与带外的虚拟化，根据虚拟化在存储结构栈中的位置可以分为磁盘虚拟化或者磁带虚拟化。又根据虚拟化的粒度则可以分为文件/记录型虚拟化，数据块型虚拟化。由于与本文档主要讨论分层存储及虚拟化技术关系的原因，我们这里只关注于两种虚拟化类型，一是文件/记录型虚拟化，一个是块级虚拟化。
文件/记录型虚拟化
对于使用这个类型的虚拟化的一个非常典型的例子就是HSM，即层级存储管理，也就是此文档所说的分层存储。这种虚拟化技术自动地在不同的层级之间的存储之间进行数据迁移，对于应用来说，这个过程是透明的。通过相应的指针及文件元数据，虚拟化存储层可以很方便在各层之间查找数据，并将数据返回给用户，而请求者不需要知道详细的文件物理位置，并且自动将用户的数据存于不同的存储层中，以释放相应的I/O吞吐量及存储空间，使得用户的投资得到保护，并且也提高了系统的总体性能。
块虚拟化
近来这种虚拟化技术受到越来越多的关注，而这种虚拟化技术处于SNIA存储模型的第二层。此虚拟化技术处理的主要是块级存储的磁盘，而很多的厂商在提及块级虚拟化技术时指的就是这种技术。
在这种虚拟化技术的背后，其实就是很简单的思想：克服单个设备的物理限制而不需要影响用户及应用，因此后者只看到一个大的“磁盘”。当然，这种块聚集技术只是块虚拟化技术的一个方面，在这个虚拟化技术方案之中还有相当多可以提供的服务，如自动数据分层，空间自动按需配置，快照，卷复制，甚至是重复数据删除等。下面的图中显示了这种虚拟化技术的特点及结构：  　　在上面的图中，对于存储的使用者只需要关注存储容量、性能以及可用性，而无需关注磁盘的物理特性。因此在这样的结构下，用户不需要与某个生产商绑定，因此可以做到存储的异构环境的整合，这种结构也极容易进行向上（增加容量及扩展设备）与向下（压缩容量及移除设备）的扩展。存储虚拟化技术的实现存储虚拟化技术由于类型众多，而它们所处于存储栈位置也不一样，因此其实现技术也相当的多，而且所关注的面也不一样。比如 RAID 技术其实就是基于存储设备的存储虚拟化技术实现之一，还有卷管理技术 LVM，包括 SoftRAID 也都是存储虚拟化的实现技术。作为与本文所讨论的存储分层存较为接近关系原因，我们这里重点介绍一下基于主机及存储设备的虚拟化技术的实现。而对于基于网络的虚拟化技术实现主要用于数据中心级的存储规划中。特别的，这三种实现技术可以同时结合起来，或者一个以另一个为基础来实现。
基于主机的存储虚拟化
这种虚拟化技术是最常用的虚拟化技术之一。这种技术从桌面应用到数据中心的服务器上都存在，并且一般通常都与卷管理技术结合在一起。因为DAS的大量存在，并且卷管理技术已经是操作系统内置的一个功能。当然更高级的第三方的卷管理技术实现也是很常见的一种方式。这种技术的好处就是成熟稳定，并且开放。因此可用于各种异构的环境中。而缺点就是这个虚拟化技术是以服务器主机为中心的。所以，这个虚拟化技术必须以主机为单位进行实现。这使得将不同的存储系统整合成更大、更复杂的存储系统较为困难。因此，有的厂商提供所谓的集群卷管理技术，使得在异构的服务器中共享不同卷以并以单独卷的方式进行存储管理。
基于存储设备的虚拟化实现
其实这种虚拟化技术就是磁盘阵列，但并不仅限于RAID，其中包括快照、LUN 遮罩以及影射等，这些实现技术都是块级虚拟化的实际例子。而这种技术同样适用于SAN以及DAS环境中。这种虚拟技术不依赖于特定的主机以及操作系统，通过调整与硬件设备相关一些特性，如Cache，就可以取得更好的性能。但这种虚拟化技术的缺点就是虚拟技术的应用只能限于在一个阵列里，不能做到跨阵列进行存储的管理与整合。
通常的情况下，上面的两种虚拟化方式都是组合在一起使用的，使得虚拟化技术即有基于主机的卷管理的灵活性，也通过基于存储的虚拟化取得性能上的好处。比如在阵列中的数据可以通过条带化将数据分布在不同的磁盘设备上，这样读写性能就会得到相应的提高。如果以基于主机的虚拟化技术将卷建立在这样的磁盘阵列中，马上就可以得到性能上的提升。诸如此类的结合也说明虚拟化技术的实现不会以单独的形式出现，而是多种虚拟化技术的相互补充。存储虚拟化的未来1、    统一管理。这个统一管理包括数据发掘、报表、存储虚拟化以及存储自动化。在一个异构的存储世界里，这样的方法可以给各个层次，从应用层到物理存储层的存储提供统一的活动管理。而正是用户的期望的也是虚拟化技术所要解决的问题。正如Eisoo(爱数)的All-In-One-Web技术就已经成为统一管理的一个缩影。在此基础之上实现存储的管理，数据的管理，以及备份容灾等应用的大一统格局。但无论是基于Web 的或者其他形式的统一管理，都将是存储虚拟化技术所追求的一个方向及未来的愿景。
2、    自动数据迁移。存储虚拟化技术的进一步发展会使用数据迁移服务变得普遍。这种发展趋势既是技术上的也是成本上的。在技术上讲，这样的数据服务提供了容灾及高性能数据访问能力。当存储系统感知到已经无法再满足用户或应用的存储需求时，则需要迁移或者复制到其他的更快、容量更大的设备上。从成本上的观点来看，并不是所有的数据对于企业来讲都是同等重要，一些老旧的数据一般来讲其价值并不需要用户将其一直保存在高昂的存储设备中。这样，这个数据就需要从昂贵的存储上迁移到低成本的存储设备上。这个过程不再需要用户的干预，而是由存储系统自动完成。
3、    数据中心级的卷及文件系统。如果一个卷指派给不同的系统进行同时数据访问，有些问题就需要特别注意以保证数据的一致性。一个简单的解决方法就是实现一个集群文件系统，由这个集群文件系统来管理不同服务器对于数据的访问。而当前的情况下这些文件系统都是在同构的环境实现的。为了使得这个集群文件系统成为可能就需要对不同的操作系统及其对卷中存储的使用以及文件系统都要进行虚拟化。
作为一个应用系统之内技术实现及概念，往往并不是孤立地存在。作为存储技术来说，分层存储与存储虚拟化也是相互交叉、互为因果的一种关系。分层存储的实现需要存储虚拟化的支撑，这样才能将分层的实现与具体应用分离。而虚拟化技术的实现又有分层技术的影响。正所谓独木不成林，要打造一个稳定、高效、易扩展的存储应用系统，必定是十八般武艺齐上阵。存储虚拟化技术与分层技术的发展与应用，必将给存储行业造成深远的影响。