linux-kernel - Linux内核中的dm和md有什么区别?

标签 linux-kernel

Linux 内核中的 dm (dmsetup) 和 md (mdadm) 模块有什么区别? [两者似乎都是逻辑卷管理器] 哦,是的,还有 lvm (lvm)。这一切有什么区别?

最佳答案

医学博士 是多个设备。它是自内核版本 2.0 以来可用的 Linux 内核中的 RAID 实现。它允许您创建 RAID 级别 0、10、4、5 和 6。它具有各种优化,例如利用 SSE 和 MMX 指令。它是 Linux 中的标准软件 RAID。

私信是设备映射器。它是一个 Linux 内核框架,允许您将一个设备映射到另一个设备(一个或多个)。这相当于创建您可以在/dev/mapper 目录中访问的虚拟设备(映射设备)。该设备的所有 I/O 都将映射到其他设备。使用设备映射器的原因是在很多情况下您需要映射设备,但您希望重用代码。

有几个驱动程序(称为 dm 目标)使用设备映射器,例如:

  • dm-linear - 将一个设备线性映射到另一个设备。这意味着您的新设备将通过一些 LBA 转换将 I/O 请求转换为底层设备。例如,当您从/dev/mapper/linear 在 LBA 1000 处读取时,您的读取将在/dev/sdd 的 LBA 1050 处完成。
  • dm-stripe - 将一个设备映射到多个设备,如 RAID 0。

  • dm-stripe 和 md RAID level 0 之间的区别并不大——只是实现方式不同,但我相信 md RAID 具有更好的性能。

    最后, lvm 是在 linux 上提供逻辑卷管理工具的用户空间工具集。它使用设备映射器将卷组和逻辑卷映射到物理设备。

    还有一个特别令人困惑的案例——dm-raid ,您可以阅读 here

    关于linux-kernel - Linux内核中的dm和md有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23164384/

    相关文章:

    linux - 来自内核模块的调试堆栈

    c - 如何编写Linux内核模块用于与arduino的串行通信?

    c - Linux内核中的ptrace在哪里?

    git - 向邮件列表提交庞大的补丁集

    linux - 在 TI OMAP 3530 上插入适用于旧文件系统的 Linux 模块

    c - 在内核模块中使用脉宽调制 (PWM) 接口(interface)

    c - 为什么我的设备驱动程序不打印我输入的内容

    linux - ARMv8 中设备内存的定义是什么?

    与设备通信的 Linux 程序

    c - 内核模块中缺少键盘中断