存储服务:逻辑卷管理

虽然存储虚拟化曾经是高端存储系统的独特功能,但是现在它是 Linux 的标准功能。Linux 中可用的一个最重要的服务是逻辑卷管理器(Logical Volume Manager,LVM)。LVM 是一个薄层,其位于基础存储架构中可用的物理存储之上(附带用户空间工具),并将该存储提取到一个或多个管理更简单的逻辑卷中。例如,在物理磁盘不能调整大小时,可以调整逻辑卷大小以便从其中添加或删除空间。

通过将物理设备提取到逻辑设备的能力,LVM 创建了一些其他存储功能,例如卷的只读和读写快照、跨卷的数据分段以便提高性能(独立磁盘的冗余阵列 [RAID]-0)、跨卷 (RAID-1) 的数据镜像以及在物理设备之间的卷迁移(甚至联机时)。

对于镜像之外的数据保护来说,Linux 包括 md(其代表多个磁盘)并提供一系列丰富的 RAID 功能。此元素实现了软件 RAID 功能,支持 RAID-4(通过校验块分段数据)、RAID-5(通过分布式校验块分段数据)、RAID-6(通过分布式和双冗余校验块分段数据)以及 RAID-10(分段并镜像数据)。

LVM 依赖于另一个名为设备映射器 的存储组件,其提供(在其他功能中)多路径功能。例如,在 SAN 环境中,通常有多个到 SAN 构造的存储界面。多路径是一种提供保护以避免给定路径故障的功能,确保只要存在路径来与端点通信,就仍然可以使用存储。

存储功能

在过去几年中,项存储堆栈添加了两个相对简单的功能,说明了存储生态系统的发展:

○数据完整性

○支持固态磁盘(solid-state disks,SSDs)

数据完整性

第一个变更处理在企业存储设置中使用商用驱动器。虽然企业级驱动器(如 SAS 驱动器)是可靠的,但是 SATA 驱动器是以不同要求以及成本作为主要因素而创建的。由于这个原因,SATA 驱动器可能遭遇称为无提示数据损坏 的问题,即在从磁盘读取数据时可能引入错误且无法检测到这些错误。要在企业设置中解决此问题并支持 SATA 驱动器,需将数据完整性代码添加到磁盘上的块中(其中磁盘使用 520 字节扇区,而不是传统的 512 字节块)。此外,驱动器自身可以验证正在写入的数据,以便其完整性代码与数据匹配。用这种方式,可以在错误被写入磁盘时捕获这些错误,而不是以后在无法对这些错误进行任何操作时检测到它们。

这种机制被称为数据完整性字段(Data Integrity Field,DIF),如图 3 所示,其代表一个在数据块上包括循环冗余校验(Cyclic Redundancy Check,CRC)的 8 字节尾部、一个参考标记(通常是逻辑块地址(Logical Block Addressing [LBA])的一部分)以及一个应用程序定义的应用程序标记。参考标记对于捕获对不正确块的错误写入非常有用,其中应用程序标记可用于捕获软件堆栈中的其他错误。例如,如果写入 PDF 文档,那么应用程序标记可设置为用来指示特殊 PDF 标记的值。在读取 PDF 时,可以检查到每一个块的应用程序标记,以便确保所有标记都指定该 PDF 标记。自从内核版本 2.6.27 以来,Linux 内支持 DIF。

适用于 512 字节扇区的 DIF 结构

图 3. 适用于 512 字节扇区的 DIF 结构


对 SSD 的增加支持

SSD 的引入正在以一些方式改变着存储的生态系统。这些磁盘删除了在旋转磁盘中的一些比较大的延时,因此其提供了一种维护与 CPU 之间的数据流的方式。但是 SSD 不同于硬盘驱动器(Hard Disk Drive,HDD),因为它们是可以消耗掉的。SSD 内存储的编写次数是有限的(取决于技术);因此,在编写数据时要尽可能的有效是非常重要的。更糟的是,SSD 必须内部切换数据以便尽可能减低在称为垃圾收集 或耗损均衡 的进程中引入错误的可能。此进程会导致写入到可消耗的存储,因此应尽量减少。

使用 SSD 和传统存储的另一个问题是 HDD 不关心磁盘上的数据是否有效。如果文件系统使数据无效,则该数据可保留在磁盘上且没有任何不利之处。此限制不能与 SSD 同时存在因为耗损均衡的要求。由于这个原因,Linux 现在支持文件系统将丢弃块传递到 SSD 的功能(自内核版本 2.6.29 开始)。此功能允许 SSD 从耗损均衡进程删除这些块,并有助于增加驱动器的耐力。


相关内容