我正在尝试理解和比较存储虚拟化方法,包括袭击和逻辑卷管理器我希望能够对各种概念之间的关系有一个总体的概念和总体印象。
我想知道各种存储虚拟化方法是否可以分为设备(磁盘)、分区或文件系统级别的虚拟化,如下所示
- 袭击属于设备/磁盘级别的虚拟化,用逻辑/虚拟磁盘代替物理磁盘。
- 逻辑卷管理器属于分区级别的虚拟化,用逻辑/虚拟分区(也称为逻辑卷)替换分区。
- 文件系统级别也有虚拟化,用逻辑/虚拟文件系统取代文件系统,例如, 网络附加存储 (NAS)。
如果我上面的理解是正确的,那么每个级别的虚拟化是否也实现了所有较低级别的虚拟化?例如,分区级别的虚拟化也实现了设备级别的虚拟化,而文件系统级别的虚拟化也实现了分区和设备级别的虚拟化?
不同级别的虚拟化如何影响/决定其不同的应用领域?例如,是否有适合 RAID 但不适合 LVM 的应用程序,以及适合 LVM 但不适合 RAID 的应用程序?
维基百科上有一篇文章 存储虚拟化其中主要有两大类方法,块虚拟化(又可进一步分为基于存储设备和基于主机和基于网络)和文件虚拟化。
将文章与我在第一部分中的理解进行比较:
- 是否正确基于存储设备的块虚拟化与设备级别的虚拟化相同。基于主机的块虚拟化与分区级别的虚拟化相同。 文件虚拟化与文件系统级别的虚拟化相同。
- 但在 基于主机的块虚拟化#具体示例看起来基于主机的块虚拟化包括文件系统级别的虚拟化?那么如何理解什么是文件虚拟化呢?
- 我宁愿单挑 基于网络来自上述维基百科文章中的块虚拟化,因为对于 网络存储虚拟化,我认为我们还可以将各种方法分为设备、分区和文件系统级别?例如,我可以说存储区域网络 (SAN) 属于设备级别,而网络附加存储 (NAS) 属于文件系统级别吗?
感谢致敬!
答案1
不妨提供答案。请参阅@soandos 的回答,以更详细地回答您的具体问题。
LVM 与 RAID
许多人都提到过,RAID 是一种技术标准,其中多个磁盘驱动器被分配在一起作为磁盘阵列,提供不同级别的性能和可靠性优势。例如,RAID 0 提供了硬盘驱动器所能获得的最佳性能,并且对磁盘丢失极为敏感(一次丢失 = 基本上是全部丢失),而 RAID 6 即使在一次驱动器丢失的情况下重建阵列也能提供冗余。RAID 阵列通常被视为操作系统的单一驱动器。
可以说 RAID 是多对一映射。
另一方面,LVM 允许逻辑“磁盘驱动器”(准确地说是块设备,但无论如何)由不同磁盘驱动器的部分组成。它们以“多对多映射”的方式存在。虽然可以使用 LVM 来完成 RAID 可以完成的任务,但 LVM 实际上可以完成更多任务。例如,要将另一个磁盘驱动器添加到 RAID 阵列,可能需要从头开始重建整个阵列。使用 LVM,只需将磁盘驱动器添加到机器,将磁盘驱动器映射添加到逻辑卷,然后使用它(实际配置稍微复杂一些,但肯定比重建整个阵列要简单)。
答案2
- RAID 是一种备份技术,可以确保在驱动器发生故障的情况下,所有数据仍然完整,而 LVM 是一种可以执行许多操作的逻辑卷管理器。
- 它不是。
- 这似乎是一个奇怪的问题。RAID 是一种跨驱动器分离数据的方法,这样即使一个驱动器发生故障,也不会丢失任何数据。LVM 是一个卷管理器,可用于更改用户/操作系统查看所有硬盘驱动器的方式。它们彼此无关(尽管 LVM 可以实现 RAID 1 和 RAID 0,但这不是它的主要重点)。
- 第一个意味着您不必知道数据在哪个物理设备上,第二个意味着您可以以更抽象的方式存储文件之间的链接(因为没有更好的词来表达)。
- 如上所述,没有“设备级别”或“分区级别”可谈,所以不能这样称呼它们。
答案3
这篇文章写得不好。
最大的问题之一是整个存储堆栈中内置了多个抽象层,而“虚拟化”这个词含义模糊,很难明确地指定一个位置来放置它。为了更好地了解存储中的多个抽象层,我将向您介绍我去年发表的一篇博客文章(点击这里阅读了解血腥细节)。
用营销术语来说,“存储虚拟化”只是在以前没有的地方引入抽象。这可能发生在许多时候,具体取决于细分市场。但这只是营销。现在是技术时间。
存储堆栈(略有简化):
- 磁盘
- RAID 控制器
- 软件 RAID
- 卷管理器
- 文件系统
- 网络文件系统
- 网络文件系统客户端
磁盘甚至老式旋转磁盘,都可以进行一定程度的虚拟化。它们提供了逻辑磁盘驱动器保留一定数量的块以重新分配损坏的块,逻辑视图就是如何将其从磁盘控制器中抽象出来。SMART 等技术可以及时捕获此情况并报告驱动器“预故障”,以便您可以相应地规划转换。自 80 年代以来,这种做法就以某种形式存在。
RAID 卡提供另一个抽象层,向操作系统隐藏存储的真实形状。自 20 世纪 80 年代末第一块 RAID 卡问世以来,这种情况就一直存在,而且从那时起,它们变得越来越复杂。带有写入缓存的卡还提供了另一个抽象层,因为写入可以在实际写入磁盘之前报告为已提交。真正花哨的卡(例如存储区域网络阵列中的卡)甚至可以写入两个单独的磁盘阵列进行实时复制,而操作系统对此一无所知。
一旦进入操作系统,事情就会变得更加模糊,因为每个系统都有自己的事情。软件 RAID(Linux 中的 md)通常作为低级存储驱动程序实现,将逻辑组合的存储呈现给更高的存储层。与 RAID 卡一样,您可以在这里做各种有趣的事情。您看到的一些“存储虚拟化”产品都是在此阶段实现的。
再往上走,你就会到达卷管理器(LVM) 可以提供一些非常复杂的配置。下一层将磁盘聚合成一个虚拟卷,卷管理器可以将多个卷组合成一个更大的卷……或将卷池拆分成任意数量的卷。同样,您看到的一些存储虚拟化产品也存在于这一层。
下一步是文件系统。这是众所周知的“文件”和“目录”抽象层。一些文件系统(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 卷则一切正常。