董唯元存储专栏 虚拟存储浅谈

存储和虚拟

虚拟存储产品作为一个独立的产品类别被提出已经有3年多的时间,虽然至今虚拟存储技术已经发展成为一个包罗万象的技术门类,但其最初产生时主要是针对存储管理的需求而发展的。简单的说,当初的虚拟存储技术应该归属存储管理范畴,是存储管理的一个子集。

    随着技术的发展进步,存储系统已经成为IT系统中一个完全独立的层次,就像网络、应用和服务器一样,存储系统在IT系统的地位也越来越重要。然而,就像网络和应用系统一样,存储系统也面临着越来越复杂的管理问题。原有设备和新增设备往往属于不同产品系列,甚至来自若干不同的厂商。在用户面前,是一幅纷繁复杂、支离破碎的系统结构图。尽管如此,系统维护人员还是需要尽力分析每个设备的使用情况,包括每个设备的性能瓶颈以及空间使用率等等。这种复杂繁琐的管理机制不仅不利于存储系统的工作效率,更是企业IT系统稳定性的一大隐患。

    虚拟存储就是在这种情况下产生的。虚拟存储技术将底层存储设备进行抽象化统一管理,向服务器层屏蔽存储设备硬件的特殊性,而只保留其统一的逻辑特性,从而实现了存储系统集中、统一而又方便的管理。对比一个计算机系统来说,整个存储系统中的虚拟存储部分就像计算机系统中的操作系统,对下层管理着各种特殊而具体的设备,而对上层则提供相对统一的运行环境和资源使用方式。

    举个具体点的例子,在传统的磁盘阵列中,不同容量的磁盘是无法混和使用的,而用户的实际情况往往是前面买了18GB的磁盘,等到扩容的时候,只有73GB的磁盘可选了。面对这种尴尬,很多用户只好选择重新调整部属自己的应用,甚至干脆放弃先前的设备。而虚拟存储技术则可以把不同时期购买的不同容量的磁盘,甚至是不同设备上的磁盘,统一起来使用,而服务器就像使用一个设备一样的使用它们。这样,服务器就不需要再关心,哪个文件放在哪个磁盘阵列上这种问题了。管理问题在服务器上被大大的简化了!

    虚拟存储的另外一层含义是设备使用方式的转化,这应该更接近“虚拟”这个词的本意。所谓“虚拟”就是假的,模拟的,而不是真实的。在网络游戏的虚拟世界中,人物身份是虚拟的,战斗武器是虚拟的,武功魔法是虚拟的,连交友联姻都是虚拟的!简直是虚得一塌糊涂。好在虚拟存储倒还没有那么虚,只是在设备的使用形式上做了些手脚而已:明明是磁带,却被当作磁盘使用;明明是磁盘,却被当作磁带;明明是TCP/IP的网络连接,却虚拟成了SCSI连接……如此种种的虚拟技术,其目的除了方便上层服务器简单统一的使用之外,还在于扩展现有设备和技术的应用范围和领域。

    例如磁带设备,在传统的系统中,只能被当作顺序读写设备使用,这就注定磁带上无法形成类似磁盘的文件系统,也就无法摆脱其离线存储的宿命。而今经过虚拟存储技术这么一虚拟,磁带摇身一变成了可随机读写的块设备,也就堂而皇之的加入了在线存储的队伍。

    实际上,早在虚拟存储这一概念还没有产生之前,一些虚拟技术就已经普遍应用了,甚至可以追溯到遥远的MS-DOS年代。接触过MS-DOS这一古老物种的人一定还记得,当时磁盘的访问速度非常低,而且磁盘的频繁读写会造成硬件的损伤(磁头阻尼悬浮技术当时还没有产生),于是MS-DOS系统提供了一种RAM-DISK技术,即将一部分内存模拟成磁盘,用户可以对这个本不存在的磁盘进行格式化和拷贝等操作,由于实际上是内存对内存的操作,RAM-DISK的访问速度明显比真实磁盘高很多,而且不会造成磁头的频繁移动。

    另外一个典型的例子就是卷管理软件。许多操作系统平台上都有一种甚至多种卷管理软件层,常见的有AIX平台上的Volume Group,Solaris平台上的Volume Manager,Linux平台上的LVM等。这些卷管理软件的功能就是模拟物理磁盘的结构,把多个磁盘组或者多个磁盘条带组织起来,虚拟成一组统一的数据块集,这样操作系统就可以统一而方便的使用所有的磁盘了。这类软件的工作机制和管理思想,是现今虚拟存储技术的一个重要组成部分。

难以定义的概念

