Менеджер логических томов LVM [204.3]

Рейтинг: 71.7% · 16 голосов
Курс LPIC-2 (201-450 и 202-450): емкостное планирование, ядро, хранилище и RAID/LVM, продвинутая сеть, DNS/BIND, Apache/Nginx, Samba/NFS, DHCP/LDAP, почта, безопасность и VPN.
Ответить
Аватара пользователя
Sergey_Sysadmin
Сообщения: 134
Зарегистрирован: 11 май 2026, 05:31

Менеджер логических томов LVM [204.3]

Сообщение Sergey_Sysadmin »

Оглавление курса (41)
  1. Введение в LPIC-2 и уровень инженера
  2. Измерение и устранение проблем с ресурсами [200.1]
  3. Прогнозирование потребности в ресурсах
  4. Компоненты ядра Linux [201.1]
  5. Сборка ядра из исходников [201.2]
  6. Управление модулями ядра в рантайме [201.3]
  7. Кастомизация запуска системы [202.1]
  8. Восстановление системы [202.2]
  9. Альтернативные загрузчики [202.3]
  10. Работа с файловой системой Linux [203.1]
  11. Обслуживание файловых систем [203.2]
  12. Создание и настройка опций ФС [203.3]
  13. Программный RAID [204.1]
  14. Тюнинг доступа к устройствам хранения [204.2]
  15. Менеджер логических томов LVM [204.3] (вы здесь)
  16. Базовая конфигурация сети [205.1]
  17. Продвинутая конфигурация сети [205.2]
  18. Диагностика сетевых проблем [205.3]
  19. Сборка и установка программ из исходников [206.1]
  20. Резервное копирование [206.2]
  21. Оповещение пользователей о событиях
  22. DNS-сервер BIND: базовая настройка [207.1]
  23. Зоны DNS: создание и сопровождение [207.2]
  24. Безопасность DNS-сервера [207.3]
  25. Веб-сервер Apache: базовая настройка [208.1]
  26. Apache и HTTPS [208.2]
  27. Кэширующий прокси Squid [208.3]
  28. Веб-сервер и обратный прокси Nginx [208.4]
  29. Файловый сервер Samba [209.1]
  30. Файловый сервер NFS [209.2]
  31. DHCP-сервер [210.1]
  32. Аутентификация PAM и SSSD [210.2]
  33. Использование LDAP-клиента
  34. Сервер OpenLDAP [210.4]
  35. Почтовый сервер Postfix [211.1]
  36. Управление доставкой почты и Sieve [211.2]
  37. Доступ к почтовым ящикам: Dovecot [211.3]
  38. Linux как маршрутизатор и фильтр [212.1]
  39. FTP-серверы [212.2]
  40. SSH углублённо [212.3]
  41. Безопасность, IDS и VPN [212.4 + 212.5]
Урок 14. Менеджер логических томов LVM [204.3]

Раздел на диске - вещь жёсткая: его край прибит гвоздями к геометрии устройства, и расширить раздел в середине диска, не тронув соседей, почти невозможно. LVM решает ровно эту боль администратора: он вставляет между физическими дисками и файловой системой слой абстракции, в котором место становится текучим. Том можно нарастить на лету, перенести данные с умирающего диска на новый без остановки сервиса, снять мгновенный снимок для бэкапа и раздать тонким клиентам больше места, чем есть физически. В этом уроке разбираем все три этажа LVM, операции resize и pvmove, снапшоты, thin-пулы и связку LVM с RAID.

Изображение

Как это работает

LVM состоит из трёх уровней, и держать их в голове - половина успеха. Внизу физические тома (PV) - это диски или разделы, которые вы отдали под LVM командой pvcreate. Она пишет в начало устройства метку и область метаданных, после чего диск перестаёт быть обычным разделом и становится сырьём для пула.

Несколько PV объединяются в группу томов (VG) - это общий котёл свободного места. Внутри VG всё пространство нарезано на одинаковые кусочки - физические экстенты (PE), по умолчанию 4 мегабайта. Именно экстент - атом, которым LVM ворочает место. Когда вы создаёте логический том (LV), вы просто говорите группе: дай мне столько-то экстентов, а LVM сам решает, с каких физических дисков их взять. Поэтому один LV может лежать кусками на трёх дисках сразу, и вам это безразлично.

