Device mapper

15.12.2020

Device mapper (dm) — подсистема (модуль) ядра Linux, позволяющая создавать виртуальные блочные устройства (ВБУ). При обращении к таким устройствам выполняется ряд действий, в число которых обычно входит чтение/запись данных с других блочных устройств (БУ). Подсистема используется для реализации менеджера логических томов LVM, программного RAID, системы шифрования дисков dm-crypt. Одной из возможностей подсистемы является создание снимков файловой системы.

Возможности dm также предоставляются одноимённой подсистемой ядра ОС DragonFly BSD. На этой странице описана реализация dm для ядра Linux.

Описание

Приложения (такие как lvm, EVMS, mdadm), работающие в пространстве пользователя, взаимодействуют с dm с помощью библиотеки libdevmapper.so. Библиотека использует системный вызов ioctl() для обращения к файлу устройства /dev/mapper/control. При обращении к этому устройству ядро вызывает подсистему dm. Подсистема dm работает в пространстве ядра, создаёт, изменяет и удаляет виртуальные блочные устройства (ВБУ) по запросам приложений. Утилита dmsetup позволяет управлять dm вручную из терминала или сценариев shell. Библиотека libdevmapper.so и команда dmsetup поддерживаются силами проекта LVM.

Клиентские приложения используют системные вызовы read()/write() (через библиотеки или напрямую) для чтения/записи данных с ВБУ. При этом ядро вызывает подсистему dm. Подсистема dm определяет тип ВБУ и выбирает соответствующие действия.

Типы виртуальных блочных устройств:

  • linear; запросы на чтение и запись к ВБУ перенаправляются к другому БУ; за одним ВБУ может скрываться одно или более БУ;
  • striped; при записи данные делятся на фрагменты; каждый фрагмент записывается на отдельное БУ; при чтении фрагменты считываются с нескольких БУ и объединяются;
  • mirror; «зеркало» (копия) БУ; при записи данные сохраняются одновременно на два или более БУ; при чтении данные считываются с главного БУ;
  • snapshot-origin; первый «снимок» БУ; запросы на чтение и запись обслуживаются также, как для ВБУ типа linear;
  • snapshot; второй и последующие «снимки» БУ; при записи данные сохраняются на БУ, созданное специально для хранения изменений; при чтении проверяется наличие изменений; если изменений нет, данные читаются из предыдущего «снимка»; если изменения имеются, данные считываются с БУ, хранящего изменения;
  • error; при чтении и записи всегда сообщается о ошибке; ВБУ такого типа используются для тестирования устойчивости ПО к сбоям дисковой подсистемы;
  • delay; аналог ВБУ типа linear, но чтение и запись выполняются с задержкой; ВБУ такого типа используются для тестирования;
  • flakey; аналог ВБУ типа linear, но операции чтения и записи периодически завершаются с ошибкой; ВБУ такого типа используются для тестирования;
  • zero; аналог устройства /dev/zero; при чтении возвращаются нулевые байты; при записи ничего не происходит;
  • multipath; при чтении и записи взаимодействие с одним и тем же БУ осуществляется посредством нескольких контроллеров по очереди; при поломке одного из контроллеров, используются оставшиеся контроллеры;
  • crypt; шифрование «на лету»; при записи данные шифруются, а при чтении расшифровываются с помощью crypto API ядра Linux;
  • cache; временное хранение данных одного БУ на другом (например, SSD может выступать в роли кеша HDD; локальное БУ может хранить данные, полученные с монтированного по сети БУ);
  • era; аналог ВБУ типа 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.

Имя:*
E-Mail:
Комментарий: