- 我们想法:
- 能不能将多个硬盘,映射成一个逻辑的硬盘,那样我们程序就不用关心复杂的地址问题了,也不用关系是哪个device了? DM-raid技术RAID全称为独立磁盘冗余阵列(Redundant Array of Independent Disks)
- 将某个地址段的数据进行加密,只有授权方式才可访问,比如FDE。 DM-crypt技术
- 访问存储介质上的数据时,校验下是否被篡改过。DM-verity技术。
总结一下:DM就是Device-Mapper的缩写,也就说上述的想法都可以基于Device Mapper实现,Device Mapper可不仅仅实现了这些,还包括LVM2、DM-multipach等。
- 什么是Device Mapper?
- Device Mapper是 Linux 2.6内核中提供的一种将物理块设备的映射虚拟(逻辑)块设备的框架机制,在该机制下,开发者可以很方便的根据自己的需要制定实现存储资源的管理策略,比如过滤、IO重定向、dm-verity这种hash tree的校验、raid多个磁盘管理等。
- Device Mapper在内核中是以一个块设备注册的。映射到Device Mapper框架上的物理设备,通过映射时所选择的方式进行IO处理。
- Device mapper本质功能就是根据映射关系和target driver描述的IO处理规则,将IO请求从逻辑设备mapped device转发相应的target device上。
举例:我将system分区以dm-verity target方式映射到devicemapper上,当用户程序访问system数据时,要通过device mapper的规则后才能转发到system分区上。
Device Mapper处于LinuxStorage Stack位置:
简单点:
- 理论部分:
Device Mapper在内核中的体系架构:
从上图就可以看出,Device Mapper有三部分组成,分别有Mapped Device、Mapping Table、Target Device,说此图的时候必须说一下内核设计的哲学,内核设计经常将一个框架实现,给用户态提供尽量少、简单接口来下发策略,内核根据用户态下发策略运行相应机制。Device Mapper机制也不例外:
Mapped Device:又称MD,注意不是DM,MD是一个逻辑的抽象设备,用户态可以通过IOCTL访问操作,它通过Mapping Table描述的映射关系与Target Device建立映射关系。