LVM в Linux: полное руководство для новичков

LVM в Linux: полное руководство для новичков

Если когда-нибудь приходилось кропотливо передвигать границы разделов на диске, сжимая один и стараясь не повредить соседний, то вы уже знаете, где рождается страх администратора. LVM создан как противоядие от этого ужаса: он прячет грубую механику разделов за аккуратным уровнем абстракции и даёт гибкий «пул» пространства, из которого можно спокойно вырезать логические тома, менять их размер и монтировать куда удобно. В этом материале мы не только разберём концепции, но и развернём маленькую лабораторию, где без риска потренируемся на реальных командах.

Что такое LVM и зачем он нужен

Идея, которая экономит нервы

LVM — это Logical Volume Manager, подсистема управления хранилищем, которая предлагает альтернативу классическим разделам. Вместо того чтобы жёстко делить диск на куски и потом сожалеть о выбранных размерах, вы объединяете носители в общий объём, а затем создаёте логические тома нужной ёмкости прямо поверх этого пула. Когда одна из файловых систем внезапно «выросла», том можно расширить без акробатики с разметкой.

Главная ценность LVM — гибкость. Вы можете добавлять новые устройства, расширять группу томов, быстро перераспределять доступное место и поддерживать аккуратную структуру точек монтирования. Абстракции снимают боль там, где у классических разделов заканчивается комфорт, а риск ошибок только начинается.

Есть нюанс с загрузкой системы: /boot традиционно держат вне логического тома, потому что загрузчики не всегда читают LVM. Самый распространённый GRUB умеет жить рядом с LVM, однако надёжнее оставить /boot на отдельном простом разделе с форматом vfat или ext2/ext4. systemd-boot читает только vfat и тоже не станет вытаскивать ядро из логического тома — это стоит иметь в виду при планировании.

Архитектура: PV, VG и LV без заумных слов

В LVM всё крутится вокруг трёх сущностей. Physical Volume (PV) — это «строительный кирпич», то есть реальное устройство или раздел, который мы инициализировали для LVM. Volume Group (VG) — общий бассейн, куда складываются такие кирпичи; объём группы равен сумме доступных физических томов. Logical Volume (LV) — тот самый «раздел нового времени», который создаётся внутри группы и затем форматируется в ext4, XFS или что угодно, после чего монтируется как обычно.

Если провести аналогию с классической разметкой, LV напоминает раздел, а VG — это условный «диск», только гибкий и расширяемый. PV прямого аналога не имеет: это подготовленная для LVM поверхность, которой может быть целый диск или его часть. Вся магия масштабирования происходит именно между PV и VG, а конечный пользователь работает с LV как с привычным блочным устройством.

Подготовка лаборатории: Vagrant + VirtualBox

Лучше всего учиться на практике, но без риска для рабочих данных. Поэтому соберём мини-стенд в виртуальной машине. В качестве базы подойдёт Vagrant с провайдером VirtualBox: он быстро поднимает окружение и так же быстро его уничтожает после экспериментов. Мы создадим ВМ с несколькими дополнительными дисками по 5 ГБ, чтобы имитировать независимые носители.

Создайте каталог и положите туда файл Vagrantfile со следующим содержимым. Он разворачивает Ubuntu 20.04 и добавляет три диска:

Vagrant.configure "2" do |config| config.vm.box = "ubuntu/focal64" config.vm.hostname = "lvm" 3.times {|i| config.vm.disk :disk, size: "5GB", name: "drive-#{i}"} config.vm.provider :virtualbox do |machine| machine.memory = 1024 machine.cpus = 1 machine.customize ["modifyvm", :id, "--cpuexecutioncap", "50"] end end # vi: set ft=ruby 

Перед запуском установите Vagrant и VirtualBox, затем включите экспериментальную поддержку дисков и поднимите машину из каталога с Vagrantfile:

export VAGRANT_EXPERIMENTAL=disks vagrant up vagrant ssh 

Внутри гостя убедитесь, что дополнительные устройства видны системе. Команда lsblk -o name,size,fstype покажет список; в нашем примере мы увидим базовый диск sda с корневым разделом и три «чистых» диска sdc, sdd, sde, на которых и будем тренироваться. Закончив, вернитесь в каталог проекта и аккуратно уничтожьте ВМ командой vagrant destroy, чтобы не оставлять хвостов.

