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  (англ.)

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.