Red Hat Training

A Red Hat training course is available for RHEL 8

第 2 章 维护 VDO

部署 VDO 卷后,您可以执行某些任务来维护或优化它。以下一些任务是 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 卷的物理大小与基本块设备大小相同。

其它资源

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 命令

要从精简配置节省的存储中受益,物理存储层需要知道数据何时被删除的。与精简配置存储一起工作的文件系统会发送 TRIMDISCARD 命令,来在不再需要逻辑块时通知存储系统。

有几种发送 TRIM 或 DISCARD 命令的方法:

  • 通过 discard 挂载选项,文件系统可以在删除块时发送这些命令。
  • 您可以通过使用 fstrim 等工具以受控的方式发送命令。这些工具告诉文件系统检测哪些逻辑块未使用,并以 TRIMDISCARD 命令的形式向存储系统发送信息。

对未使用的块使用 TRIM 或 DISCARD 并不是 VDO 独有的。任何精简置备的存储系统也会遇到同样的问题。

2.1.3. 监控 VDO

此流程描述了如何从 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 卷中回收存储空间。

除非文件系统使用 DISCARDTRIMUNMAP 命令告知块是空闲的,否则 VDO 无法回收空间。

流程

  • 如果 VDO 卷中的文件系统支持丢弃(discard)操作,请启用它们。请参阅 第 5 章 丢弃未使用块
  • 对于不使用 DISCARDTRIMUNMAP 的文件系统,您可以手动回收空闲空间。保存由二进制 0 组成的文件,以便占据空闲空间,然后删除该文件。

2.1.5. 在没有文件系统的情况下为 VDO 回收空间

此流程回收 VDO 卷上的存储空间,该卷用作没有文件系统的块存储目标。

流程

  • 使用 blkdiscard 工具。

    例如,可以通过在其上部署 LVM ,可以将单个 VDO 卷划分为多个子卷。在取消配置的逻辑卷前,请使用 blkdiscard 工具释放该逻辑卷之前使用的空间。

    LVM 支持 REQ_DISCARD 命令,并在适当的逻辑块地址上将请求转发到 VDO,以便释放空间。如果您使用其他卷管理器,则它们也需要支持 REQ_DISCARD,或者等效地支持用于 SCSI 设备的 UNMAP 或用于 ATA 设备的 TRIM

其它资源

  • The 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 的值大于零。