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
11,414 个月下载量
用于 2 crates
285KB
6K SLoC
devicemapper-rs
一个封装 Linux 的 devicemapper ioctls 的库(不使用 libdm)。
开发状态
BETA,功能完整但需要测试。
文档
如何贡献
GitHub 用于拉取请求和问题跟踪。
许可证
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设备生成了事件,需要以下用法
- 创建一个
DM
。 - 调用
DM::list_devices()
并跟踪任何感兴趣DM设备的event_nr
。 - 在通过调用
DM::file().as_raw_fd()
获得的DM
的文件描述符上调用poll()
。 - 如果fd指示活动,则首先通过调用
DM::arm_poll()
清除事件。在事件处理之前必须这样做,以确保不会错过事件。 - 处理事件。再次调用
DM::list_devices()
,并将最近一次调用返回的event_nr
与早期调用返回的event_nr
值进行比较。如果event_nr
不同,则特定设备上发生了事件。处理事件。更新最后看到的event_nr
列表。 - 可选地循环并重新在fd上调用
poll()
以等待更多事件。
依赖项
~2.5–5.5MB
~103K SLoC