一、什么是devicemapper存储驱动
devicemapper是一个Linux内核模块,负责在linux系统中提供块设备接口,并在其上实现了镜像、快照、缓存等基于块存储的高级存储管理功能。它可以实现逻辑卷管理(LVM)、数据快照、以及块设备的缓存等功能,可被用于构建各种各样的存储解决方案。
dm区域通过抽象出块设备的概念,把每个卷组划分为pool。DM又对pool的操作抽象为DM target,它不仅定义了如何在底层磁盘上划分/映射pool,还指定了例如快照、缓存、镜像等等其他附加行为。
二、devicemapper的优点
devicemapper最大的优点就是提供灵活的存储管理服务。可以根据实际需求,自由组合LVM等功能和Docker特性来实现最佳的存储方案。
其次,devicemapper为了提升性能,引入了写时复制技术(Copy-on-Write, COW),使用基于块的存储方式,支持存储驱动的高速缓存技术,可以在其上实现各种高级特性。
三、devicemapper中的pool
dm_pool是devicemapper最基本的概念,它是一组底层块设备的存储池。每个池都由至少一个线性区组成。
线性区是由几个块设备连续排列组合而成的区域。pool中的块设备可以是单个物理磁盘或是一个RAID设备,甚至还可以是一个整个LVM组。pool的设计非常灵活,可以根据场景需求进行更改,从而获得更好的性能、可靠性和安全性。
四、devicemapper中的target
target是在存储池的基础之上,实现一些功能的扩展。DM模块定义了多种定制的target,例如线性区域、条带化和镜像等算法,可以根据不同情况的需要选择不同的target。
DM中还有一个特殊的target,称为thin-pool,它实现了一种基于位置映射表的块映射方案。thin pool是一个基于分配/释放块的方式,动态创建一个逻辑的空间池,在这个空间池中,不同的逻辑体积可以使用实际物理数据块创建出感觉像是真正逻辑物理盘的效果。
五、devicemapper存储驱动与Docker
devicemapper存储驱动是Docker的默认存储驱动。它通过存储池的方式来管理容器运行时的写时复制镜像和快照等操作。每个容器都创建了一个独立的thin pool,用来存储该容器的写时复制镜像和快照记录。
#使用devicemapper创建容器 $ docker run -d ubuntu /bin/bash
在Docker启用devicemapper存储驱动,使得Docker的容器共享同一个base image的镜像,同时也能够节省空间,并且能够快速启动容器。
六、devicemapper存储驱动的注意事项
对于使用devicemapper存储驱动的用户,需要注意以下几点:
1. 当存储池中空间不足时,需要手动增加存储空间。
2. 需要定期清理thin pool。
3. 建议选择使用新版本的 LVM 工具来管理存储,以便更好地支持存储池和 snapshot 等功能。
七、总结
devicemapper存储驱动是一个强大、灵活的存储管理方案,可以为用户提供高速缓存技术、实现写时复制等特性。在Docker中,devicemapper存储驱动为用户节省了存储空间,并且提供了快速启动容器的功能。