Логический том - это и есть блочное устройство, на котором живёт файловая система. Оно появляется как /dev/имяVG/имяLV (и дублем как /dev/mapper/имяVG-имяLV), потому что под капотом LVM использует device-mapper - подсистему ядра, которая строит виртуальные блочные устройства поверх реальных. Гибкость растёт отсюда: добавили в VG новый диск - в котле прибавилось экстентов, и любой том можно ими накормить, не перетряхивая таблицу разделов.

Снапшот - это особый LV, который ловит образ другого тома на момент создания. Работает он по принципу copy-on-write: пока в исходном томе ничего не меняется, снимок занимает почти ноль места и просто ссылается на оригинал. Как только в оригинал пишут блок, старое его содержимое сначала копируется в область снапшота. Поэтому снимок надо делать с запасом места под изменения и жить ему отведено недолго - под бэкап, а не навсегда.

Тонкое выделение (thin) переворачивает логику: thin-пул выделяет блоки не при создании тома, а только когда в него реально пишут. Можно создать десять томов по 100 ГБ поверх пула в 200 ГБ - это оверкоммит, и он удобен, пока вы следите за заполнением пула. Переполнится физический пул - и все тонкие тома встанут.

Команды и примеры

Пакет называется по-разному, но команды одни и те же:

Код: Выделить всё

# Debian/Ubuntu
sudo apt install lvm2
# RHEL/Fedora
sudo dnf install lvm2
Соберём стек снизу вверх из двух дисков:

Код: Выделить всё

sudo pvcreate /dev/sdb /dev/sdc      # пометить диски как PV
sudo vgcreate data /dev/sdb /dev/sdc # группа data из двух PV
sudo lvcreate -L 20G -n web data     # том web на 20 ГБ
sudo mkfs.ext4 /dev/data/web         # ФС поверх тома
sudo mount /dev/data/web /srv/web
Осмотр на трёх уровнях - команды pvs/vgs/lvs (кратко) и pvdisplay/vgdisplay/lvdisplay (подробно):

Код: Выделить всё

sudo pvs            # PV, их VG и свободное место
sudo vgs            # группы, размер, свободно
sudo lvs -a -o +devices  # тома и на каких PV они лежат
Расширение тома - самая частая операция. Порядок строгий: сперва том, потом файловая система. Ключ -r у lvextend делает оба шага разом:

Код: Выделить всё

sudo lvextend -L +10G -r /dev/data/web   # +10 ГБ и resize ФС
# вручную, если без -r:
sudo lvextend -L +10G /dev/data/web
sudo resize2fs /dev/data/web             # ext4
sudo xfs_growfs /srv/web                 # XFS (по точке монтирования)
XFS умеет только расти. Сжатие возможно лишь для ext4 и в обратном порядке: сначала ужать ФС, потом том. Делается на размонтированном томе:

Код: Выделить всё

sudo umount /srv/web
sudo e2fsck -f /dev/data/web
sudo resize2fs /dev/data/web 12G
sudo lvreduce -L 12G /dev/data/web
Эвакуация данных с диска без остановки - команда pvmove перетаскивает экстенты на другие PV в группе, после чего диск можно вынуть:

Код: Выделить всё

sudo pvmove /dev/sdb        # увести всё с sdb на свободные PV
sudo vgreduce data /dev/sdb # выкинуть пустой PV из группы
sudo pvremove /dev/sdb
Снапшот под бэкап и его откат:

Код: Выделить всё

sudo lvcreate -s -L 5G -n web_snap /dev/data/web  # снимок
sudo mount -o ro /dev/data/web_snap /mnt          # читаем согласованно
# ... сняли tar/rsync, дальше либо удалить, либо откатить:
sudo lvconvert --merge /dev/data/web_snap         # вернуть том в момент снимка
Thin-пул и тонкие тома (оверкоммит виден сразу):

Код: Выделить всё

sudo lvcreate -L 50G -T data/pool          # thin-пул 50 ГБ
sudo lvcreate -V 100G -T data/pool -n vm1  # тонкий том 100 ГБ
sudo lvs -o +data_percent data              # следить за заполнением пула
LVM умеет сам собирать RAID без mdadm - тип задаётся ключом --type:

Код: Выделить всё

