Device mapper
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 определяет тип ВБУ и выбирает соответствующие действия.
Типы виртуальных блочных устройств[1][4]:
- linear; запросы на чтение и запись к ВБУ перенаправляются к другому БУ; за одним ВБУ может скрываться одно или более БУ;
- striped; при записи данные делятся на фрагменты; каждый фрагмент записывается на отдельное БУ; при чтении фрагменты считываются с нескольких БУ и объединяются;
- mirror; «зеркало» (копия) БУ; при записи данные сохраняются одновременно на два или более БУ; при чтении данные считываются с главного БУ;
- snapshot-origin; первый «снимок» БУ; запросы на чтение и запись обслуживаются также, как для ВБУ типа linear;
- snapshot; второй и последующие «снимки» БУ; при записи данные сохраняются на БУ, созданное специально для хранения изменений; при чтении проверяется наличие изменений; если изменений нет, данные читаются из предыдущего «снимка»; если изменения имеются, данные считываются с БУ, хранящего изменения;
- error; при чтении и записи всегда сообщается о ошибке; ВБУ такого типа используются для тестирования устойчивости ПО к сбоям дисковой подсистемы;
- delay; аналог ВБУ типа linear, но чтение и запись выполняются с задержкой; ВБУ такого типа используются для тестирования;
- flakey; аналог ВБУ типа linear, но операции чтения и записи периодически завершаются с ошибкой; ВБУ такого типа используются для тестирования;
- zero; аналог устройства /dev/zero; при чтении возвращаются нулевые байты; при записи ничего не происходит;
- multipath; при чтении и записи взаимодействие с одним и тем же БУ осуществляется посредством нескольких контроллеров по очереди; при поломке одного из контроллеров, используются оставшиеся контроллеры;
- crypt; шифрование «на лету»; при записи данные шифруются, а при чтении расшифровываются с помощью crypto API ядра Linux;
- cache; временное хранение данных одного БУ на другом (например, SSD может выступать в роли кеша HDD[7]; локальное БУ может хранить данные, полученные с монтированного по сети БУ[8][9]);
- era[10]; аналог ВБУ типа linear, но с отслеживанием блоков, читаемых и записываемых в указанное время;
- raid; запросы к этому ВБУ перенаправляются модулю md ядра Linux, реализующему программный RAID.
Применения
Возможности device mapper используются в следующих проектах:
- LVM — менеджер логических томов;
- en:dm-crypt — компонент ядра Linux для шифрования разделов;
- en:dm-cache — компонент ядра Linux для кеширования данных;
- dm-verity — компонент Chrome OS для проверки целостности файловой системы;
- dmraid — симулятор RAID;
- dm multipath — компонент ядра Linux для обеспечения отказоустойчивости и распределения нагрузки на БУ;
- TrueCrypt (версия для ОС Linux) — система для шифрования разделов;
- DRBD — сетевое блочное устройство;
- kpartx — утилита, вызываемая hotplug, для создания и удаления таблиц разделов БУ;
- EVMS (deprecated);
- en:cryptoloop (deprecated);
- Docker — программа для виртуализации процессов на уровне ОС; dm используется при запуске контейнеров для создания БУ copy-on-write.
Примечания
- ↑ 1,0 1,1 Администрирование LVM . Приложение A. Device mapper. Red Hat. Дата обращения: 29 сентября 2013. Архивировано 2 октября 2013 года.
- ↑ dm(4) . DragonFly on-line manual pages. dragonflybsd.org (28 июля 2010). Дата обращения: 6 июня 2014. Архивировано 23 апреля 2015 года.
- ↑ libdevmapper.h . sourceware.org. Дата обращения: 29 сентября 2013. (недоступная ссылка)
- ↑ 4,0 4,1 dmsetup(8) - Linux man page . man.cx. Дата обращения: 22 октября 2013. Архивировано 4 марта 2016 года.
- ↑ Администрирование LVM . Приложение A.2. Команда dmsetup. Red Hat. Дата обращения: 29 сентября 2013. Архивировано 2 октября 2013 года.
- ↑ Device-mapper resource page . sourceware.org. Дата обращения: 29 сентября 2013. Архивировано 7 октября 2013 года.
- ↑ Petros Koutoupis. Advanced hard drive caching techniques . Журнал «Linux journal» (25 ноября 2013). Дата обращения: 2 декабря 2013. Архивировано 2 декабря 2013 года.
- ↑ dm-cache: dynamic block-level storage caching (недоступная ссылка). Florida international university. Дата обращения: 24 июля 2014. Архивировано 18 июля 2014 года.
- ↑ Dulcardo Arteaga; Douglas Otstott; Ming Zhao. Dynamic block-level cache management for cloud computing systems (pdf) (недоступная ссылка). Florida international university. Дата обращения: 2 декабря 2013. Архивировано 3 декабря 2013 года.
- ↑ 6. Block layer . Linux kernel 3.15. kernelnewbies.org (8 июня 2014). Дата обращения: 15 июня 2014. Архивировано 11 июня 2018 года.
Ссылки
- Device mapper на сайте Red Hat (англ.)
- Right to your own devices . Журнал «Linux gazette» (Май 2005). Статья описывает применение разных типов виртуальных блочных устройств (англ.)
- DmRaid — инструмент для симуляции программного RAID (англ.)
- Multipath support in the device mapper, 2005 - Статья LWN о поддержке multipath подсистемой device mapper (англ.)