Физические тома (PV): инициализация, инвентаризация, очистка

Первый шаг в LVM — подготовить носители. PV — это поверхность, с которой менеджер будет работать дальше. Инициализация выполняется командой pvcreate и занимает секунды. На этом этапе мы ничего не форматируем «под файловую систему», мы лишь помечаем устройство как пригодное для объединения в группу томов.

Для демонстрации возьмём чистый диск /dev/sdc и превратим его в PV одной командой: sudo pvcreate /dev/sdc. Утилита запишет служебную метку и вернёт подтверждение. После этого можно заняться /dev/sdd: разделим его пополам любым удобным инструментом — fdisk, cfdisk или parted — и инициализируем обе половины одним вызовом: sudo pvcreate /dev/sdd1 /dev/sdd2.

Инвентаризация проводится утилитами pvscan, pvs и pvdisplay. Первая быстро подсчитывает суммарную ёмкость и показывает, какие устройства ещё никуда не включены. Вторая выводит компактную таблицу с размерами и свободным пространством. Третья раскрывает полную карточку каждого PV с UUID, количеством физических экстентов и статусом выделения. Этого достаточно, чтобы понять, чем уже можно оперировать.

Иногда требуется «обнулить» подготовку и вернуть устройство к исходному состоянию. Для этого служит pvremove, который стирает LVM-метки на выбранном носителе. Команда уместна, когда вы передумали включать раздел в группу или собираетесь заново разметить диск по другой схеме.

Важное предупреждение: все действия с PV потенциально разрушительны для находящихся там данных. В лаборатории ошибки простительны, в продакшене — нет. Если устройство уже находится в группе и поддерживает активные логические тома, очистка через pvremove не пройдёт: сначала придётся корректно переместить данные и исключить носитель из пула.

Группы томов (VG): пулы, расширение, сокращение, удаление

Группа томов — это суммарный бассейн, куда складываются подготовленные PV. Создание происходит командой vgcreate: сначала имя будущего пула, затем список физических томов. Например, sudo vgcreate lvm_tutorial /dev/sdc /dev/sdd1 соберёт два устройства в единое пространство. С этого момента свободная ёмкость VG равна сумме доступных блоков на входящих PV, с учётом служебных экстентов.

Проверять состояние удобно через три знакомых имени: vgs, vgscan и vgdisplay. Короткий отчёт vgs покажет число физических и логических томов, общий размер и остаток незанятого места. vgscan подтверждает наличие пула в системе, а подробный vgdisplay раскрывает параметры экстентов и текущую последовательность метаданных. Этого набора достаточно для быстрой диагностики.

Хорошая новость: группы масштабируются на лету. Добавить носители в пул поможет vgextend. Если вы ранее удалили LVM-метку с раздела, расширение само переинициализирует устройство и включит его в состав. Команда вида sudo vgextend lvm_tutorial /dev/sdd2 увеличит общий объём VG и подготовит почву для роста логических томов.

Иногда требуется, наоборот, уменьшить пул, вытащив из него одно или несколько устройств. Это задача для vgreduce. Однако тут есть важное условие: на исключаемом PV не должно оставаться выделенных экстентов, принадлежащих каким-то LV. Если они есть, сперва выполняют миграцию данных командой pvmove, и только затем сокращают группу. Такой порядок сохраняет целостность и избавляет от простоев.

Список устройств, входящих в конкретную VG, удобно извлечь через фильтры: sudo pvdisplay -S vgname=lvm_tutorial -C -o pv_name перечислит задействованные носители. Аналогично можно быстро получить их количество или объём свободного места. Эти короткие команды помогают автоматизировать процедуры обслуживания и контролировать состояние пула в скриптах.

Полное удаление группы выполняется vgremove, но применять её стоит только после того, как все логические тома деактивированы и стерты. Иначе утилита просто откажется работать. В лаборатории можно смело экспериментировать, в рабочей среде — следовать чёткому чек-листу: размонтировать, отключить сервисы, деактивировать LV, удалить LV, сократить VG, очистить PV.

Логические тома (LV): создание, файловые системы, монтирование, изменение размера, удаление

Логический том — главный объект ежедневной работы. На уровне операционной системы он выглядит как обычное блочное устройство по пути /dev/<VG>/<LV>, которое можно форматировать, проверять и монтировать как привычный раздел. Создание происходит командой lvcreate, где указывается размер и имя, а также базовая группа, из которой берутся экстенты.

