Раньше я проводил довольно много собеседований на позицию системного администратора. Особенно мне нравилось общаться с junior админами, которых жизнь еще не одарила ни опытом, ни депрессией.
Каждый раз было интересно, как они представляют себе работу linux админа, чем он, по их мнению, должен заниматься каждый день.
Если вдуматься, самим linux мы не занимаемся на постоянной основе, мы просто разбираемся в нем, знаем, как он работает. А вот каждый день мы проводим за настройкой приложений, за написанием скриптов и за отладкой каких-либо ошибок.
Администратор linux не обязан знать все способы разметки дисков. Но может, если хочет. Дальше вы сами знаете.
Мы уже расписывали то, как устроены жесткие диски, как собираются raid массивы. Настало время поговорить о логических томах - самом популярном способе разметки в виртуальных машинах.
Поговорим о LVM
LVM (Logical Volume Manager) — это система управления логическими томами в Linux, предоставляющая гибкий механизм работы с дисковым пространством. В отличие от традиционного разбиения на разделы, LVM позволяет абстрагироваться от физических носителей и создавать виртуальные хранилища, которые можно динамически изменять без перезагрузки системы.
Преимущества LVM:
- Гибкость изменения размеров — можно увеличивать или уменьшать логические тома
- Объединение нескольких дисков — создание единого пула хранения
- Снимки (snapshots) — возможность создания моментальных копий томов
- Миграция данных — перенос томов между физическими дисками
- Избыточность — поддержка RAID-подобных конфигураций
Архитектура LVM
1. Физические тома (Physical Volumes - PV)
- Базовые блоки хранения (диски или разделы)
- Инициализируются командой pvcreate
2. Группы томов (Volume Groups - VG)
- Пулы хранения, объединяющие физические тома
- Создаются командой vgcreate
- Из VG выделяется пространство для логических томов
3. Логические тома (Logical Volumes - LV)
- Виртуальные разделы, используемые системой
- Создаются командой lvcreate
- Форматируются файловыми системами (ext4, xfs и т.д.)
Работа с LVM
Для примера я создал новую виртуальную машину с LVM разметкой дисков.
Основной диск /dev/vda уже размечен, созданы LVM разделы для рутовой директории, для swap и для /home
Также, мы видим, что все разделы уже имеют файловую систему и примонтированы:
С помощью гипервизора я добавлю в нашу виртуальную машину еще два диска размером по 20 ГБ каждый (/dev/vdb и /dev/vdc). На этих дисках пока что нет ни разделов, ни файловых систем.
Создание логических томов
Итак, еще раз вкратце по теории: логический том состоит из групп томов, которые в себя включают физические тома (не путать с дисками).
Физический том можно создать как из раздела на диске, так и из всего диска целиком.
- Создадим из наших дополнительных дисков физические тома:
pvcreate /dev/vdb
pvcreate /dev/vdc
- Теперь из первого тома создадим группу с именем "vg-group"
- И сразу же расширим ее, добавив еще один том
vgcreate vg-group /dev/vdb
vgextend vg-group /dev/vdc
Данное действие было не обязательно, можно создавать группу сразу из нескольких томов.
- Создадим логический том с именем "lvm-volume" и размером 10 Gb
lvcreate -n lvm-volume -L 10G vg-group
Данная команда создаст логический диск /dev/vg-group/lvm-volume
- Теперь создадим на полученном томе файловую систему, чтобы можно было монтировать его в нужную нам директорию:
- Создаем директорию и монтируем в нее наше новое логическое устройство:
Изменение логических томов
В прошлых шагах мы создали группу томов размером в 40 GB, но использовали только 10 из них.
- Проверим это:
В нашей volume group занято 10 GB и свободно еще 30 GB.
Размер LVM тома - ровно 10 GB.
Поскольку наш том lvm-volume состоит из группы томов vg-group, мы можем без проблем дальше брать дисковое пространство из него.
- Расширим наш том еще на 10 GB:
Размер тома стал равен 20 GB
Но система будет дальше определять его как 10 GB:
Данная картина наблюдается из-за того, что мы еще не расширили файловую систему на нашем томе, и не уведомили об этом ядро.
- Расширяем ФС на нашем томе:
В случае, если нужно уменьшить логический том, операции проводятся в обратном порядке:
- Отмонтируем том и уменьшаем файловую систему до 5 GB:
- Уменьшим наш логический том до 5 GB:
- Монтируем и проверяем:
Удаление диска из LVM
Та самая ситуация, которая вряд ли когда-нибудь случится, но готовым быть нужно.
Если мы просто удалим физический том из группы томов, мы с вероятностью 100% поломаем файловую систему и данные на нашем логическом томе.
- Чтобы безопасно извлечь наш физический том, нужно сначала дать команду LVM перенести все данные с него, полностью освободив:
Важно: у вас должно быть достаточно места на volume group, чтобы данные точно перенеслись (должен оставаться минимум еще один размер извлекаемого тома)
- Удаляем физический том из группы томов:
- Проверяем:
Команды для управления LVM:
# Просмотр информации
pvdisplay # Информация о физических томах
vgdisplay # Информация о группах томов
lvdisplay # Информация о логических томах
# Создание новых томов
pvcreate /dev/vdb # Создать PV из диска
vgcreate vg-data /dev/vdb # Создать VG
lvcreate -n lv-data -L 5G vg-data # Создать LV размером 5G
mkfs.ext4 /dev/vg-data/lv-data # Форматировать в ext4
# Изменение размеров
lvextend -L +2G /dev/vg-debian/lv-home # Увеличить том на 2G
resize2fs /dev/vg-debian/lv-home # Изменить файловую систему
lvreduce -L -1G /dev/vg-debian/lv-home # Уменьшить том на 1G
# Внимание: перед уменьшением нужно уменьшить файловую систему!
# Добавление нового диска в существующую VG
pvcreate /dev/vdc
vgextend vg-debian /dev/vdc
# Миграция данных с одного PV на другой
pvmove /dev/vdb /dev/vdc
# Удаление диска из VG
vgreduce vg-debian /dev/vdc