Device mapper (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. 1 2 Администрирование LVM. Приложение A. Device mapper. Red Hat. Дата обращения: 29 сентября 2013. Архивировано 2 октября 2013 года.
  2. dm(4). DragonFly on-line manual pages. dragonflybsd.org (28 июля 2010). Дата обращения: 6 июня 2014. Архивировано 23 апреля 2015 года.
  3. libdevmapper.h. sourceware.org. Дата обращения: 29 сентября 2013. (недоступная ссылка)
  4. 1 2 dmsetup(8) - Linux man page. man.cx. Дата обращения: 22 октября 2013. Архивировано 4 марта 2016 года.
  5. Администрирование LVM. Приложение A.2. Команда dmsetup. Red Hat. Дата обращения: 29 сентября 2013. Архивировано 2 октября 2013 года.
  6. Device-mapper resource page. sourceware.org. Дата обращения: 29 сентября 2013. Архивировано 7 октября 2013 года.
  7. Petros Koutoupis. Advanced hard drive caching techniques. Журнал «Linux journal» (25 ноября 2013). Дата обращения: 2 декабря 2013. Архивировано 2 декабря 2013 года.
  8. dm-cache: dynamic block-level storage caching. Florida international university. Дата обращения: 24 июля 2014. Архивировано из оригинала 18 июля 2014 года.
  9. Dulcardo Arteaga; Douglas Otstott; Ming Zhao.: Dynamic block-level cache management for cloud computing systems (pdf). Florida international university. Дата обращения: 2 декабря 2013. Архивировано из оригинала 3 декабря 2013 года.
  10. 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  (англ.)