Диски в Linux: Основы LVM - Logical Volume Management, Менеджер логических томов от In-Linux на Rutube•LiST
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 - логика работы
- Берем несколько физических дисков/разделов, по факту - любых блочных устройств - 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 $