Device mapper (dm) — подсистема (модуль) ядра Linux, позволяющая создавать виртуальные блочные устройства (ВБУ). При обращении к таким устройствам выполняется ряд действий, в число которых обычно входит чтение/запись данных с других блочных устройств (БУ). Подсистема используется для реализации менеджера логических томов LVM, программного RAID, системы шифрования дисков dm-crypt. Одной из возможностей подсистемы является создание снимков файловой системы[1].
Возможности dm также предоставляются одноимённой подсистемой ядра ОС DragonFly BSD[2]. На этой странице описана реализация dm для ядра Linux.
Приложения (такие как lvm
, EVMS, mdadm
), работающие в пространстве пользователя, взаимодействуют с dm с помощью библиотеки libdevmapper.so
. Библиотека использует системный вызов ioctl()
для обращения к файлу устройства /dev/mapper/control
[3]. При обращении к этому устройству ядро вызывает подсистему dm. Подсистема dm работает в пространстве ядра, создаёт, изменяет и удаляет виртуальные блочные устройства (ВБУ) по запросам приложений. Утилита dmsetup
позволяет управлять dm вручную из терминала или сценариев shell[4][5]. Библиотека libdevmapper.so
и команда dmsetup
поддерживаются силами проекта LVM[6].
Клиентские приложения используют системные вызовы read()
/write()
(через библиотеки или напрямую) для чтения/записи данных с ВБУ. При этом ядро вызывает подсистему dm. Подсистема dm определяет тип ВБУ и выбирает соответствующие действия.