dm-era

简介

dm-era 是一个行为类似于线性目标的 Target。此外,它会跟踪在用户定义的时间段(称为“纪元”)内写入了哪些块。每个纪元 Target 实例都将当前纪元维护为一个单调递增的 32 位计数器。

用例包括为备份软件跟踪已更改的块,以及在回滚供应商快照后部分失效缓存内容以恢复缓存一致性。

构造函数

era <metadata dev> <origin dev> <block size>

元数据设备

用于存储持久元数据的快速设备

原始设备

用于存储可能更改的数据块的设备

块大小

原始数据设备的块大小,即 Target 跟踪的粒度

消息

所有 dm 消息都不带任何参数。

检查点

可能移动到一个新的纪元。您不应该假定纪元已递增。发送此消息后,您应该通过状态行检查当前纪元。

take_metadata_snap

创建元数据的克隆,以允许用户空间进程读取它。

drop_metadata_snap

删除元数据快照。

状态

<元数据块大小> <已用元数据块数>/<元数据块总数> <当前纪元> <持有的元数据根 | ‘-‘>

元数据块大小

每个元数据块的固定扇区块大小

已用元数据块数

已使用的元数据块数量

元数据块总数

元数据块总数量

当前纪元

当前纪元

持有的元数据根

元数据根的位置(以块为单位),该元数据根已被‘持有’以供用户空间读取访问。‘-’ 表示没有持有的根。

详细用例

在开发此 Target 时,回滚供应商快照时使缓存失效的场景是主要用例。

创建供应商快照

  • 向 era Target 发送检查点消息

  • 记录其状态行中的当前纪元

  • 创建供应商快照(纪元和快照现在应永久关联)。

回滚到供应商快照

  • 缓存进入直通模式(参见:dm-cache 在缓存中的文档)

  • 回滚供应商存储

  • 创建元数据快照

  • 通过检查每个块的纪元来确定自快照创建以来哪些块已被写入

  • 在缓存软件中使这些块失效

  • 缓存返回回写/直写模式

内存使用

该 Target 使用位集来记录当前纪元中的写入。它还准备了一个备用位集,以便切换到新纪元。除此之外,它使用少量 4k 块来更新元数据。

(4 * nr_blocks) bytes + buffers

弹性

在对先前未写入的块执行写入操作之前,元数据会在磁盘上更新。因此,dm-era 不会受到电源故障等硬崩溃的影响。

用户空间工具

用户空间工具可在命名越来越不佳的 thin-provisioning-tools 项目中找到