sudo lvcreate --type raid1 -m1 -L 10G -n mirror data   # зеркало на 2 PV
sudo lvcreate --type raid5 -L 20G -n parity data       # нужно 3+ PV
Частые грабли
  • Расширили том, а места в ФС не прибавилось: lvextend растит блочное устройство, но не файловую систему. Без ключа -r или ручного resize2fs/xfs_growfs вы расширили пустоту.
  • Сжатие в неверном порядке = потеря данных. Том нельзя ужимать раньше ФС: lvreduce обрежет блоки, которые ФС ещё считает своими. Всегда сначала resize2fs, потом lvreduce, и лучше через -r у lvreduce.
  • XFS не сжимается вообще. Если на томе XFS, единственный путь уменьшить - бэкап, пересоздание тома, восстановление.
  • Снапшот переполнился и умер. Если изменений в оригинале больше, чем размер снимка, снапшот помечается invalid и становится мусором. Под нагрузкой давайте ему достаточный объём.
  • Забыли про мониторинг thin-пула. Оверкоммит молчит до момента, когда физический пул заполнен на 100 процентов - тогда все тонкие тома разом получают ошибки записи. Включайте автоматическое расширение (thin_pool_autoextend в lvm.conf).
  • pvremove до pvmove. Если выдернуть диск, на котором ещё лежат экстенты живого тома, том разваливается. Сначала pvmove, проверка lvs, и только потом vgreduce/pvremove.
  • Снапшот забыли удалить. Старый снимок продолжает копировать в себя каждое изменение оригинала и тормозит запись, пока не лопнет или не отъест всё место в VG.
Мини-лаба
  • Добавьте на стенд два чистых диска (или два loop-устройства через truncate -s 2G и losetup). Сделайте из них PV командой pvcreate и проверьте pvs.
  • Создайте группу lab из обоих PV (vgcreate) и в ней том app на 1 ГБ, отформатируйте в ext4 и смонтируйте.
  • Расширьте том на 500 МБ командой lvextend с ключом -r и подтвердите df -h, что место реально прибавилось в ФС.
  • Снимите снапшот тома app, измените файл в оригинале, затем откатите том на снимок через lvconvert --merge и убедитесь, что изменение исчезло.
  • Командой pvmove уведите все данные с первого PV на второй, проверьте lvs -o +devices, затем выкиньте опустевший PV из группы (vgreduce).
  • Создайте thin-пул на 1 ГБ и поверх него тонкий том на 5 ГБ. Через lvs -o +data_percent посмотрите, сколько пула занято на самом деле.
Контрольные вопросы
  • Назовите три уровня LVM снизу вверх и команду создания на каждом. Что такое физический экстент и зачем он нужен?
  • В каком порядке выполняются операции при расширении и при сжатии тома и почему порядок противоположный? Что делает ключ -r?
  • Как перенести данные с умирающего диска на новый, не размонтируя файловую систему? Какие команды и в каком порядке?
  • Объясните принцип copy-on-write у снапшота LVM. Почему снимок может стать invalid и от чего зависит, сколько места ему дать?
  • Что такое оверкоммит в thin-пуле и какая опасность с ним связана? Как от неё защититься?
  • Чем XFS отличается от ext4 в контексте изменения размера тома?
👍4 ❤️4 🔥 😄 🤔4
Аватара пользователя
trousertrout
Сообщения: 1
Зарегистрирован: 18 май 2026, 05:35

Re: Менеджер логических томов LVM [204.3]

Сообщение trousertrout »

а thin-пул сам может расшириться когда забивается, или это только руками lvextend? боюсь что ночью все тома встанут и я не увижу
👍 ❤️ 🔥1 😄 🤔
Аватара пользователя
toxicghost
Сообщения: 1
Зарегистрирован: 11 май 2026, 03:31

Re: Менеджер логических томов LVM [204.3]

Сообщение toxicghost »

проверил на стенде: xfs_growfs реально только растёт, ужать не дал. пришлось сносить том и заливать из бэкапа, как в граблях и написано
👍 ❤️ 🔥 😄 🤔
Ответить
← Предыдущая глава
Тюнинг доступа к устройствам хранения [204.2]
Следующая глава →
Базовая конфигурация сети [205.1]

Все главы курса «LPIC-2: инженер Linux (201 + 202)»

Поделиться темой: ✈ Telegram VK

Вернуться в «LPIC-2: инженер Linux»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость