这篇文章写得不好。
最大的问题之一是整个存储堆栈中都有多层抽象,而“虚拟化”是一个模糊的词,因为很难明确指定放置它的位置。为了更好地了解存储中的多层抽象,我将指出你去年做过的一篇博客文章(在这里阅读它的血腥细节)。
在市场营销方面,“存储虚拟化”只是在以前没有的地方引入抽象。这可能发生在很多方面,具体取决于细分市场。但这只是营销。技术时间。
存储堆栈(略微简化):
- 磁盘
- RAID控制器
- 软件RAID
- 卷管理员
- 文件系统
- 网络文件系统
- 网络文件系统客户端
磁盘,即使是旧式旋转磁盘,也可以进行虚拟化。它们提供了盘片(或SSD的存储单元)上实际块的逻辑视图,自80年代中期以来就是这种方式。磁盘驱动器保留一定数量的块用于重新分配坏的块,逻辑视图是如何从磁盘控制器中抽象出来的。像SMART这样的技术可以在行动中发现这一点并报告驱动器是“预失败”,因此您可以相应地规划过渡。自80年代以来,这已经以某种形式存在。
RAID卡提供了另一个抽象层,隐藏了操作系统的真实存储形状。自从80年代末推出第一张RAID卡以来,它就已经存在,而且从那时起它们才变得更加复杂。带有write-caches的卡提供了另一个抽象层,因为写入可以在它们实际位于某个磁盘上之前报告为已提交。真正花哨的(例如存储区域网络阵列中的那些)甚至可以写入两个独立的磁盘阵列进行实时复制,操作系统也不是更明智的。
一旦你进入操作系统,事情变得更加模糊,因为每个人都做自己的事情。软件RAID(Linux中的md)通常作为低级存储驱动程序实现,将逻辑组合存储呈现给更高的存储层。与RAID卡一样,您可以在这里做各种有趣的事情。您在此处看到的一些“Storage Virtualization”产品已在此阶段实施。
越高,您就可以通过卷管理器(LVM)提供一些非常复杂的配置。在下一层向下将磁盘聚合到单个虚拟卷中的情况下,卷管理器可以将多个卷组合到一个更大的卷中......或者将卷池拆分为任意数量的卷。同样,您看到的一些Storage Virtualization产品也存在于此层中。
下一步是文件系统。这是众所周知的“文件”和“目录”抽象的层。某些文件系统(btrfs,zfs)内置了类似管理器的功能,允许快照,重复数据删除,复制到其他设备,甚至在存储层之间迁移文件。最后一点尚未出现在许多文件系统中,但绝对是存储虚拟化供应商的目标。
下一步是网络文件系统。这就像Samba / CIFS,NetATalk / Appletalk,NFS等。如果以正确的方式编写,这些网络文件系统可以进一步抽象存储。我正在考虑的一个产品,Novell的Open Enterprise Server及其ShadowVolumes,在不同的存储上占用多个卷(可能是不同的速度/成本),并将它们作为单个卷呈现给网络用户,然后基于卷在卷之间迁移文件。用法统计。您可以购买的一些“存储虚拟化”设备实际上是在这一层上进行的。
我们访问存储堆栈的最后一站是客户端计算机中的网络文件系统客户端。在这个级别上存在分布式文件系统(DFS),其允许文件系统的单个逻辑表示存在于多个网络文件系统上。客户端知道这是DFS共享,并且该特定对象是DFS链接,并且在跟随它时将指定的网络共享呈现为父目录的子目录。在这个级别上还有其他抽象示例,但DFS可能是最常见的。
要记住的一件事是,通过所有这些,存储堆栈的每一层都独立于它上面的那些层。许多层已经在进行块级抽象,因此添加一个层并不会改变很多。文件级抽象必须发生在堆栈顶部附近(对于文件系统所在的位置)和较低的影响高度分离到甚至可能没有被注意到的程度。
在它的核心“存储虚拟化”仍然主要是自PC时代(如果不是更早)开始以来发生的事情的营销术语,只有这一次,当虚拟化成为当下的流行语时,新的抽象层正在发生。
我所知道的一个新的抽象层是一种称为“存储路由器”的东西,你只能在大型存储区域网络上看到它。此设备后面有几个不同的存储阵列,并将这些单独的阵列显示为具有多个LUN的单个阵列。更高级的可以进行有趣的块级抽象,例如将很少使用的块移动到更慢/更便宜的存储,并将高度使用的块移动到SSD层,或者处理通常不允许这种事情的存储阵列之间的实时复制。
PS:RAID不仅仅是设备级虚拟化。我现在有一个存储阵列的工作是需要切片磁盘,并将它们分配到不同的RAID组。它工作得很好(我现在正在做),我在同一个磁盘设备上同时拥有RAID1和RAID5卷。丢失两个驱动器,RAID5卷是吐司,但同一磁盘上的RAID1卷就可以了。