LVM - Logical Volume Management

  • LVM (Logical Volume Management) - Менеджер логических томов

Специальная подсистема ядра Linux (и OS/2), позволяющая гибко управлять местом на дисковой подсистеме

  • Своего рода виртуализация дисков
  • LVM2 реализована с помощью подсистемы device mapper - так же как и Software RAID (mdadm), dm-crypt/LUKS
    • подсистема (модуль) ядра Linux, позволяющая создавать виртуальные блочные устройства (ВБУ).

Задачи LVM

  • Рекомендуется выносить на отдельные разделы определенные каталоги
    • с пользовательскими/общесистемными данными и т.п.
    • /var /srv /home
    • т.к. перенос данных, резервное сохранение, защита системы от нехватки свободного места из-за действий пользователя и т.п.
  • Но, как только последуешь этой рекомендации
    • Вопрос: сколько места выделять
    • Много: неэффективное использование места
    • Мало: место кончится и потом переносить данные
  • LVM позволяет (логические тома вместо разделов)
    • использовать разные области одного жёсткого диска и/или области с разных жёстких дисков как один логический том;
    • распределять место между логическими томами из общего пула (VG)
    • изменять размеры- увеличивать/уменьшать логические тома c ФС на них по-необходимости
    • добавлять в систему и задействовать дополнительные разделы и/или накопители без переноса/переустановки и т.п. системы;
    • без перезагрузки/перемонтирования - производим необходимые изменения на-лету (если позволяет ФС)
    • выделять томам минимально необходимый размер и держать горячий резерв

Схема работы LVM

lvm.png

LVM - логика работы

  • Берем несколько физических дисков/разделов, по факту - любых блочных устройств - Physical Volumes
  • объединяем место на выбранных физических дисках/разделах в т.н. Volume Group
  • Это место (VG) делится на набор блоков - экстентов (по умолчанию 4MB)
  • Из экстентов формируем логические тома - Logical Volumes - новые блочные устройства
  • Форматируем/монтируем тома
  • При необходимости экстенты перераспределяются между томами
  • Информация о конфигурации LVM хранится в метаданных PV устройств - т.е. не требуется настройка через конфигурационные файлы, при подключении дисков к другой системе конфигурация считывается и т.п.

Установка

  • Debian
$ apt-get install lvm2

Physical Volumes (PV) - утилиты pv*

  • Любые существующие блочные устройства (разделы/диски) описываются в конфигурации LVM как PV
$ pvcreate <device>
$ pvremove <device>
$ pvdisplay [device]

Volume Group (VG) - утилиты vg*

  • Посредством VG объединяется доступное пространство на PV
$ vgcreate <vg> <device1> <device2>
$ vgremove <vg>
$ vgdisplay [vg]
$ vgextend <vg>

Logical Volumes (LV) - утилиты lv*

  • Создаются внутри VG, являются верхними абстракциями
  • Физически могут распределяться по нескольким физическим устройствам
$ lvcreate -L <size> -n <name> <vg>
$ lvremove <name>
$ lvdisplay [name]
$ lvextend <params>

Создание логических томов

  • Создание разделов на жестких дисках (или берем диск целиком)
$ fdisk

тип 8e

  • Создание PV из раздела/диска
$ pvcreate /dev/sda1
  • Создание VG из PV
$ vgcreate vg01 /dev/sda1 /dev/sda2
  • Создание LV из VG
$ lvcreate -L 2G -n lv_home vg01
  • Форматирование созданного LV, как обычного блочного устройства
$ mkfs.ext4 /dev/vg01/lv_home
  • Монтирование LV
$ mount /dev/vg01/lv_home /home

внесение в /etc/fstab

Просмотр конфигурации LVM

  • Просмотр конфигурации PV
$ pvdisplay
$ pvdisplay /dev/sda1
$ pvs
  • Просмотр конфигурации VG
$ vgdisplay
$ vgdisplay /dev/vg01
$ vgs
  • Просмотр конфигурации LV
$ lvdisplay
$ lvdisplay /dev/vg01/lv_home
$ lvs

Изменение размера LV

  • Подразумевает 2 операции:
    • Изменяем размер LV
    • Перестраиваем ФС под новый размер - специфично для ФС
  • В большинстве случаев может производится онлайн (без отмонтирования ФС, остановки служб и т.п.)
  • При изменении размера в LV добавляются/освобождаются экстенты
  • Экстенты могут добавляться из любого незанятого участка VG
  • Если нет свободных экстентов - можем добавить в VG новые диски/разделы и тогда увеличивать LV

  • Два возможных варианта.
  • Обе операции за раз - утилита lvresize
$ lvresize -r -L +1G /dev/vg01/lv_home
  • Или последовательно lvextend/lvreduce и затем resize2fs или соответствующая утилита используемой файловой системы
$ lvextend -L 3G /dev/vg01/lv_home
$ resize2fs /dev/vg01/lv_home