第 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 索引作为
uds
内核模块在内核中运行。
30.1.2. VDO 内核模块(kvdo
)
kvdo
Linux 内核模块在 Linux 设备映射器层中提供块层 deduplication 服务。在 Linux 内核中,设备映射器充当管理块存储池的通用框架,允许在内核块接口和实际存储设备驱动程序之间插入块处理模块的存储堆栈。
kvdo
模块作为块设备公开,可直接访问块存储,或通过其中一个可用的 Linux 文件系统(如 XFS 或 ext4)提供。当 kvdo
收到从 VDO 卷读取数据的请求(逻辑)块时,它会将请求的逻辑块映射到底层物理块,然后读取并返回请求的数据。
当
kvdo
收到向 VDO 卷写入数据块的请求时,它会首先检查它是 DISCARD
还是 TRIM
请求,或者数据是否统一为零。如果其中任何一个条件包含,则 kvdo
会更新其块映射并确认请求。否则,将分配物理块以供请求使用。
VDO 写策略概述
如果
kvdo
模块以同步模式运行:
- 它会在请求中临时将数据写入分配块中,然后确认请求。
- 确认完成后,会尝试通过计算块数据的 MurmurHash-3 签名来去除重复的块,该签名发送给 VDO 索引。
- 如果 VDO 索引包含具有相同签名的块的条目,
kvdo
会读取指定的块,并对两个块进行字节比较,以验证它们是否相同。 - 如果它们实际上是相同的,则
kvdo
会更新其块映射,以便逻辑块指向对应的物理块,并释放分配的物理块。 - 如果 VDO 索引不包含要写入的块的签名条目,或者指定的块实际上不包含相同的数据,则
kvdo
会更新其块映射,使临时物理块永久。
如果
kvdo
以异步模式运行:
- 它将立即确认请求而不是写数据。
- 然后它会尝试使用与上述步骤相同的方法来复制块。
- 如果块变为重复,则
kvdo
将更新其块映射并释放分配的块。否则,它会将请求中的数据写入分配的块,并更新块映射以使物理块永久存在。
30.1.3. VDO 卷
VDO 使用块设备作为后备存储,它包括由一个或多个磁盘、分区甚至平面文件组成的物理存储聚合。当 VDO 卷由存储管理工具创建时,VDO 为 UDS 索引和 VDO 卷保留卷的空间,以便向用户和应用程序提供去除重复数据的块存储。图 30.1 “VDO 磁盘机构” 展示这些部分如何相互兼容。
图 30.1. VDO 磁盘机构
slabs
VDO 卷的物理存储被分成多个 slabs,每个 slab 都是物理空间的连续区域。给定卷的所有 slab 的大小相同,可以是 128 MB 的任何指数,最多为 32 GB。
默认的 slab 大小为 2 GB,用于在较小的测试系统中评估 VDO。单个 VDO 卷最多可能有 8192 个 slabs。因此,在使用 2GB slab 的默认配置中,允许的最大物理存储为 16 TB。当使用 32GB 的 slab 时,允许的最大物理存储为 256 TB。至少一个整个 slab 由 VDO 保留用于元数据,因此不能用于存储用户数据。
slab 大小不影响 VDO 卷的性能。
物理卷大小 | 推荐的 Slab 大小 |
---|---|
10–99 GB | 1 GB |
100 GB - 1 TB | 2 GB |
2–256 TB | 32 GB |
slab 的大小可通过为
--vdoSlabSize=megabytes
命令提供 vdo create
选项来控制。
物理大小和可用物理大小
物理大小和可用物理大小描述了 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 包括以下用于配置和管理的命令行工具: