EUR
european

EUR

usa

USD

Russian Ru
Ex. VAT Ex. VAT 0%

Работа с LVM

LVM (Logical Volume Manager) — это система управления дисками, которая добавляет уровень абстракции поверх физического хранилища. Она позволяет гибко распределять дисковое пространство, изменять его размер без остановки системы и создавать резервные копии на основе снимков. LVM широко используется в качестве уровня хранения для виртуализации. На зашифрованных системах LVM часто размещается поверх устройства, зашифрованного с помощью LUKS, поэтому после одной разблокировки становится доступна вся группа томов.

В этой статье рассматриваются установка LVM в Linux, создание физических томов, групп томов и логических томов, изменение их размеров, работа со снимками и использование thin provisioning.

Установка LVM

LVM по умолчанию включён в большинство дистрибутивов Linux. Если он отсутствует, установите пакет lvm2 с помощью системного менеджера пакетов.

В Debian и Ubuntu:

sudo apt-get install lvm2

В RHEL, CentOS Stream, AlmaLinux и Rocky Linux:

sudo dnf install lvm2

Создание физического тома

Физический том (PV) — это базовый строительный блок LVM. В качестве него может использоваться целый диск (например, /dev/sdb) или отдельный раздел (например, /dev/sdb1).

Info

Использование целого диска в качестве PV упрощает последующее изменение размера, поскольку сначала не требуется увеличивать расположенный под ним раздел. Использование раздела предпочтительно, если на диске также должны размещаться данные, не связанные с LVM, или если другие инструменты системы ожидают наличие таблицы разделов.

Создайте физический том с помощью pvcreate:

sudo pvcreate /dev/sdb

Замените /dev/sdb путём к вашему блочному устройству.

Проверьте результат с помощью pvdisplay:

sudo pvdisplay

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

Создание группы томов

Группа томов (VG) объединяет один или несколько физических томов в единый пул хранилища. Из этого пула создаются логические тома.

Создайте группу томов с именем vg0 из одного физического тома:

sudo vgcreate vg0 /dev/sdb

Или сразу из нескольких физических томов:

sudo vgcreate vg0 /dev/sdb /dev/sdc

Проверьте результат с помощью vgdisplay:

sudo vgdisplay

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

Логический том (LV) отображается в системе как обычное блочное устройство. Его можно отформатировать файловой системой и смонтировать.

Создайте логический том lv0 размером 10 ГБ внутри группы томов vg0:

sudo lvcreate -n lv0 -L 10G vg0

Флаг -n задаёт имя логического тома, а -L — его размер.

Проверьте результат с помощью lvdisplay:

sudo lvdisplay

Создайте файловую систему на логическом томе:

sudo mkfs.ext4 /dev/vg0/lv0

Создайте точку монтирования и подключите файловую систему:

sudo mkdir -p /mnt/lv0 sudo mount /dev/vg0/lv0 /mnt/lv0

Новая файловая система теперь доступна в /mnt/lv0. Чтобы автоматически монтировать её при загрузке, добавьте соответствующую запись в /etc/fstab.

Info

LVM предоставляет каждый логический том по двум эквивалентным путям: /dev/<vg>/<lv> и /dev/mapper/<vg>-<lv>. Для приведённого выше примера это /dev/vg0/lv0 и /dev/mapper/vg0-lv0. Оба пути указывают на одно и то же устройство; инструменты и конфигурационные файлы могут использовать любой из них.

Чтобы увидеть полную иерархию PV/VG/LV вместе с обычными блочными устройствами, выполните:

lsblk

Изменение размеров томов

LVM поддерживает изменение размера в работающей системе на каждом уровне: физических томов, групп томов и логических томов.

pvresize обновляет представление LVM о физическом томе после изменения размера underlying блочного устройства (например, после увеличения виртуального диска в гипервизоре):

sudo pvresize /dev/sdb

vgextend добавляет физический том в существующую группу томов, увеличивая её размер:

sudo vgextend vg0 /dev/sdc

vgreduce удаляет физический том из группы томов:

sudo vgreduce vg0 /dev/sdc

lvresize изменяет размер логического тома. Например, чтобы добавить 5 ГБ к lv0:

sudo lvresize -L +5G /dev/vg0/lv0

Или чтобы расширить логический том на всё свободное место в группе томов:

sudo lvresize -l +100%FREE /dev/vg0/lv0

Info

Обратите внимание на разницу между -L (заглавная буква) и -l (строчная буква). Заглавная версия принимает размер с суффиксом единицы измерения, например M, G или T. Строчная версия принимает количество экстентов или процент.

Изменение размера логического тома не изменяет размер файловой системы на нём. Используйте соответствующий инструмент для конкретной файловой системы. Для ext2, ext3 и ext4:

sudo resize2fs /dev/vg0/lv0

Для XFS выполните xfs_growfs для точки монтирования файловой системы.

Для поддерживаемых файловых систем, включая ext4 и XFS, команда lvextend с флагом -r изменяет размер логического тома и файловой системы за один шаг:

sudo lvextend -r -L +5G /dev/vg0/lv0

Это наиболее распространённый способ онлайн-увеличения размера.

Warning

Уменьшение логического тома выполняется в обратном порядке: сначала необходимо уменьшить файловую систему и только после этого логический том. Если сделать наоборот, базовое устройство будет обрезано в то время, когда файловая система всё ещё считает, что имеет исходный размер, что приводит к уничтожению данных. Для ext4 операция выполняется офлайн. Размонтируйте файловую систему, выполните sudo e2fsck -f /dev/vg0/lv0, уменьшите файловую систему с помощью sudo resize2fs /dev/vg0/lv0 <new_size>, уменьшите логический том до того же размера с помощью sudo lvresize -L <new_size> /dev/vg0/lv0, а затем снова смонтируйте файловую систему. XFS вообще не поддерживает уменьшение размера; единственный способ сделать файловую систему XFS меньше — создать резервную копию, создать файловую систему меньшего размера и восстановить данные.

Каждая из приведённых выше команд поддерживает параметр --help для получения полного списка опций.

Снимки LVM

Снимок фиксирует состояние логического тома в определённый момент времени. Он работает по принципу copy-on-write: по мере изменения исходного логического тома изменённые блоки сохраняются в зарезервированном пространстве снимка, поэтому снимок продолжает отображать исходное состояние.

Снимки полезны для создания согласованных сбоевой точкой резервных копий работающей файловой системы и для тестирования изменений, которые можно отменить удалением снимка. Для создания согласованных с приложением резервных копий требуется дополнительная координация, например заморозка файловой системы или перевод приложения в состояние ожидания перед созданием снимка.

Создание снимка

Создайте снимок с помощью lvcreate и флага -s:

sudo lvcreate -L 1G -s -n myvolume_snap /dev/myvg/myvolume

Эта команда создаёт снимок myvolume_snap логического тома myvolume в группе томов myvg, резервируя 1 ГБ для изменений. Выбирайте размер зарезервированного пространства в зависимости от ожидаемого объёма изменений в течение срока существования снимка: для почти не изменяющихся томов требуется немного места, а для активно записываемых томов может потребоваться значительная часть исходного размера.

Для долгоживущих снимков и сценариев, где используется много снимков, рассмотрите возможность использования thin-снимков внутри thin pool. Они получают пространство из общего пула по мере необходимости вместо предварительного резервирования фиксированного объёма, что обычно более эффективно с точки зрения использования пространства.

Warning

Если исходный логический том изменится сильнее, чем способен вместить снимок, снимок станет недействительным, а захваченные им данные будут потеряны. Размер снимка должен соответствовать ожидаемому объёму изменений за время его существования.

Использование снимка

Снимок можно смонтировать как обычный логический том. Для резервного копирования и проверки рекомендуется монтировать его только для чтения, если запись действительно не требуется:

sudo mkdir -p /mnt/snapshot sudo mount -o ro /dev/myvg/myvolume_snap /mnt/snapshot

После монтирования снимок можно использовать для чтения, резервного копирования или проверки данных.

Удаление снимка

Когда снимок больше не нужен, удалите его с помощью lvremove:

sudo lvremove /dev/myvg/myvolume_snap

Удаление снимка освобождает зарезервированное им пространство. Все данные, записанные непосредственно в сам снимок, а не в исходный том, будут потеряны.

Чтобы откатить исходный том к состоянию, сохранённому в снимке, используйте lvconvert --merge вместо lvremove:

sudo lvconvert --merge /dev/myvg/myvolume_snap

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

Thin provisioning

Thin pool — это особый тип логического тома, который выделяет хранилище по мере необходимости. Логические тома, созданные внутри него (thin volumes), могут иметь заявленный размер, превышающий фактически свободное пространство пула, при этом реально выделенное место расходуется только для записанных блоков.

Эта технология широко используется в виртуализации, где множество виртуальных дисков используют один общий пул хранения, но редко одновременно достигают заявленной ёмкости.

Создание thin pool

Создайте thin pool mythinpool размером 50 ГБ в группе томов myvg:

sudo lvcreate -L 50G -T -n mythinpool myvg

Флаг -L задаёт размер пула, -T указывает lvcreate создать thin pool, а -n задаёт имя пула. LVM выделяет пространство для пула из свободного места группы томов; в конце команды можно указать конкретные физические тома, если пул необходимо разместить на определённых устройствах.

Создание thin volume

Создайте thin volume mythinvolume размером 10 ГБ внутри mythinpool:

sudo lvcreate -V 10G -T myvg/mythinpool -n mythinvolume

Флаг -V задаёт виртуальный размер thin volume, -T указывает thin pool, а -n задаёт имя нового тома.

Использование thin volume

Thin volume используется так же, как любой другой логический том. Создайте на нём файловую систему:

sudo mkfs.ext4 /dev/myvg/mythinvolume

После этого thin volume можно смонтировать и использовать как обычное блочное устройство.

Warning

Поскольку thin pool может использовать overcommit, необходимо контролировать фактическое использование пула. Пространство данных и пространство метаданных могут закончиться независимо друг от друга, и оба ресурса критичны: если thin pool исчерпает пространство данных или метаданных во время записи в thin volume, операции записи в этот том начнут завершаться с ошибками.

Текущее использование пространства данных и метаданных всех логических томов, включая thin pools, можно проверить с помощью lvs:

sudo lvs -o +data_percent,metadata_percent

Когда значение data_percent или metadata_percent приближается к 100, расширьте thin pool с помощью lvextend до того, как он будет полностью заполнен.

Справочник команд

Основные команды LVM, сгруппированные по уровням.

Физические тома:

  • pvcreate инициализирует блочное устройство как физический том.
  • pvdisplay показывает подробную информацию о физических томах.
  • pvs показывает компактную сводную таблицу физических томов.
  • pvresize обновляет физический том после изменения размера underlying устройства.

Группы томов:

  • vgcreate создаёт группу томов из одного или нескольких физических томов.
  • vgextend добавляет физический том в группу томов.
  • vgreduce удаляет физический том из группы томов.
  • vgdisplay показывает подробную информацию о группах томов.
  • vgs показывает компактную сводную таблицу групп томов.

Логические тома:

  • lvcreate создаёт логический том.
  • lvextend и lvresize изменяют размер логического тома.
  • lvremove удаляет логический том.
  • lvconvert --merge объединяет снимок обратно с исходным томом.
  • lvdisplay показывает подробную информацию о логических томах.
  • lvs показывает компактную сводную таблицу логических томов.

Для повседневного использования короткие команды pvs, vgs и lvs обычно удобнее подробных вариантов *display. Каждая команда поддерживает --help для получения полного списка параметров.

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA