Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

第 30 章 VDO 集成

30.1. VDO 理论概述

虚拟数据优化器(VDO)是一种块虚拟化技术,可让您轻松创建压缩的重复数据删除池。
  • deduplication 是通过 删除重复 块的多个副本来减少存储资源消耗的技术。
    VDO 检测每个重复块,并将其记录为对原始块的引用,而不是多次写入相同的数据。VDO 维护一个从逻辑块地址(由 VDO 上面的存储层使用)到物理块地址的映射,这些地址由 VDO 下的存储层使用。
    在重复数据删除后,可将多个逻辑块地址映射到相同的物理块地址;这些地址称为 共享块。块共享对存储用户是不可见的,用户会像 VDO 不存在一样读取和写入块。当共享块被覆盖时,会分配一个新的物理块来存储新的块数据,以确保映射到共享物理块的其他逻辑块地址不会被修改。
  • 压缩 是一种数据降低技术,非常适用于不一定显示块级冗余(如日志文件和数据库)的文件格式。详情请查看 第 30.4.8 节 “使用压缩”
VDO 解决方案包括以下组件:
kvdo
加载到 Linux 设备映射器层的内核模块,以提供重复数据删除、压缩和精简置备的块存储卷
uds
与卷上的通用重复数据服务(UDS)索引通信的内核模块,并分析重复数据。
命令行工具
用于配置和管理优化的存储。

30.1.1. UDS 内核模块(uds)

UDS 索引提供了 VDO 产品的基础。对于每个新的数据,它会快速确定该部分是否与之前存储的数据相同。如果索引发现匹配项,则存储系统可在内部引用现有项,以避免多次保存相同的信息。
UDS 索引作为 the uds 内核模块在 内核中运行。

30.1.2. VDO 内核模块(kvdo)

kvdo Linux 内核模块在 Linux 设备映射器层中提供 block-layer deduplication 服务。在 Linux 内核中,设备映射器充当管理块存储池的通用框架,允许在内核的块接口和实际存储设备驱动程序之间插入块处理模块到存储堆栈中。
kvdo 模块作为块设备公开,可以直接用于块存储或通过其中一个可用的 Linux 文件系统(如 XFS 或 ext4)进行访问。当 kvdo 收到从 VDO 卷读取(逻辑)数据的请求时,它会将请求的逻辑块映射到底层物理块,然后读取并返回请求的数据。
kvdo 收到向 VDO 卷写入数据的请求时,它首先检查它是 DISCARD 还是 TRIM 请求,或者数据是否统一为零。如果其中任何一个条件保留,kvdo 会更新其块映射并确认请求。否则,物理块将分配给请求使用。

VDO 写入策略概述

如果 kvdo 模块以同步模式运行:
  1. 它会在请求中临时将数据写入分配块中,然后确认请求。
  2. 确认完成后,会尝试通过计算块数据的 MurmurHash-3 签名来取消复制块,该签名发送到 VDO 索引。
  3. 如果 VDO 索引包含具有相同签名的块的条目,kvdo 会读取指定的块,并对这两个块进行字节比较,以验证它们是否相同。
  4. 如果它们确实相同,则 kvdo 会更新其块映射,以便逻辑块指向对应的物理块并释放分配的物理块。
  5. 如果 VDO 索引没有包含要写入块的签名的条目,或者指定的块实际上不包含相同的数据,kvdo 会更新其块映射使临时物理块永久存在。
如果 kvdo 以异步模式运行:
  1. 它将立即确认请求而不是写数据。
  2. 然后它会尝试使用与上述步骤相同的方法来复制块。
  3. 如果块确实是重复的,kvdo 将更新其块映射并释放分配的块。否则,它会在请求中将数据写入分配块,并更新块映射使物理块持久。

30.1.3. VDO 卷

VDO 使用块设备作为后备存储,它包括由一个或多个磁盘、分区甚至平面文件组成的物理存储聚合。当 VDO 卷由存储管理工具创建时,VDO 为 UDS 索引和 VDO 卷保留卷空间,它们一起为用户和应用程序提供重复数据删除的块存储。图 30.1 “VDO 磁盘机构” 演示了这些组件如何结合在一起。

图 30.1. VDO 磁盘机构

VDO 磁盘机构

slabs

VDO 卷的物理存储被分成多个 slab,每个 slab 都是 物理空间的连续区域。给定卷的所有 slab 的大小相同,可能是 128 MB 至 32 GB 的 2 个幂数。
默认的 slab 大小为 2 GB,用于在较小的测试系统中评估 VDO。单个 VDO 卷最多可有 8192 个 slabs。因此,在使用 2GB slab 的默认配置中,允许的最大物理存储为 16 TB。当使用 32GB 的 slab 时,允许的最大物理存储为 256 TB。VDO 至少为元数据保留了一个整个 slab,因此无法用于存储用户数据。
slab 大小不影响 VDO 卷的性能。

表 30.1. 根据物理卷大小推荐的 VDO Slab 大小

物理卷大小推荐的 Slab Size
10–99 GB1 GB
100 GB - 1 TB2 GB
2–256 TB32 GB
slab 的大小可以通过为 vdo create 命令提供 --vdoSlabSize=megabytes 选项来控制。

物理大小和可用物理大小

物理大小和可用物理大小描述 VDO 可以使用的块设备中的磁盘空间量:
  • 物理大小 与底层块设备的大小相同。VDO 使用这个存储用于:
    • 用户数据,这些数据可能会进行重复数据删除和压缩
    • VDO 元数据,如 UDS 索引
  • 可用物理大小 是 VDO 可用于用户数据的物理大小的一部分。
    它等同于物理大小减去元数据的大小,再减去将卷根据指定的 slab 的大小分为 slab 后剩余的值。
有关不同大小的块设备中存储 VDO 元数据数量的示例,请参阅 第 30.2.3 节 “物理卷大小的 VDO 系统要求示例”

逻辑大小

如果没有指定 --vdoLogicalSize 选项,逻辑卷大小默认为可用的物理卷大小。请注意,在 图 30.1 “VDO 磁盘机构” 中,VDO 重复数据删除存储目标完全位于块设备之上,这意味着 VDO 卷的物理大小与基础块设备的大小相同。
VDO 目前支持任意逻辑卷大小最多为物理卷的 254 倍,但不能超过 4PB。

30.1.4. 命令行工具

VDO 包括以下用于配置和管理的命令行工具:
vdo
创建、配置和控制 VDO 卷
vdostats
提供利用率和性能统计