有关存储虚拟化的问题


2

我正在尝试理解和比较存储虚拟化方法,包括RAIDLVM。我希望我能对各种概念之间的关系有一些总体思路和大局。

  1. 我想知道各种存储虚拟化方法是否可以归类为设备(磁盘),分区或文件系统级别的虚拟化,如下所示

    • RAID属于设备/磁盘级别的虚拟化,它将逻辑/虚拟磁盘替换为物理磁盘。
    • LVM属于分区级别的虚拟化,它将逻辑/虚拟分区(也称为逻辑卷)替换为分区。
    • 在文件系统级别还存在虚拟化,它将文件系统替换为逻辑/虚拟文件系统,例如, 网络附加存储(NAS)
  2. 如果我的上述理解是正确的,那么每个级别的虚拟化是否也会在所有较低级别实施虚拟化?例如,分区级虚拟化还在设备级实现虚拟化,文件系统级虚拟化也在分区和设备级实现虚拟化?

  3. 不同级别的虚拟化如何影响/确定其不同的应用领域?例如,是否有适用于RAID但不适用于LVM,LVM但不适用于RAID的应用程序?

  4. 维基百科有一篇关于存储虚拟化的文章 ,其中有两种主要类别的方法,块虚拟化(可进一步分为基于存储设备和基于主机和基于网络)和文件虚拟化。

    将文章与我在第1部分中的理解进行比较,

  5. 我宁愿 在前面提到的维基百科文章中选择基于网络的块虚拟化,因为对于 网络上的存储虚拟化,我认为我们还可以将各种方法分类到设备,分区和文件系统的级别?例如,我可以说存储区域网络(SAN)属于设备级别,网络连接存储(NAS)属于文件系统级别吗?

谢谢并恭祝安康!


2
我不认为您将RAID和LVM描述为“磁盘”或“分区”级虚拟化非常准确。存储虚拟化指的是集中管理的多个通常是网络链接的设备的抽象,允许整个系统而不是每个服务器访问系统。RAID / LVM与存储虚拟化本身几乎没有关系,尽管(当然)它们通常用于SAN集群。
Bubu

谢谢!但我不明白“RAID / LVM本身与存储虚拟化无关”。从存储虚拟化的维基百科文章(en.wikipedia.org/wiki/Storage_virtualization),LVM(en.wikipedia.org/wiki/Logical_Volume_Manager_(Linux) )和RAID(en.wikipedia.org/wiki/RAID,两个RAID)和LVM是存储虚拟化的方法,而存储虚拟化不仅仅是网络链接存储设备的情况。
蒂姆

1
关于存储虚拟化的维基百科文章充其量只是平庸。
Bubu

那么值得推荐的参考文献?
蒂姆

Answers:


3

不妨提供答案。请参阅@soandos的答案,以更详细地回答您的具体问题。

LVM与RAID

正如许多人所提到的,RAID是一种技术标准,其中多个磁盘驱动器作为磁盘阵列一起分配,提供不同级别的性能和可靠性优势。例如,RAID 0提供了硬盘驱动器可能获得的最佳性能,并且对磁盘丢失非常敏感(一次丢失=基本上完全丢失),而RAID 6即使在一个驱动器丢失情况下重建阵列时也提供冗余。RAID阵列通常被视为操作系统的单个驱动器。

可以说RAID是多对一映射。

另一方面,LVM允许逻辑“磁盘驱动器”(块设备准确,但无论如何)由不同磁盘驱动器的部分组成。它们以“多对多映射”的方式存在。虽然可以使用LVM来完成RAID可以实现的功能,但LVM实际上可以完成更多任务。例如,要将另一个磁盘驱动器添加到RAID阵列,可能需要从头开始重建整个阵列。使用LVM,只需将磁盘驱动器添加到计算机,将磁盘驱动器映射添加到逻辑卷并使用它(实际配置稍微复杂一点,但肯定比重建整个阵列要少)。


1
  1. RAID是一种备份技术,可确保在驱动器发生故障时,所有数据保持不变,LVM是逻辑卷管理器,可以执行许多操作。
  2. 不是。
  3. 这似乎是一个奇怪的问题。RAID是一种跨驱动器分离数据的方法,因此如果一个发生故障,数据就不会丢失。LVM是一个卷管理器,可用于更改用户/操作系统查看所有硬盘驱动器的方式。它们彼此无关(虽然LVM可以实现RAID 1和RAID 0,但这不是它的主要关注点)。
  4. 第一个意味着您不必知道数据所在的物理设备,第二个意味着您可以以更抽象的方式存储缺少更好的文字之间的链接。
  5. 如上所述,没有“设备级别”或“分区级别”可以谈论,所以不,你不能这样称呼它们。

谢谢!但我仍然看不出RAID和LVM是如何根本不同的,因为两者都是存储虚拟化的实现。因此仍然不明白为什么它们被用于不同的目的?
蒂姆

RAID不是虚拟化。它代表“独立磁盘冗余阵列”。虚拟化这个词甚至没有出现在维基百科关于它的文章中。阅读本文:en.wikipedia.org/wiki/RAID以获得更长的解释。
soandos 2011年

谢谢!但我仍然不明白你的意见。(1)“虚拟磁盘”和“虚拟设备”出现在RAID的文章中,我认为RAI​​D是设备级别的存储虚拟化。在存储设备的文章中,在基于存储设备的块虚拟化(en.wikipedia.org/wiki/...)中提到了RAID 。
蒂姆

他们可能有一些共同点,但目标完全不同。在RAID中,由于数据条带化,您需要一个虚拟磁盘。由于通常写入一个磁盘的数据现在写入多个,因此您需要一种方法来读取整个文件,就好像它是连续的一样。这是RAID的概念的一个侧面点,例如在RAID 1中不需要。
soandos 2011年

(2)关于“RAID不是关于虚拟化”,我想知道RAID是否会使几个物理存储设备看起来像是用作整个虚拟/逻辑存储设备?引用Raid文章“这是通过将多个磁盘驱动器组件组合成一个逻辑单元来实现的”。
蒂姆

0

这篇文章写得不好。

最大的问题之一是整个存储堆栈中都有多层抽象,而“虚拟化”是一个模糊的词,因为很难明确指定放置它的位置。为了更好地了解存储中的多层抽象,我将指出你去年做过的一篇博客文章(在这里阅读它的血腥细节)。

在市场营销方面,“存储虚拟化”只是在以前没有的地方引入抽象。这可能发生在很多方面,具体取决于细分市场。但这只是营销。技术时间。

存储堆栈(略微简化):

  1. 磁盘
  2. RAID控制器
  3. 软件RAID
  4. 卷管理员
  5. 文件系统
  6. 网络文件系统
  7. 网络文件系统客户端

磁盘,即使是旧式旋转磁盘,也可以进行虚拟化。它们提供了盘片(或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卷就可以了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.