Простой пример: sudo lvcreate -L 5G -n lv1 lvm_tutorial выделит пятигигабайтный том внутри пула lvm_tutorial. Дальше — обычная рутина: форматируем в ext4 через sudo mkfs.ext4 /dev/lvm_tutorial/lv1 и монтируем в систему, например, командой sudo mount -t ext4 /dev/lvm_tutorial/lv1 /mnt. С этого момента каталог /mnt получает собственную файловую систему, а любые операции внутри идут поверх LV.

Состояние логических томов удобно смотреть утилитами lvs и lvdisplay. Первая выдаёт компактную таблицу с размерами, атрибутами и объёмом свободных экстентов. Вторая показывает развёрнутую метаинформацию, включая путь к устройству и статус. Для массовых проверок подойдут селекторы и вывод отдельных колонок; так проще склеивать командные цепочки.

Сильная сторона LVM — динамическое изменение размеров. Увеличить том можно через lvextend или универсальную lvresize. Подход с «плюсом» указывает добавочный объём, а не итоговый размер. Например, sudo lvresize -L +2G lvm_tutorial/lv1 расширит существующий том на 2 ГБ. Далее необходимо подогнать файловую систему: для ext4 это sudo resize2fs /dev/lvm_tutorial/lv1. На современных системах ext4 и XFS умеют расширяться «на горячую», то есть без размонтирования.

Уменьшение требует аккуратности. Здесь порядок обратный: вначале сокращаем файловую систему специализированным инструментом (для ext4 — resize2fs с указанием меньшего размера и предварительным снятием точки монтирования), затем уменьшаем сам LV через lvreduce или lvresize с «минусом». Нарушение последовательности чревато потерей данных, поэтому на боевых системах обязательно делают резервные копии и проверяют наличие свободного места для переносов.

Удаление логического тома предельно прямолинейно: размонтировать, убедиться в отсутствии открытых файлов, затем выполнить sudo lvremove lvm_tutorial/lv1 и подтвердить действие. LVM очистит метаданные и вернёт экстенты в пул группы, откуда их можно будет выдать другим томам. Такой цикл позволяет держать систему в порядке, не накапливая «мертвых» объёмов.

Частый вопрос — какие файловые системы выбирать. Для большинства сценариев достаточно ext4: она надёжна, знакома и дружит с горячим расширением. XFS отлично чувствует себя на крупных объёмах и под интенсивной нагрузкой, но уменьшать её сложно. btrfs умеет собственные снапшоты и RAID-режимы, однако в связке с LVM требует продуманной схемы, чтобы фичи не конфликтовали. В учебной среде лучше остановиться на ext4 и сосредоточиться на логике LVM.

Ещё один практический момент: следите за свободным местом не только в группе, но и в самих файловых системах. Комбинируйте vgs для оценки пула и df -h для монтированного каталога, чтобы не упустить ситуацию, когда LV уже расширен, а файловая система ещё не подросла или наоборот.

В завершение хочется оставить одну простую мысль: LVM — это не «магия ради магии», а способ вернуть контроль над дисковым пространством без стрессовых операций с разметкой. Мы разобрали базовые сущности, собрали лабораторию, подготовили физические тома, сформировали группу и поработали с логическим объёмом — от создания до изменения размеров и удаления. Дальше у вас останется сыграть собственную «партию»: добавить ещё один диск, расширить пул, потренироваться с переносом экстентов и отточить рутину до автоматизма. Когда в следующий раз одна из служб потребует пару гигабайт «прямо сейчас», вы просто добавите их командой и спокойно вернётесь к делам.

Linux LVM VirtualBox инструкция код компьютер монтирование ошибки практика технологии том
Alt text
Обращаем внимание, что все материалы в этом блоге представляют личное мнение их авторов. Редакция SecurityLab.ru не несет ответственности за точность, полноту и достоверность опубликованных данных. Вся информация предоставлена «как есть» и может не соответствовать официальной позиции компании.

Выстройте непробиваемый щит против угроз
всего за 30 минут!

Проверьте уровень вашей безопасности вместе с SECURITM на воркшопе
9 октября 2025.

Реклама. Рекламодатель СЕКЪЮРИТМ ООО, ИНН 7820074059. 18+


Комнатный Блогер

Объясняю новую цифровую реальность