第 2 章 维护 VDO
部署 VDO 卷后,您可以执行某些任务来维护或优化它。以下一些任务是 VDO 卷正常工作所必需的。
先决条件
- 安装并部署 VDO。请参阅 第 1 章 部署 VDO。
2.1. 管理 VDO 卷的空闲空间
VDO 是一个精简配置的块存储目标。因此,您必须主动监控和管理 VDO 卷中的空间使用情况。
2.1.1. VDO 卷的物理和逻辑大小
VDO 通过以下方法使用物理、可用物理和逻辑大小:
- 物理大小
这与底层块设备的大小相同。VDO 使用这个存储用于:
- 用户数据,这些数据可能会进行重复数据删除和压缩
- VDO 元数据,如 UDS 索引
- 可用物理大小
这是 VDO 可用于用户数据的物理大小的一部分
它等同于物理大小减去元数据的大小,再减去将卷根据指定的 slab 的大小分为 slab 后剩余的值。
- 逻辑大小
这是 VDO 卷在应用程序中的置备大小。它通常大于可用的物理大小。如果没有指定
--vdoLogicalSize
选项,则逻辑卷的调配现在被配置为1:1
的比率。例如,如果将 VDO 卷放在 20GB 块设备之上,则为 UDS 索引保留 2.5 GB(如果使用默认索引大小)。剩余的 17.5 GB 为 VDO 元数据和用户数据提供。因此,要消耗的可用存储不超过 17.5 GB,且可能会因为组成实际 VDO 卷的元数据而减少。VDO 目前支持任意逻辑卷大小最多为物理卷的 254 倍,但不能超过 4PB。
图 2.1. VDO 磁盘机构

在这个图表中,VDO 重复数据删除存储对象完全位于块设备之上,这意味着 VDO 卷的物理大小与基本块设备大小相同。
其它资源
- 有关不同大小的块设备上需要多少存储 VDO 元数据的更多信息,请参阅 第 1.6.4 节 “按物理大小的 VDO 要求示例”。
2.1.2. VDO 中的精简置备
VDO 是一个精简配置的块存储目标。VDO 卷使用的物理空间量可能与为存储用户显示的卷大小有所不同。您可以使用它来节约存储成本。
没有可用空间的条件
如果写入的数据没有达到预期的性能率,请小心会意外出现存储空间耗尽的问题。
每当逻辑块(虚拟存储)的数量超过物理块(实际存储)的数量时,文件系统和应用程序可能会意外地遇到空间耗尽的问题。因此,使用 VDO 的存储系统必须为您提供一个监控 VDO 卷中空闲池大小的方法。
您可以使用 vdostats
工具来确定此空闲池的大小。这个工具的默认输出会列出所有运行 VDO 卷的信息,其格式与 Linux df
工具列出的格式类似。例如:
Device 1K-blocks Used Available Use%
/dev/mapper/vdo-name 211812352 105906176 105906176 50%
当 VDO 卷的物理存储容量接近满时,VDO 在系统日志中报告警告,如下所示:
Oct 2 17:13:39 system lvm[13863]: Monitoring VDO pool vdo-name. Oct 2 17:27:39 system lvm[13863]: WARNING: VDO pool vdo-name is now 80.69% full. Oct 2 17:28:19 system lvm[13863]: WARNING: VDO pool vdo-name is now 85.25% full. Oct 2 17:29:39 system lvm[13863]: WARNING: VDO pool vdo-name is now 90.64% full. Oct 2 17:30:29 system lvm[13863]: WARNING: VDO pool vdo-name is now 96.07% full.
这些警告消息只有在 lvm2-monitor
服务运行时才会出现。它会被默认启用。
如何防止没有空间的问题
如果可用池的大小低于一定级别,可以执行以下操作:
- 删除数据。当删除的数据不再被重复时,可能重新获得可用空间。只有发出了签发后,删除数据才可以释放空间。
- 添加物理存储
监控 VDO 卷的物理空间,以防止出现空间不足的情况。物理块不足可能会导致 VDO 卷中最近写入的数据丢失。
精简配置以及 TRIM 和 DISCARD 命令
要从精简配置节省的存储中受益,物理存储层需要知道数据何时被删除的。与精简配置存储一起工作的文件系统会发送 TRIM
或 DISCARD
命令,来在不再需要逻辑块时通知存储系统。
有几种发送 TRIM 或
DISCARD
命令的方法:
-
通过
discard
挂载选项,文件系统可以在删除块时发送这些命令。 -
您可以通过使用
fstrim
等工具以受控的方式发送命令。这些工具告诉文件系统检测哪些逻辑块未使用,并以TRIM
或DISCARD
命令的形式向存储系统发送信息。
对未使用的块使用 TRIM
或 DISCARD
并不是 VDO 独有的。任何精简置备的存储系统也会遇到同样的问题。
2.1.3. 监控 VDO
此流程描述了如何从 VDO 卷获取使用效率的信息。
先决条件
- 安装 VDO 软件。请参阅 第 1.7 节 “安装 VDO”。
流程
使用
vdostats
工具来获取有关 VDO 卷的信息:# vdostats --human-readable Device 1K-blocks Used Available Use% Space saving% /dev/mapper/node1osd1 926.5G 21.0G 905.5G 2% 73% /dev/mapper/node1osd2 926.5G 28.2G 898.3G 3% 64%
其它资源
-
您系统上的
vdostats (8)
手册页
2.1.4. 在文件系统中为 VDO 回收空间
此流程在托管文件系统的 VDO 卷中回收存储空间。
除非文件系统使用 DISCARD
、TRIM
或 UNMAP
命令告知块是空闲的,否则 VDO 无法回收空间。
流程
- 如果 VDO 卷中的文件系统支持丢弃(discard)操作,请启用它们。请参阅 第 5 章 丢弃未使用块。
-
对于不使用
DISCARD
、TRIM
或UNMAP
的文件系统,您可以手动回收空闲空间。保存由二进制 0 组成的文件,以便占据空闲空间,然后删除该文件。
2.1.5. 在没有文件系统的情况下为 VDO 回收空间
此流程回收 VDO 卷上的存储空间,该卷用作没有文件系统的块存储目标。
流程
使用
blkdiscard
工具。例如,可以通过在其上部署 LVM ,可以将单个 VDO 卷划分为多个子卷。在取消配置的逻辑卷前,请使用
blkdiscard
工具释放该逻辑卷之前使用的空间。LVM 支持
REQ_DISCARD
命令,并在适当的逻辑块地址上将请求转发到 VDO,以便释放空间。如果您使用其他卷管理器,则它们也需要支持REQ_DISCARD
,或者等效地支持用于 SCSI 设备的UNMAP
或用于 ATA 设备的TRIM
。
其它资源
-
系统中
blkdiscard (8)
手册页
2.1.6. 在光纤通道或以太网网络中为 VDO 回收空间
此流程回收配置到光纤通道存储结构上的主机的 VDO 卷(或部分卷)上的存储空间,或使用 SCSI 目标框架的以太网空间,如 LIO 或 SCST。
流程
SCSI 启动器可以使用
UNMAP
命令在精简配置的存储目标上释放空间,但需要配置 SCSI 目标框架来公布对此命令的支持。这通常是通过在这些卷上启用精简置备来完成的。通过运行以下命令,来在基于 Linux 的 SCSI 启动器上验证对
UNMAP
的支持:# sg_vpd --page=0xb0 /dev/device
在输出中,验证 Maximum unmap LBA count 的值大于零。