说了这么多,到底什么是虚拟存储的确切定义呢?这个问题真是很难回答。原本虚拟存储技术是作为存储管理的一个子集产生的,但是发展到现在,其目的方向已经扩散得非常广泛。有些部分是为了提高存储系统性能,有些部分是为了提高系统容量,有些部分是为了改变设备使用方式,有些部分甚至是针对存储安全发展出来的。如此内容庞杂,头绪众多的技术概念,一时间还真是无法精准的描述。

    尽管如此,总结一些虚拟存储的共同特性还是可以做到的。总体上看,虽然虚拟存储的目标包罗万象,但是实现手段却相对集中。我们不妨可以将虚拟存储技术看作一门武术流派,虽然演练者的目的各不相同,有为强身健体,有为报仇雪恨,但是其基本套路却大致相同。虚拟存储的套路以“抽象”、“模拟”、“隐藏”和“整合”这四个方面为主。抽象就是提取各种存储技术和存储设备的共性,将多个资源抽象成为单一资源;模拟就是突破传统技术的限制,将一种资源模拟成为另外一种资源;隐藏就是将设备或服务等资源的无关特性细节屏蔽,从而隐藏资源的部分或全部特征;整合就是通过组织,将不同类型的资源整合成为一种资源。

    现在,我们可以看一看国际存储工业协会对虚拟存储这一概念的定义。为了不带入笔者的误解和局限,这里引用的是原文。在定义之后,国际存储工业协会的技术委员会还补充了一个例子,用以进一步补充说明这个颇富诗意的定义,这里也一并引用了。

    Storage Virtualization:

    1 – The application of virtualization (q.v.) to storage services, devices or resources that results in storage services, devices or resources.

    2 – The act of abstracting, hiding, or isolating the internal function of a storage (sub) system or service from applications, host computers or general network resources.

    Example: Using virtualization to provide storage and data management that is transparent to users, applications or network; Using virtualization to group different block storage systems into one or more virtual storage pools.

    说实话,这个定义并没有对虚拟存储的概念,给出清晰而精准的描述。依照这个定义,许多现有的技术,仍然难以确定是否属于虚拟存储领域。这个定义更主要的意义是在于,它为虚拟存储概念设定了一个相对固定的范围。但愿各个厂商能够遵守这一规定范围,不会将虚拟存储的概念进一步扩大。

虚拟存储三大问题

在一个模糊的定义下进一步讨论虚拟存储显然是十分困难的。为了言之有物,我们主要讨论三个基础性的问题:

    虚拟的对象是什么?

    在什么位置进行虚拟?

    如何虚拟?

    第一个问题比较容易回答。虚拟存储所虚拟的对象就是一些存储资源,磁盘、磁带、文件、文件系统、数据块等等,这些统统包括在内。其虚拟的结果就是虚拟磁盘、虚拟磁带、虚拟文件、虚拟文件系统、虚拟数据块等等。可以看出,虚拟存储的对象并不一定是物理的设备,而可能是一些纯逻辑的对象。实际上,虚拟存储即可以将物理设备虚拟成物理设备,也可以将物理设备虚拟成逻辑对象。

    随着技术的发展,甚至出现了将逻辑对象虚拟成物理设备的技术,例如将一个逻辑分区虚拟成一个物理磁盘。当然,从逻辑对象到逻辑对象的虚拟技术也在发展中,但相对而言,这部分的技术难度较大,而且目前的需求并不十分迫切,所以类似把一个文件系统虚拟成另外一个文件系统之类的技术,进展还非常缓慢。

    第二个问题的回答也不困难。虚拟是一个处理过程,这个处理过程一定是在主机和存储设备之间完成的。那就只可能有三个位置:主机、存储设备和存储网络。事实上是,在三个位置上都有相应的虚拟存储技术存在,根据处理所在的位置,虚拟存储技术被分为“基于主机端的虚拟存储”、“基于存储设备的虚拟存储”以及“基于存储网络的虚拟存储”这三种类型。

其中基于主机端的虚拟存储,几乎都是通过纯软件的方式实现的。这种实现机制不需要引入新设备,也不影响现有存储系统的基本架构,所以实现成本很低。但是其难以克服的困难是平台依赖性太重,开发商要为每一种操作系统平台甚至每一个版本,开发一套软件产品,其劳动量是可想而知的。而基于存储设备的虚拟技术虽然有效率高,性能好等特点,但是在现实中,几乎所有的厂商都只提供对自身产品的支持,其开发性大打折扣。基于存储网络的虚拟技术目前还处于起步阶段,一些独立厂商已经涌现出来,这些厂商即不生产主机,也不提供磁盘阵列或磁带库等存储设备,专门提供面对开放存储网络的虚拟存储产品。虽然在现阶段这些产品或在性能方面,或在安全性方面,存在一些问题,但是其开放性的优势是这一类产品得以发展的强大动力所在。

    第三个问题看起来也不深奥,但是当我们试图回答时,却发现无从说起。实际上这个问题的提出,是为了引出对虚拟存储的一个分类标准。根据实现的机制,虚拟存储可分为“带内”和“带外”两种基本类型。这两种类型的区别就在于,实现虚拟的过程是否与正常的数据读写过程同时进行。更具体的说,带内虚拟技术,是在数据读写的过程中,在主机到存储设备的路径上实现虚拟存储;而带外虚拟技术,是在数据读写之前,就已经做好了虚拟工作,而且实现虚拟的部分并不在主机到存储设备的访问路径上。因此,带内虚拟技术也称为“同步虚拟”,而带外虚拟技术自然就称为“异步虚拟”。

打个比方说,如果我们把虚拟过程看作汽车上路的缴费过程,那么带内虚拟就相当于在公路上设置收费站,司机不上路就不需要缴费,而一旦上路,就必然要通过收费站,也就是在上路的同时缴费。而带外虚拟技术像交管所,司机在上路之前就已经在交管所办理了缴费手续,然后才可以上路,但是并不一定在缴费之后就马上上路,而且在公路上飞奔的汽车也不需要穿过交管所。明白了这个蹩脚的比喻,又看了图示的说明,下面这个结论就很容易得出了:带内虚拟技术,可能是基于主机实现的,可能是基于存储设备实现的,当然也可能是基于存储网络实现的,而带外虚拟技术则只能是基于存储网络实现的。

蓬勃发展的虚拟存储

虚拟存储技术在3年的时间里已经取得了堪称辉煌的成就。其中的磁带虚拟、磁盘资源管理、跨卷多级管理等技术,已经发展出了一大批相当成熟的产品和解决方案,并逐步完善和丰富着今天的存储系统。随着厂商、用户和技术标准机构各方面,对这一技术方向与日俱增的关注,相信这一领域一定会长出累累的硕果。