82 个版本

新版本 0.34.4 2024 年 8 月 21 日
0.34.3 2024 年 7 月 23 日
0.34.2 2024 年 3 月 25 日
0.34.0 2023 年 10 月 24 日
0.2.1 2015 年 11 月 10 日

#55 in Unix API

Download history 1714/week @ 2024-05-04 1192/week @ 2024-05-11 962/week @ 2024-05-18 1088/week @ 2024-05-25 1413/week @ 2024-06-01 1025/week @ 2024-06-08 1323/week @ 2024-06-15 1425/week @ 2024-06-22 1238/week @ 2024-06-29 1502/week @ 2024-07-06 1658/week @ 2024-07-13 2470/week @ 2024-07-20 2518/week @ 2024-07-27 2481/week @ 2024-08-03 3266/week @ 2024-08-10 2717/week @ 2024-08-17

11,414 个月下载量
用于 2 crates

MPL-2.0 许可证

285KB
6K SLoC

devicemapper-rs

一个封装 Linux 的 devicemapper ioctls 的库(不使用 libdm)。

开发状态

BETA,功能完整但需要测试。

文档

API 文档.

Devicemapper 文档

如何贡献

GitHub 用于拉取请求和问题跟踪。

许可证

Mozilla 公共许可证 2.0


lib.rs:

运行内核的低级 devicemapper 配置。

概述

Linux 的 devicemapper 允许创建存储映射到其他块设备的块设备,通过更改其数据块的位置或对数据进行某些操作来实现。这是一个低级设施,被更高级的卷管理器(如 LVM2)使用。可能的应用包括:

  • 将大块设备划分为更小的逻辑卷(dm-linear)
  • 将多个独立的块设备组合成具有更好性能和/或冗余的单个块设备(dm-raid)
  • 加密块设备(dm-crypt)
  • 执行卷的块 Copy-on-Write(COW)分配,以实现快速卷克隆和快照(dm-thin)
  • 配置较小的、较快的块设备作为较大的、较慢的设备的缓存(dm-cache)
  • 验证只读卷的内容(dm-verity)

用法

在使用DM设备之前,必须使用DM::device_create()创建DM设备,使用DM::table_load()加载映射表,然后使用DM::device_suspend()激活设备。(此函数用于挂起和激活设备。)激活后,它们可以作为常规的块设备使用,包括其他DM设备映射到它们。

设备有“激活”和“非激活”映射表。请参阅函数描述以了解它们影响哪个表。

轮询事件

自DM次要版本37以来,首次在Linux内核4.14中可用,与DM上下文相关联的文件描述符可以轮询由DM设备生成的事件。

如果自fd打开以来或自DM::arm_poll()被调用以来有任何事件发生,fd将指示POLLIN。因此,为了确定哪些DM设备生成了事件,需要以下用法

  1. 创建一个DM
  2. 调用DM::list_devices()并跟踪任何感兴趣DM设备的event_nr
  3. 在通过调用DM::file().as_raw_fd()获得的DM的文件描述符上调用poll()
  4. 如果fd指示活动,则首先通过调用DM::arm_poll()清除事件。在事件处理之前必须这样做,以确保不会错过事件。
  5. 处理事件。再次调用DM::list_devices(),并将最近一次调用返回的event_nr与早期调用返回的event_nr值进行比较。如果event_nr不同,则特定设备上发生了事件。处理事件。更新最后看到的event_nr列表。
  6. 可选地循环并重新在fd上调用poll()以等待更多事件。

依赖项

~2.5–5.5MB
~103K SLoC