36.2. 维护 VDO
部署 VDO 卷后,您可以执行某些任务来维护或优化它。以下一些任务是 VDO 卷正常工作所必需的。
先决条件
- 安装并部署 VDO。请参阅 第 36.1 节 “部署 VDO”。
36.2.1. 管理 VDO 卷的空闲空间 复制链接链接已复制到粘贴板!
VDO 是一个精简配置的块存储目标。因此,您必须主动监控和管理 VDO 卷中的空间使用情况。
36.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。
图 36.5. VDO 磁盘机构
在这个图表中,VDO 重复数据删除存储对象完全位于块设备之上,这意味着 VDO 卷的物理大小与基本块设备大小相同。
36.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%
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.
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 独有的。任何精简置备的存储系统也会遇到同样的问题。
36.2.1.3. 监控 VDO 复制链接链接已复制到粘贴板!
此流程描述了如何从 VDO 卷获取使用情况和效率的信息。
先决条件
- 安装 VDO 软件。请参阅安装 VDO。
流程
使用
vdostats
工具来获取有关 VDO 卷的信息:vdostats --human-readable
# 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%
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
36.2.1.4. 在文件系统中为 VDO 回收空间 复制链接链接已复制到粘贴板!
此流程在托管文件系统的 VDO 卷中回收存储空间。
除非文件系统使用 DISCARD
、TRIM
或 UNMAP
命令告知块是空闲的,否则 VDO 无法回收空间。
流程
- 如果 VDO 卷中的文件系统支持丢弃(discard)操作,请启用它们。请参阅 Discarding unused blocks。
-
对于不使用
DISCARD
、TRIM
或UNMAP
的文件系统,您可以手动回收空闲空间。保存由二进制 0 组成的文件,以便占据空闲空间,然后删除该文件。
36.2.1.5. 在没有文件系统的情况下为 VDO 回收空间 复制链接链接已复制到粘贴板!
此流程回收 VDO 卷上的存储空间,该卷用作没有文件系统的块存储目标。
流程
使用
blkdiscard
工具。例如,可以通过在其上部署 LVM ,可以将单个 VDO 卷划分为多个子卷。在取消配置的逻辑卷前,请使用
blkdiscard
工具释放该逻辑卷之前使用的空间。LVM 支持
REQ_DISCARD
命令,并在适当的逻辑块地址上将请求转发到 VDO,以便释放空间。如果您使用其他卷管理器,则它们也需要支持REQ_DISCARD
,或者等效地支持用于 SCSI 设备的UNMAP
或用于 ATA 设备的TRIM
。
36.2.1.6. 在光纤通道或以太网网络中为 VDO 回收空间 复制链接链接已复制到粘贴板!
此流程回收配置到光纤通道存储结构上的主机的 VDO 卷(或部分卷)上的存储空间,或使用 SCSI 目标框架的以太网空间,如 LIO 或 SCST。
流程
SCSI 启动器可以使用
UNMAP
命令在精简配置的存储目标上释放空间,但需要配置 SCSI 目标框架来公布对此命令的支持。这通常是通过在这些卷上启用精简置备来完成的。通过运行以下命令,来在基于 Linux 的 SCSI 启动器上验证对
UNMAP
的支持:sg_vpd --page=0xb0 /dev/device
# sg_vpd --page=0xb0 /dev/device
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在输出中,验证 Maximum unmap LBA count 的值大于零。
36.2.2. 启动或停止 VDO 卷 复制链接链接已复制到粘贴板!
您可以启动或停止给定的 VDO 卷,或所有 VDO 卷及其关联的 UDS 索引。
36.2.2.1. 已启动并激活的 VDO 卷 复制链接链接已复制到粘贴板!
在系统引导过程中,vdo
systemd
单元会自动 启动 所有配置为 激活的 VDO 设备。
安装 vdo
软件包时,默认会安装并启用 vdo
systemd
单元。此单元会在系统启动时自动运行 vdo start --all
命令来启动所有激活的 VDO 卷。
您还可以通过在 vdo create
命令中添加 --activate=disabled
选项来创建不自动启动的 VDO 卷。
启动顺序
有些系统可能会将 LVM 卷放在 VDO 卷之上,或它们之下。在这些系统中,需要以正确顺序启动服务:
- 必须首先启动 LVM 的下层。在大多数系统中,当安装 LVM 软件包时会自动启动这个层。
-
然后,
vdo
systemd
单元必须启动。 - 最后,必须运行其他脚本以启动正在运行的 VDO 卷上的 LVM 卷或其他服务。
停止卷所需的时间
停止 VDO 卷需要根据存储设备速度以及卷需要写入的数据量而有所不同:
- 卷总是为每 1GiB UDS 索引写入大约 1GiB。
- 卷还写入与块映射缓存大小相等的数据量,再加上每个 slab 最多 8MiB。
- 卷必须完成处理所有未完成的 IO 请求。
36.2.2.2. 启动 VDO 卷 复制链接链接已复制到粘贴板!
此流程启动给定 VDO 卷或系统中的所有 VDO 卷。
流程
要启动给定的 VDO 卷,请使用:
vdo start --name=my-vdo
# vdo start --name=my-vdo
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要启动所有 VDO 卷,请使用:
vdo start --all
# vdo start --all
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
36.2.2.3. 停止 VDO 卷 复制链接链接已复制到粘贴板!
此流程停止给定 VDO 卷或系统中的所有 VDO 卷。
流程
停止卷。
要停止给定的 VDO 卷,请使用:
vdo stop --name=my-vdo
# vdo stop --name=my-vdo
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要停止所有 VDO 卷,请使用:
vdo stop --all
# vdo stop --all
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 等待卷完成向磁盘写入数据。
36.2.3. 系统引导时自动启动 VDO 卷 复制链接链接已复制到粘贴板!
您可以配置 VDO 卷以便在系统引导时自动启动。您还可以禁用自动启动。
36.2.3.1. 已启动并激活的 VDO 卷 复制链接链接已复制到粘贴板!
在系统引导过程中,vdo
systemd
单元会自动 启动 所有配置为 激活的 VDO 设备。
安装 vdo
软件包时,默认会安装并启用 vdo
systemd
单元。此单元会在系统启动时自动运行 vdo start --all
命令来启动所有激活的 VDO 卷。
您还可以通过在 vdo create
命令中添加 --activate=disabled
选项来创建不自动启动的 VDO 卷。
启动顺序
有些系统可能会将 LVM 卷放在 VDO 卷之上,或它们之下。在这些系统中,需要以正确顺序启动服务:
- 必须首先启动 LVM 的下层。在大多数系统中,当安装 LVM 软件包时会自动启动这个层。
-
然后,
vdo
systemd
单元必须启动。 - 最后,必须运行其他脚本以启动正在运行的 VDO 卷上的 LVM 卷或其他服务。
停止卷所需的时间
停止 VDO 卷需要根据存储设备速度以及卷需要写入的数据量而有所不同:
- 卷总是为每 1GiB UDS 索引写入大约 1GiB。
- 卷还写入与块映射缓存大小相等的数据量,再加上每个 slab 最多 8MiB。
- 卷必须完成处理所有未完成的 IO 请求。
36.2.3.2. 激活 VDO 卷 复制链接链接已复制到粘贴板!
此流程激活 VDO 卷使其自动启动。
流程
激活一个特定卷:
vdo activate --name=my-vdo
# vdo activate --name=my-vdo
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 激活所有卷:
vdo activate --all
# vdo activate --all
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
36.2.3.3. 取消激活 VDO 卷 复制链接链接已复制到粘贴板!
此流程取消激活 VDO 卷以防止自动启动。
流程
取消激活一个特定卷:
vdo deactivate --name=my-vdo
# vdo deactivate --name=my-vdo
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 取消激活所有卷:
vdo deactivate --all
# vdo deactivate --all
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
36.2.4. 选择 VDO 写入模式 复制链接链接已复制到粘贴板!
您可以根据基础块设备的要求,为 VDO 卷配置写入模式。默认情况下,VDO 选择自动写入模式。
36.2.4.1. VDO 写入模式 复制链接链接已复制到粘贴板!
VDO 支持以下写入模式:
同步
当 VDO 处于
sync
模式时,其上的层会假定写入命令将数据写入持久性存储。因此,文件系统或应用程序不需要发出 FLUSH 或强制单元访问(FUA)请求来使数据在关键点上变为持久。只有在底层的存储保证数据在写命令完成后写入持久性存储时,才必须将 VDO 设为
sync
模式。也就是说,存储必须没有易变的写缓存,或者不通过缓存进行写入操作。async
当 VDO 处于
async
模式时,VDO 不能保证在确认写命令时数据会被写入持久性存储。文件系统或应用程序必须发出 FLUSH 或 FUA 请求,来确保每次事务中数据在关键点上的持久性。如果底层存储不能保证在写命令完成后数据被写入到持久性存储,必须将 VDO 设为
async
模式;也就是说当存储具有易失性写回缓存时。async-unsafe
这个模式与
async
具有同样的属性,但它与原子性、一致性、隔离、持久性(ACID)不兼容。与async
相比,async-unsafe
具有更好的性能。警告当假设 ACID 合规的应用程序或文件系统在 VDO 卷上运行时,
sync-unsafe
模式可能会导致意外的数据丢失。auto
-
auto
模式根据每个设备的特性自动选择sync
或async
。这是默认选项。
36.2.4.2. VDO 写入模式的内部处理 复制链接链接已复制到粘贴板!
VDO 的写模式是 sync
和 async
。以下信息描述了这些模式的操作。
如果 kvdo
模块在同步(synch
)模式下运行:
- 它会在请求中临时将数据写入分配块中,然后确认请求。
- 确认完成后,会尝试通过计算块数据的 MurmurHash-3 签名来去除重复的块,该签名发送给 VDO 索引。
-
如果 VDO 索引包含具有相同签名的块的条目,
kvdo
会读取指定的块,并对这两个块进行逐字节的比较,以验证它们是否相同。 -
如果它们确实相同,则
kvdo
会更新其块映射,以便逻辑块指向相应的物理块,并释放分配的物理块。 -
如果 VDO 索引没有包含正在写入的块的签名的条目,或者指定的块实际上没有包含相同的数据,则
kvdo
会更新其块映射,以使临时物理块持久。
如果 kvdo
在异步(async
)模式下运行:
- 它将立即确认请求而不是写数据。
- 然后它会尝试使用与上述步骤相同的方法来去重块。
-
如果块是重复的,则
kvdo
会更新其块映射,并释放分配的块。否则,它会将请求中的数据写入分配的块,并更新块映射使物理块持久化。
36.2.4.3. 检查 VDO 卷中的写入模式 复制链接链接已复制到粘贴板!
此流程列出了所选 VDO 卷中的主动写入模式。
流程
使用以下命令查看 VDO 卷使用的写入模式:
vdo status --name=my-vdo
# vdo status --name=my-vdo
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出列表:
-
配置的写入策略,它是从
sync
、async
或auto
中选择的选项 -
写入策略,其是 VDO 应用的特定的写模式,即
sync
或async
-
配置的写入策略,它是从
36.2.4.4. 检查易变的缓存 复制链接链接已复制到粘贴板!
这个过程决定块设备是否有易变的缓存。您可以使用这些信息在 sync
和 async
VDO 写模式之间进行选择。
流程
使用以下方法之一确定某个设备是否有写回缓存:
阅读
/sys/block/block-device /device/scsi_disk/标识符/cache_type
sysfs
文件。例如:cat '/sys/block/sda/device/scsi_disk/7:0:0:0/cache_type' write back
$ cat '/sys/block/sda/device/scsi_disk/7:0:0:0/cache_type' write back
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat '/sys/block/sdb/device/scsi_disk/1:2:0:0/cache_type' None
$ cat '/sys/block/sdb/device/scsi_disk/1:2:0:0/cache_type' None
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 另外,你可以在内核引导日志中找到上述设备是否有写缓存:
sd 7:0:0:0: [sda] Write cache: enabled, read cache: enabled, does not support DPO or FUA sd 1:2:0:0: [sdb] Write cache: disabled, read cache: disabled, supports DPO and FUA
sd 7:0:0:0: [sda] Write cache: enabled, read cache: enabled, does not support DPO or FUA sd 1:2:0:0: [sdb] Write cache: disabled, read cache: disabled, supports DPO and FUA
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在上例中:
-
设备
sda
表示它 有 一个回写缓存。对其使用async
模式。 -
设备
sdb
表示 它没有 一个回写缓存。对其使用sync
模式。
如果
cache_type
的值是None
或writethrough
,您应该将 VDO 配置为使用sync
写模式。-
设备
36.2.4.5. 设置 VDO 写入模式 复制链接链接已复制到粘贴板!
此流程为 VDO 卷设置了写模式,可以是对现有卷,也可以是在创建新卷时。
使用不正确的写模式可能会在电源故障、系统崩溃或与磁盘意外失去联系后导致数据丢失。
先决条件
- 决定哪个写入模式适合您的设备。请参阅 第 36.2.4.4 节 “检查易变的缓存”。
流程
您可以在现有 VDO 卷上或创建新卷时设置写入模式:
要修改现有的 VDO 卷,请使用:
vdo changeWritePolicy --writePolicy=sync|async|async-unsafe|auto \ --name=vdo-name
# vdo changeWritePolicy --writePolicy=sync|async|async-unsafe|auto \ --name=vdo-name
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
要在创建 VDO 卷时指定写模式,请在
vdo create
命令中添加--writePolicy=sync|async|async-unsafe|auto
选项。
36.2.5. 在未清除关闭后恢复 VDO 卷 复制链接链接已复制到粘贴板!
您可以在不干净的关机后恢复 VDO 卷,使其可以继续运行。任务通常是自动的。另外,由于过程中的故障,您可以在 VDO 卷创建失败后进行清理。
36.2.5.1. VDO 写入模式 复制链接链接已复制到粘贴板!
VDO 支持以下写入模式:
同步
当 VDO 处于
sync
模式时,其上的层会假定写入命令将数据写入持久性存储。因此,文件系统或应用程序不需要发出 FLUSH 或强制单元访问(FUA)请求来使数据在关键点上变为持久。只有在底层的存储保证数据在写命令完成后写入持久性存储时,才必须将 VDO 设为
sync
模式。也就是说,存储必须没有易变的写缓存,或者不通过缓存进行写入操作。async
当 VDO 处于
async
模式时,VDO 不能保证在确认写命令时数据会被写入持久性存储。文件系统或应用程序必须发出 FLUSH 或 FUA 请求,来确保每次事务中数据在关键点上的持久性。如果底层存储不能保证在写命令完成后数据被写入到持久性存储,必须将 VDO 设为
async
模式;也就是说当存储具有易失性写回缓存时。async-unsafe
这个模式与
async
具有同样的属性,但它与原子性、一致性、隔离、持久性(ACID)不兼容。与async
相比,async-unsafe
具有更好的性能。警告当假设 ACID 合规的应用程序或文件系统在 VDO 卷上运行时,
sync-unsafe
模式可能会导致意外的数据丢失。auto
-
auto
模式根据每个设备的特性自动选择sync
或async
。这是默认选项。
36.2.5.2. VDO 卷恢复 复制链接链接已复制到粘贴板!
当在一个非干净的关闭后重启一个 VDO 卷时,VDO 会执行以下操作:
- 验证卷元数据的一致性。
- 重建一部分元数据以便在需要时进行修复。
重建是自动的,不需要用户干预。
VDO 可能会重建不同的写入模式,具体取决于活跃的写入模式:
同步
-
如果 VDO 在同步存储上运行,且写策略被设为
sync
,则写到卷的所有数据都可以被完全恢复。 async
-
如果写策略是
async
的,如果一些写不是持久化的,则它们可能无法被恢复。这可以通过发送 VDOFLUSH
命令或带有 FUA(强制单元访问)标记的写 I/O 来实现。您可以通过调用fsync
、fdatasync
、sync
或umount
等数据完整性操作来在用户模式下实现这一点。
在任何一种模式下,某些未被确认或未刷新的写也可能被重新构建。
自动和手动恢复
当 VDO 卷进入到 recovering
操作模式时,VDO 会在其重新上线后自动重建不干净的 VDO 卷。这叫做 在线恢复。
如果 VDO 无法成功恢复 VDO 卷,它会将卷置于只读
操作模式下,该模式在卷重新启动时仍然有效。您需要强制重新构建来手动解决这个问题。
36.2.5.3. VDO 操作模式 复制链接链接已复制到粘贴板!
本节介绍了指示 VDO 卷在正常运行的模式,或者是否从错误中恢复。
您可以使用 vdostats --verbose device
命令显示 VDO 卷的当前操作模式。请参阅输出中的 Operating mode 属性。
Normal
-
这是默认的操作模式。VDO 卷总是处于
常规
模式,除非以下状态之一强制使用不同的模式。新创建的 VDO 卷以正常
模式启动。 恢复
当 VDO 卷在关闭前不会保存其所有元数据时,它会在下次启动时自动进入
恢复
模式。进入这个模式的典型原因是电源丢失或者基础存储设备出现问题。在恢复
模式中,VDO 正在修复该设备中每个物理块的引用计数。恢复通常不需要非常长。时间取决于 VDO 卷的大小、基础存储设备的速度以及其它请求 VDO 同时处理的速度。VDO 卷通常具有以下例外:- 最初,在卷中写入请求的空间量可能会有所限制。当恢复了更多元数据后,更多的可用空间就会可用。
- 如果在恢复 VDO 卷时写入的数据,如果该数据位于还没有被恢复的卷的一部分,则在崩溃前写入的数据可能无法进行重复数据删除。VDO 可在恢复卷时压缩数据。您仍然可以读取或覆盖压缩的块。
- 在在线恢复过程中,某些统计数据不可用:例如,blocks in use 和 blocks free。重建完成后就可使用这些统计数据。
- 由于正在进行恢复工作,读取和写入的响应时间可能比通常要慢
您可以在
recovering
模式下安全地关闭 VDO 卷。如果恢复在关闭前没有完成,则设备将在下一次启动时再次进入recovering
模式。当 VDO 卷修复了所有引用数时,VDO 卷会自动退出
recovering
模式,并进入到normal
模式。不需要管理员操作。详情请查看 第 36.2.5.4 节 “在线恢复 VDO 卷”。read-only
当 VDO 卷遇到严重的内部错误时,它会进入
read-only
模式。可能导致read-only
模式的事件包括元数据崩溃或支持的存储设备变为只读。这个模式是一个错误状态。在
read-only
模式下,数据读取通常会正常进行,但数据写入会始终失败。VDO 卷会一直处于read-only
模式,直到管理员解决了问题。您可以在
read-only
模式下安全地关闭 VDO 卷。VDO 卷重启后通常会保留这个模式。在个别情况下,VDO 卷无法将read-only
状态记录到支持的存储设备中。在这种情况下,VDO 会尝试进行恢复。当一个卷处于只读模式后,就无法保证卷中的数据不会被丢失或损坏。在这种情况下,红帽建议从只读卷中复制数据,并可能从备份中恢复卷。
如果数据崩溃的风险可以接受,则可以强制离线重新构建 VDO 卷元数据,以便将该卷重新在线并可用。无法保证重建数据的完整性。详情请查看 第 36.2.5.5 节 “强制 VDO 卷元数据离线重建”。
36.2.5.4. 在线恢复 VDO 卷 复制链接链接已复制到粘贴板!
此流程在一个 VDO 卷上执行在线恢复,以在未清除关闭后恢复元数据。
流程
如果 VDO 卷还没有启动,请启动它:
vdo start --name=my-vdo
# vdo start --name=my-vdo
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 不需要额外的步骤。恢复在后台运行。
- 如果您依赖卷统计,比如 使用中的块 和块空闲,请等待这些数据可用。
36.2.5.5. 强制 VDO 卷元数据离线重建 复制链接链接已复制到粘贴板!
此流程对 VDO 卷元数据执行强制离线重新构建,以便在不干净的关闭后进行恢复。
此过程可能会导致卷的数据丢失。
先决条件
- 已启动 VDO 卷。
流程
检查卷是否处于只读模式。查看命令输出中的 操作模式 属性:
vdo status --name=my-vdo
# vdo status --name=my-vdo
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果卷不处于只读模式,则不需要强制离线重建。执行在线恢复,如 第 36.2.5.4 节 “在线恢复 VDO 卷” 中所述。
如果卷正在运行,请停止它:
vdo stop --name=my-vdo
# vdo stop --name=my-vdo
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
--forceRebuild
选项重启卷:vdo start --name=my-vdo --forceRebuild
# vdo start --name=my-vdo --forceRebuild
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
36.2.5.6. 删除失败创建的 VDO 卷 复制链接链接已复制到粘贴板!
此流程清理处于中间状态的 VDO 卷。如果在创建卷时发生故障,则卷处于中间状态。这可能会在以下情况发生,例如:
- 系统崩溃
- 电源失败
-
管理员中断了运行的
vdo create
命令
流程
要进行清理,请使用
--force
选项删除创建失败的卷:vdo remove --force --name=my-vdo
# vdo remove --force --name=my-vdo
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 需要
--force
选项,由于卷创建失败,管理员可能会由于更改了系统配置而导致冲突。如果没有
--force
选项,vdo remove
命令会失败,并显示以下信息:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
36.2.6. 优化 UDS 索引 复制链接链接已复制到粘贴板!
您可以配置特定的 UDS 索引设置以便在您的系统中优化它。
在创建 VDO 卷后,您无法更改 UDS 索引的属性。
36.2.6.1. VDO 卷的组件 复制链接链接已复制到粘贴板!
VDO 使用块设备作为后备存储,它包括由一个或多个磁盘、分区甚至平面文件组成的物理存储聚合。当存储管理工具创建 VDO 卷时,VDO 为 UDS 索引和 VDO 卷保留卷空间。UDS 索引和 VDO 卷会一起交互,以提供去重的块存储。
图 36.6. VDO 磁盘机构
VDO 解决方案包括以下组件:
kvdo
载入 Linux 设备映射器层的内核模块提供一个去重的、压缩的和精简配置的块存储卷。
kvdo
模块公开一个块设备。对于块存储,您可以直接访问块存储或通过 Linux 文件系统(如 XFS 或 ext4)呈现它。当
kvdo
收到一个读取 VDO 卷中数据的逻辑块的请求时,它会将请求的逻辑块映射到底层的物理块上,然后读取并返回请求的数据。当
kvdo
收到一个向 VDO 卷写数据块的请求时,它首先检查请求是 DISCARD 还是 TRIM 请求,或者数据是否统一为零。如果其中任何一个条件为真,则kvdo
会更新其块映射,并确认请求。否则,VDO 会处理并优化数据。uds
一个与卷上 Universal Deduplication Service(UDS)索引进行通信,并分析数据是否有重复的内核模块。对于每个新的数据,UDS 可以快速地判断该数据是否与之前存储的数据相同。如果索引发现匹配项,则存储系统可在内部引用现有项,以避免多次保存相同的信息。
UDS 索引作为
uds
内核模块运行在内核中。- 命令行工具
- 用于配置和管理优化的存储。
36.2.6.2. UDS 索引 复制链接链接已复制到粘贴板!
VDO 使用名为 UDS 的高性能去重索引来检测正在存储的重复的数据块。
UDS 索引提供了 VDO 产品的基础。对于每个新数据段,它会快速确定该数据段是否与之前存储的任何数据段相同。如果索引发现匹配项,则存储系统可在内部引用现有项,以避免多次保存相同的信息。
UDS 索引作为 uds
内核模块运行在内核中。
去重窗口 是索引记住的之前写入的块的数量。可配置的去重窗口的大小。对于给定的窗口大小,索引需要特定数量的 RAM 以及特定数量的磁盘空间。窗口的大小通常通过使用 --indexMem=size
选项指定索引内存的大小来决定。然后,VDO 决定自动使用的磁盘空间量。
UDS 索引由两个部分组成:
- 在内存中使用紧凑表示,每个唯一块最多包含一个条目。
- 记录在索引发生时的相关块名称的磁盘组件,按顺序记录。
UDS 在内存中平均每个条目使用 4 个字节,包括缓存。
磁盘上的组件维护传递给 UDS 的数据的相关历史记录。UDS 为属于这个去重窗口中的数据提供去重建议,其中包括最近看到的块的名称。去重窗口允许 UDS 尽可能高效地索引数据,同时限制索引大型数据存储库所需的内存量。尽管去重窗口具有局限性,但大部分具有高级去重的数据集也表现出高度的时间局部性 - 换句话说,大多数去重发生在几乎同时写入的块集合中。另外,通常要写入的数据通常可能会与最近写入的数据重复。因此,对于给定时间间隔的工作负载,去重比率通常相同,无论 UDS 仅索引了最新的数据还是所有数据。
由于重复数据往往会表现出时间局部性,因此很少需要对存储系统中的每个块进行索引。若非如此,索引内存的成本将超过去重所节省的存储成本。索引大小要求与数据刷新率紧密相关。例如,假设存储系统的总容量为 100 TB,但每周的摄取率为 1 TB 。使用 4TB 的去重窗口,UDS 可探测到上个月写入的数据的最大冗余。
36.2.6.3. 推荐的 UDS 索引配置 复制链接链接已复制到粘贴板!
本节介绍了根据您预期的用例,用于 UDS 索引的推荐选项。
通常,红帽建议在所有产品用例中使用 稀疏 UDS 索引。这是一个非常高效的索引数据结构,在其去重窗口中,每个块大约需要十分之一字节的 RAM 。在磁盘上,每个块大约需要 72 字节磁盘空间。这个索引的最小配置使用了 256 MB RAM,磁盘大约需要 25 GB 空间。
要使用此配置,请在 vdo create
命令中指定 --sparseIndex=enabled --indexMem=0.25
选项。这个配置会导致一个 2.5 TB 的去重窗口(也就是说它会记住 2.5 TB 的历史记录)。在大多数用例中,2.5 TB 的去重窗口适合用于大小高达 10 TB 的去重存储池。
但是,索引的默认配置是使用密度 索引。该索引在 RAM 中的效率要低得多(10 倍),但它需要最少的磁盘空间(也是 10 倍),这使其更便于在受限环境中进行评估。
通常,建议配置一个四分之一 VDO 卷物理大小的去重窗口。但这不是实际要求。即便是小的去重窗口(与物理存储量相比)也可以在许多用例中发现大量的重复数据。也可以使用较大的窗口,但多数情况下,这样做将无用。
36.2.7. 在 VDO 中启用或禁用去重 复制链接链接已复制到粘贴板!
在某些情况下,您可能希望临时禁用写入 VDO 卷的数据的去重,同时仍保留对卷的读写能力。禁用去重可防止后续写入操作被去重,但已经去重的数据会一直保留。
36.2.7.1. VDO 中的去重 复制链接链接已复制到粘贴板!
去重是通过删除重复块的多个副本来减少存储资源消耗的技术。
VDO 检测每个重复块,并将其记录为对原始块的引用,而不是多次写相同的数据。VDO 维护一个从逻辑块地址(由 VDO 上面的存储层使用)到物理块地址(被 VDO 下的存储层使用)的映射。
在进行去重后,可将多个逻辑块地址映射到相同的物理块地址。这些被称为共享块。块共享对存储用户是不可见的,用户会像 VDO 不存在一样读写块。
当共享块被覆盖时,VDO 为保存新块数据分配一个新的物理块,以确保映射到共享物理块的其他逻辑块地址不会被修改。
36.2.7.2. 在 VDO 卷上启用去重 复制链接链接已复制到粘贴板!
此流程重启关联的 UDS 索引,并通知 VDO 卷去重已再次激活。
去重被默认启用。
流程
要在 VDO 卷上重启去重,请使用以下命令:
vdo enableDeduplication --name=my-vdo
# vdo enableDeduplication --name=my-vdo
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
36.2.7.3. 在 VDO 卷上禁用去重 复制链接链接已复制到粘贴板!
此流程停止关联的 UDS 索引,并通知 VDO 卷去重不再处于活动状态。
流程
要在 VDO 卷上停止去重,请使用以下命令:
vdo disableDeduplication --name=my-vdo
# vdo disableDeduplication --name=my-vdo
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
您还可以通过在
vdo create
命令中添加--deduplication=disabled
选项,在创建新 VDO 卷时禁用去重。
36.2.8. 在 VDO 中启用或禁用压缩 复制链接链接已复制到粘贴板!
VDO 提供数据压缩。禁用它可以最大限度地提高性能,并加快不太可能压缩的数据的处理。重新启用它可以节省空间。
36.2.8.1. VDO 中的压缩 复制链接链接已复制到粘贴板!
除了块级去重外,VDO 还提供使用 HIOPS 压缩™ 技术的内联块级压缩。
VDO 卷压缩默认是 on。
虽然去重对虚拟机环境和备份应用程序是最佳解决方案,但压缩非常适合结构化和非结构化的文件格式,这些文件格式通常不会展示块级冗余,如日志文件和数据库。
压缩对未识别为重复的块进行操作。当 VDO 首次看到唯一数据时,它会压缩数据。已存储的数据的后续副本是去重的,而无需额外的压缩步骤。
压缩功能基于一种基于并行的打包算法,其允许一次处理许多压缩操作。在首先存储块并响应请求者后,最佳打包算法会找到多个块,当压缩时,这些块可以放入一个物理块中。确定特定的物理块不太可能保存其他压缩块后,它将被写入存储,并且未压缩块的被释放并被重复使用。
在已经响应请求者后执行压缩和打包操作,使用压缩会带来最小的延迟损失。
36.2.8.2. 在 VDO 卷中启用压缩 复制链接链接已复制到粘贴板!
此流程启用了 VDO 卷的压缩来提高空间节能。
默认启用压缩。
流程
要再次启动它,请使用以下命令:
vdo enableCompression --name=my-vdo
# vdo enableCompression --name=my-vdo
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
36.2.8.3. 禁用 VDO 卷上的压缩 复制链接链接已复制到粘贴板!
此流程停止 VDO 卷的压缩,以最大化性能或加快对数据进行压缩的速度。
流程
要停止在现有 VDO 卷中压缩,请使用以下命令:
vdo disableCompression --name=my-vdo
# vdo disableCompression --name=my-vdo
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
另外,在创建新卷时,您可以在
vdo create
命令中添加--compression=disabled
选项来禁用压缩。
36.2.9. 增大 VDO 卷的大小 复制链接链接已复制到粘贴板!
您可以增加 VDO 卷的物理大小,以利用更多的底层存储容量,或者增加逻辑大小以在卷上提供更多的容量。
36.2.9.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。
图 36.7. VDO 磁盘机构
在这个图表中,VDO 去重存储对象完全位于块设备之上,这意味着 VDO 卷的物理大小与基本块设备大小相同。
36.2.9.2. VDO 中的精简置备 复制链接链接已复制到粘贴板!
VDO 是一个精简配置的块存储目标。VDO 卷使用的物理空间量可能与为存储用户显示的卷大小有所不同。您可以使用它来节约存储成本。
没有可用空间条件
如果写入的数据没有达到预期的性能率,请小心会意外出现存储空间耗尽的问题。
每当逻辑块(虚拟存储)的数量超过物理块(实际存储)的数量时,文件系统和应用程序可能会意外地遇到没有存储空间的问题。因此,使用 VDO 的存储系统必须为您提供一个监控 VDO 卷中可用池大小的方法。
您可以使用 vdostats
工具来确定此空闲池的大小。这个工具的默认输出会列出所有运行 VDO 卷的信息,其格式与 Linux df
工具列出的格式类似。例如:
Device 1K-blocks Used Available Use% /dev/mapper/vdo-name 211812352 105906176 105906176 50%
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.
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 独有的。任何精简置备的存储系统也会遇到同样的问题。
36.2.9.3. 增大 VDO 卷的逻辑卷大小 复制链接链接已复制到粘贴板!
这个过程会增加给定 VDO 卷的逻辑大小。它允许您首先创建具有逻辑大小足够小的 VDO 卷,使其安全而无法耗尽空间。一段时间后,您可以评估实际的数据减少率,如果足够的话,您可以增大 VDO 卷的逻辑大小以利用节省的空间。
不可能缩小 VDO 卷的逻辑卷大小。
流程
要增大逻辑大小,请使用:
vdo growLogical --name=my-vdo \ --vdoLogicalSize=new-logical-size
# vdo growLogical --name=my-vdo \ --vdoLogicalSize=new-logical-size
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当逻辑卷增大时,VDO 会报告有新的大小卷上的任何设备或文件系统。
36.2.9.4. 增加 VDO 卷的物理大小 复制链接链接已复制到粘贴板!
此流程增加 VDO 卷可以使用的物理存储量。
不可能以这种方式缩小 VDO 卷。
先决条件
基础块设备的容量大于 VDO 卷的当前物理大小。
如果不是这样,您可以尝试增加设备的大小。确切的流程取决于设备的类型。例如:要调整 MBR 或 GPT 分区的大小,请参阅 管理存储设备 指南中的 重新调整分区大小 部分。
流程
为 VDO 卷添加新物理存储空间:
vdo growPhysical --name=my-vdo
# vdo growPhysical --name=my-vdo
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
36.2.10. 删除 VDO 卷 复制链接链接已复制到粘贴板!
您可以删除系统中的现有 VDO 卷。
36.2.10.1. 删除一个有效的 VDO 卷 复制链接链接已复制到粘贴板!
此流程移除 VDO 卷及其关联的 UDS 索引。
流程
- 卸载文件系统并停止使用 VDO 卷中的存储的应用程序。
要从您的系统中删除 VDO 卷,请使用:
vdo remove --name=my-vdo
# vdo remove --name=my-vdo
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
36.2.10.2. 删除失败创建的 VDO 卷 复制链接链接已复制到粘贴板!
此流程清理处于中间状态的 VDO 卷。如果在创建卷时发生故障,则卷处于中间状态。这可能会在以下情况发生,例如:
- 系统崩溃
- 电源失败
-
管理员中断了运行的
vdo create
命令
流程
要进行清理,请使用
--force
选项删除创建失败的卷:vdo remove --force --name=my-vdo
# vdo remove --force --name=my-vdo
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 需要
--force
选项,由于卷创建失败,管理员可能会由于更改了系统配置而导致冲突。如果没有
--force
选项,vdo remove
命令会失败,并显示以下信息:Copy to Clipboard Copied! Toggle word wrap Toggle overflow