原力注入

存储知识拾遗:LVM && Device Mapper

微信公众号的推送文章不再按发布时间顺序排列,部分读者或许会受此影响,无法及时收到“原力注入”的推送文章。如果大家对本公众号的内容感兴趣,请将原力注入公众号设为“星标”。

Device Mapper 回顾

Device Mapper 是由 Linux 内核提供的一个框架,用于将物理块设备映射到更高级别的虚拟块设备。它是逻辑卷管理器(LVM)、软件 RAID 和 dm-crypt 磁盘加密的基础,并提供了其他功能,如文件系统快照。

Device Mapper 通过将数据从虚拟块设备(由 Device Mapper 本身提供)传递到另一个块设备来工作。数据在传输过程中还可以被修改。例如,在进行磁盘加密时,数据会在传输过程中进行加密;又如在模拟不可靠硬件行为时,数据可能会发生故障或丢失。

Device Mapper 的关键概念

Device Mapper 自 Linux 2.6 被引入,成为 Linux 系统中最重要的技术之一。它为内核提供了一种通用的逻辑卷管理机制,并为存储资源管理提供了块设备驱动的高度模块化架构。

Device Mapper 包含三个重要的概念:

1. Mapped Device

  • • 定义:Mapped Device 是一个逻辑抽象,可以理解为内核向外提供的逻辑设备。它通过 Mapping Table 描述的映射关系与物理设备建立联系。

  • • 功能:Mapped Device 为用户空间提供了一个虚拟设备,隐藏了物理设备的细节,并通过映射关系将其与实际的物理设备或其他虚拟设备相关联。

2. Mapping Table

  • • 定义:Mapping Table 是描述 Mapped Device 到 Target Device 的映射关系的表格。它定义了虚拟设备的逻辑块和物理设备的物理块之间的映射规则。

  • • 功能:通过 Mapping Table,内核可以知道如何将对 Mapped Device 的 I/O 操作转换为对 Target Device 的操作。这使得内核能够灵活地管理存储设备和文件系统。

3. Target Device

  • • 定义:Target Device 是 Mapped Device 映射到的实际物理设备或设备的逻辑表示。

  • • 功能:它是实际存储数据的设备或设备的部分。对于 Mapped Device 来说,Target Device 就是其映射的物理设备或存储空间段。

通过这三个核心概念,Device Mapper 提供了一种高效、灵活的方式来映射和管理存储设备。它通过虚拟化的方式,让用户和应用可以透明地管理不同类型的物理设备,同时在内核层面提供了对这些设备的统一访问接口。

Device Mapper 中的三个对象与 Target Driver 插件一起构成了一个可迭代的设备树。在这个树形结构中,顶层的根节点是最终作为逻辑设备对外提供的 Mapped Device,而叶子节点是表示底层物理设备的 Target Device。最简单的设备树由单个 Mapped Device 和对应的 Target Device 组成。

在 Device Mapper 中,一个 Mapped Device 可以映射到一个或多个 Target Device,而一个 Mapped Device 还可以作为上层 Mapped Device 的 Target Device 被使用。这个层次结构在理论上可以无限递归,因此 Device Mapper 架构可以支持深层次的设备映射和层级关系,灵活地组合和管理各种存储设备。

Image

主要映射目标

映射目标功能应用场景
cache允许使用 SSD 作为 HDD 的缓存,创建混合存储卷。提升存储性能,常用于提高磁盘 I/O 的响应速度。
clone在数据传输未完成之前允许使用目标设备。当设备复制或迁移期间需要访问数据时使用。
crypt提供磁盘加密功能,使用 Linux 内核的 Crypto API。加密存储设备和文件系统,保护敏感数据。
delay延迟读取和/或写入操作,通常用于测试。模拟网络延迟或硬件故障,测试容错能力。
era类似线性映射,跟踪在用户定义时间段内写入的块。数据恢复、分析,查看某段时间内的数据更改。
error模拟所有映射块的 I/O 错误。测试和调试,模拟磁盘损坏或其他硬件故障。
flakey模拟周期性的不可预知的行为,例如断电、硬件故障等。测试系统对不稳定设备的反应。
linear将连续块范围映射到另一个块设备。实现简单的块设备映射,合并多个硬盘或分区为一个虚拟设备。
mirror创建一个镜像逻辑设备,提供数据冗余。在 RAID 1 中创建数据镜像,确保数据的高可用性。
multipath支持多路径设备的映射,使用路径组。用于高可用性和冗余存储,确保数据路径的故障容错。
raid提供与 Linux 内核软件 RAID 驱动程序(md)的接口。创建 RAID 阵列,提高存储性能和冗余。
snapshot用于创建 LVM 快照,支持写时复制(COW)。提供增量备份,灾难恢复和版本控制。
striped将数据条带化分布到多个物理设备上,设置条带数量和块大小。提升磁盘读写性能,常用于 RAID 0 配置。
thin创建比物理设备更大的虚拟设备,物理空间仅在写入时分配。节省存储空间,支持逻辑卷超出实际物理容量。
zero类似 /dev/zero,所有读取操作返回零块,写入会被丢弃。用于测试或模拟虚拟设备,创建空设备。

Device Mapper 应用场景

  • • LVM(逻辑卷管理):Device Mapper 是 LVM 的核心,提供了更灵活的磁盘管理功能,包括卷扩展、缩减、快照等。

  • • RAID:通过 raid 目标,Device Mapper 可以实现软件 RAID 功能,支持多种 RAID 等级。

  • • 磁盘加密:使用 crypt 目标,Device Mapper 可以实现对磁盘或文件系统的加密,确保数据的安全性。

  • • 容灾与数据恢复:通过 snapshot 和 mirror 目标,Device Mapper 提供了高可用性和数据恢复方案。

  • • 性能优化:使用 cache 和 striped 目标,可以通过优化存储系统的访问方式来提高性能。

  • • 故障模拟与测试:通过 error、flakey 和 delay 等目标,Device Mapper 可用于测试系统的容错能力。

LVM 回顾

Linux 基础知识 - LVM 逻辑卷管理器介绍

存储进阶笔记(二):Linux 存储栈:从 Device Mapper、LVM 到文件系统(2024)

近日赵亚楠发表了一篇《存储进阶笔记(二):Linux 存储栈:从 Device Mapper、LVM 到文件系统(2024)》,里面的一张图非常好,推荐给大家。原文:https://arthurchiao.art/blog/storage-advanced-notes-2-zh/。

Image