Jump to content

LVM (Русский)

From ArchWiki
Состояние перевода: На этой странице представлен перевод статьи LVM. Дата последней синхронизации: 2026-06-13. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

From Wikipedia:Logical Volume Manager (Linux):

Logical Volume Manager (LVM) is a device mapper framework that provides logical volume management for the Linux kernel.

Background

Элементы LVM

Управление логическими томами (Logical Volume Management) использует функцию device-mapper ядра, чтобы предоставить систему разделов, не зависящую от физической разметки диска. С LVM вы абстрагируете хранилище и получаете «виртуальные разделы», что упрощает расширение и сжатие (с учётом возможных ограничений файловой системы).

Виртуальные разделы позволяют добавлять и удалять их, не заботясь о наличии непрерывного свободного пространства на конкретном диске, не рискуя при работе с fdisk на используемом диске (и гадая, какую таблицу разделов использует ядро — старую или новую) и не перемещая другие разделы.

Основные строительные блоки LVM:

Физический том (Physical Volume, PV)
Блочное устройство Unix, которое может использоваться LVM для хранения. Примеры: жёсткий диск, раздел MBR или GPT, loopback-файл, устройство device mapper (например, dm-crypt). Содержит заголовок LVM.
Томовая группа (Volume Group, VG)
Группа PV, которая служит контейнером для LV. PE выделяются из VG для LV.
Логический том (Logical Volume, LV)
«Виртуальный/логический раздел», находящийся в VG и состоящий из PE. LV являются блочными устройствами Unix, аналогичными физическим разделам: например, их можно непосредственно отформатировать в файловую систему.
Физический экстент (Physical Extent, PE)
Наименьший непрерывный фрагмент (по умолчанию 4 МиБ) в PV, который может быть назначен LV. Представляйте PE как части PV, которые могут быть выделены любому LV.

Пример:

Физические диски

  Диск1 (/dev/sda):
    ┌──────────────────────────────────────┬─────────────────────────────────────┐
    │ Раздел1  50 ГиБ (Физический том)     │ Раздел2 80 ГиБ (Физический том)     │
    │ /dev/sda1                            │ /dev/sda2                           │
    └──────────────────────────────────────┴─────────────────────────────────────┘

  Диск2 (/dev/sdb):
    ┌──────────────────────────────────────┐
    │ Раздел1 120 ГиБ (Физический том)     │
    │ /dev/sdb1                            │
    └──────────────────────────────────────┘
Логические тома LVM

  Томовая группа1 (/dev/MyVolGroup/ = /dev/sda1 + /dev/sda2 + /dev/sdb1):
    ┌─────────────────────────┬─────────────────────────┬──────────────────────────┐
    │ Логический том1 15 ГиБ  │ Логический том2 35 ГиБ  │ Логический том3 200 ГиБ  │
    │ /dev/MyVolGroup/rootvol │ /dev/MyVolGroup/homevol │ /dev/MyVolGroup/mediavol │
    └─────────────────────────┴─────────────────────────┴──────────────────────────┘
Примечание Логические тома доступны как по пути /dev/ИмяТомовойГруппы/ИмяЛогическогоТома, так и по пути /dev/mapper/ИмяТомовойГруппы-ИмяЛогическогоТома. Однако lvm(8) § VALID NAMES рекомендует использовать первый формат для «программ и скриптов» (например, fstab), так как второй предназначен для «внутреннего использования» и может «меняться между выпусками и дистрибутивами».

Преимущества

LVM предоставляет больше гибкости, чем обычные разделы жёсткого диска:

  • Используйте любое количество дисков как один большой диск.
  • Растягивайте логические тома на несколько дисков (RAID, зеркалирование, чередование), получая такие преимущества, как дополнительная отказоустойчивость и производительность [1].
  • Создавайте небольшие логические тома и динамически изменяйте их размер по мере заполнения.
  • Изменяйте размер логических томов независимо от их порядка на диске. Это не зависит от положения LV внутри VG, не требуется обеспечивать окружающее свободное пространство.
  • Изменяйте размер, создавайте и удаляйте логические и физические тома на лету. Файловые системы на них всё равно нужно изменять в размере, но некоторые (например, Ext4 и Btrfs) поддерживают изменение размера на лету.
  • Онлайн/живая миграция LV (или их сегментов), используемых службами, на другие диски без необходимости перезапуска служб.
  • Снимки (snapshots) позволяют создать резервную копию «замороженной» файловой системы, сводя к минимуму время простоя служб и легко объединяя снимок с исходным томом позже.
  • Поддержка разблокировки отдельных томов без необходимости вводить ключ несколько раз при загрузке (создание LVM поверх LUKS).
  • Встроенная поддержка кэширования часто используемых данных (lvmcache(7)).

Недостатки

  • Дополнительные шаги при настройке системы (может потребоваться изменение конфигурации mkinitcpio), более высокая сложность. Требуется постоянная работа (нескольких) демонов.
  • При двойной загрузке обратите внимание, что Windows не поддерживает LVM; вы не сможете получить доступ к разделам LVM из Windows. Стороннее программное обеспечение может позволить монтировать некоторые виды конфигураций LVM. [2]
  • Если ваши физические тома не находятся на RAID-1, RAID-5 или RAID-6, потеря одного диска может привести к потере одного или нескольких логических томов, если вы распределяете (или расширяете) свои логические тома на несколько неизбыточных дисков.
  • Не всегда легко уменьшить пространство, используемое менеджером логических томов, то есть физические тома, используемые для логических томов. Если физические экстенты разбросаны по всему физическому тому до самого конца, возможно, потребуется проверить сегменты и переместить их (возможно, на другое физическое устройство) или на то же устройство с пользовательскими настройками распределения (например, --alloc anywhere). Если вы хотите организовать двойную загрузку с другими операционными системами (например, с Microsoft Windows), единственное место на устройстве, оставшееся для Microsoft Windows, — это пространство, не используемое LVM / не используемое как физический том.
  • Потенциально более низкая производительность по сравнению с использованием обычных разделов. [3]
  • Может плохо работать с некоторыми файловыми системами, особенно с теми, которые рассчитаны на работу с несколькими устройствами (multi-device aware). Например, Btrfs предлагает часть той же функциональности (поддержка нескольких устройств, (под)тома, снимки и RAID), что может конфликтовать (читайте подробнее о проблемах со снимками LVM с Btrfs).

Установка

Убедитесь, что пакет lvm2 установлен.

Если у вас есть тома LVM, которые не активируются через initramfs, включите службу lvm2-monitor.service, которая предоставляется пакетом lvm2.

Операции с томами

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

Создание

Чтобы создать PV на /dev/sda1, выполните:

# pvcreate /dev/sda1

Проверить, что PV создан, можно командой:

# pvs

Расширение

После увеличения или перед уменьшением размера устройства, на котором находится физический том, необходимо расширить или сжать PV с помощью pvresize(8).

Чтобы расширить PV на /dev/sda1 после увеличения раздела, выполните:

# pvresize /dev/sda1

Это автоматически определит новый размер устройства и расширит PV до максимума.

Примечание Эту команду можно выполнять на работающем томе.

Сжатие

Чтобы сжать физический том перед уменьшением лежащего в его основе устройства, добавьте к команде параметр --setphysicalvolumesize размер, например:

# pvresize --setphysicalvolumesize 40G /dev/sda1

Эта команда может завершиться ошибкой:

/dev/sda1: cannot resize to 25599 extents as later ones are allocated.
0 physical volume(s) resized / 1 physical volume(s) not resized

pvresize откажется сжимать PV, если за его новым концом остаются выделенные экстенты. Сначала необходимо выполнить pvmove, чтобы переместить их в другое место в группе томов, если есть достаточно свободного места.

Перемещение физических экстентов

Перед освобождением физических экстентов в конце тома нужно выполнить pvdisplay -v -m, чтобы увидеть их. Альтернативный способ просмотра сегментов в табличной форме — pvs --segments -v.

В приведённом ниже примере есть один физический том на /dev/sdd1, одна группа томов vg1 и один логический том backup.

# pvdisplay -v -m
    Finding all volume groups.
    Using physical volume(s) on command line.
  --- Physical volume ---
  PV Name               /dev/sdd1
  VG Name               vg1
  PV Size               1.52 TiB / not usable 1.97 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              399669
  Free PE               153600
  Allocated PE          246069
  PV UUID               MR9J0X-zQB4-wi3k-EnaV-5ksf-hN1P-Jkm5mW
   
  --- Physical Segments ---
  Physical extent 0 to 153600:
    FREE
  Physical extent 153601 to 307199:
    Logical volume	/dev/vg1/backup
    Logical extents	1 to 153599
  Physical extent 307200 to 307200:
    FREE
  Physical extent 307201 to 399668:
    Logical volume	/dev/vg1/backup
    Logical extents	153601 to 246068

Можно заметить, что свободное пространство (FREE) разбито на части по всему тому. Чтобы сжать физический том, мы должны сначала переместить все используемые сегменты в начало.

Здесь первый свободный сегмент — с 0 по 153600, что даёт нам 153601 свободный экстент. Мы можем переместить сегмент с последнего физического экстента на первый. Команда будет выглядеть так:

# pvmove --alloc anywhere /dev/sdd1:307201-399668 /dev/sdd1:0-92467
/dev/sdd1: Moved: 0.1 %
/dev/sdd1: Moved: 0.2 %
...
/dev/sdd1: Moved: 99.9 %
/dev/sdd1: Moved: 100.0 %
Примечание
  • Эта команда перемещает 399668 - 307201 + 1 = 92468 PE с последнего сегмента на первый сегмент. Это возможно, потому что первый сегмент содержит 153600 свободных PE, что может вместить 92467 - 0 + 1 = 92468 перемещаемых PE.
  • Опция --alloc anywhere используется, так как мы перемещаем PE внутри одного раздела. В случае разных разделов команда выглядела бы примерно так:
    # pvmove /dev/sdb1:1000-1999 /dev/sdc1:0-999
  • Эта команда может выполняться долго (один-два часа) для больших томов. Возможно, стоит запустить её в сеансе tmux или GNU Screen. Любая нежелательная остановка процесса может быть фатальной.
  • После завершения операции выполните fsck, чтобы убедиться в целостности вашей файловой системы.
Изменение размера физического тома

Когда все свободные физические сегменты окажутся на последних физических экстентах, выполните vgdisplay с правами root и посмотрите свои свободные PE.

Затем можно снова выполнить команду:

# pvresize --setphysicalvolumesize размер ФизическийТом

Посмотрите результат:

# pvs
  PV         VG   Fmt  Attr PSize    PFree 
  /dev/sdd1  vg1  lvm2 a--     1t     500g
Изменение размера раздела

Наконец, нужно сжать раздел с помощью вашего любимого инструмента разметки.

Группы томов

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

Чтобы создать VG MyVolGroup с ассоциированным PV /dev/sdb1, выполните:

# vgcreate MyVolGroup /dev/sdb1

Проверить, что VG MyVolGroup создана, можно командой:

# vgs

При создании VG можно объединить несколько PV:

# vgcreate MyVolGroup /dev/sdb1 /dev/sdb2

Активация группы томов

Примечание Вы можете ограничить автоматически активируемые тома, задав параметр auto_activation_volume_list в /etc/lvm/lvm.conf. Если сомневаетесь, оставьте этот параметр закомментированным.
# vgchange -a y MyVolGroup

По умолчанию это повторно активирует группу томов, когда это применимо. Например, если у вас произошёл отказ диска в зеркале и вы заменили диск; после выполнения (1) pvcreate, (2) vgextend и (3) vgreduce --removemissing --force.

Восстановление группы томов

Чтобы запустить процесс перестроения деградировавшего зеркального массива в этом примере, выполните:

# lvconvert --repair /dev/MyVolGroup/mirror

За ходом перестроения можно следить (столбец Cpy%Sync) с помощью:

# lvs -a -o +devices

Деактивация группы томов

Просто выполните

# vgchange -a n MyVolGroup

Это деактивирует группу томов и позволит вам размонтировать контейнер, в котором она хранится.

Переименование группы томов

Для переименования существующей группы томов используйте команду vgrename(8).

Любая из следующих команд переименовывает существующую группу томов MyVolGroup в my_volume_group

# vgrename /dev/MyVolGroup /dev/my_volume_group
# vgrename MyVolGroup my_volume_group

Убедитесь, что обновили все конфигурационные файлы (например, /etc/fstab или /etc/crypttab), ссылающиеся на переименованную группу томов.

Добавление физического тома в группу томов

Сначала создайте новый физический том на блочном устройстве, которое хотите использовать, затем расширьте группу томов

# pvcreate /dev/sdb1
# vgextend MyVolGroup /dev/sdb1

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

Примечание Хорошим тоном считается наличие таблицы разделов на вашем носителе под LVM. Используйте соответствующий тип раздела: 8e для MBR и E6D6D379-F507-44C2-A23C-238F2A3DF928 для разделов GPT (код типа 8e00 в gdisk, псевдоним типа lvm в fdisk).

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

Если на разделе создан логический том, сначала удалите его.

Все данные на этом разделе необходимо переместить на другой раздел. К счастью, LVM делает это легко:

# pvmove /dev/sdb1

Если вы хотите переместить данные на конкретный физический том, укажите его вторым аргументом pvmove:

# pvmove /dev/sdb1 /dev/sdf1

Затем физический том нужно удалить из группы томов:

# vgreduce MyVolGroup /dev/sdb1

Или удалить все пустые физические тома:

# vgreduce --all MyVolGroup

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

# vgreduce --removemissing --force MyVolGroup

И наконец, если вы хотите использовать раздел для чего-то другого и хотите избежать того, чтобы LVM считал этот раздел физическим томом:

# pvremove /dev/sdb1

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

Примечание lvresize(8) предоставляет практически те же возможности, что и специализированные команды lvextend(8) и lvreduce(8), позволяя при этом выполнять оба типа операций. Несмотря на это, все эти утилиты предлагают опцию -r/--resizefs, позволяющую изменять размер файловой системы вместе с LV с помощью fsadm(8) (поддерживаются ext2, ext3, ext4, ReiserFS и XFS). Поэтому, возможно, проще использовать lvresize для обеих операций с опцией --resizefs для упрощения, если у вас нет особых потребностей или вы не хотите полностью контролировать процесс.
Важно Хотя расширение файловой системы часто можно выполнять на лету (т.е. когда она смонтирована), даже для корневого раздела, сжатие почти всегда требует предварительного размонтирования файловой системы во избежание потери данных. Убедитесь, что ваша файловая система поддерживает то, что вы пытаетесь сделать.
Совет Если логический том будет отформатирован в ext4, оставьте не менее 256 МиБ свободного места в группе томов для использования e2scrub(8). После создания последнего тома с -l 100%FREE этого можно добиться, уменьшив его размер с помощью lvreduce -L -256M группа_томов/логический_том.

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

Чтобы создать LV homevol в VG MyVolGroup размером 300 ГиБ, выполните:

# lvcreate -L 300G MyVolGroup -n homevol

или, чтобы создать LV homevol в VG MyVolGroup на всё оставшееся место:

# lvcreate -l 100%FREE MyVolGroup -n homevol

Чтобы создать LV, ограничив его конкретными PV внутри VG, добавьте их к команде:

# lvcreate -L 300G MyVolGroup -n homevol /dev/sda1

Новый LV будет доступен как /dev/MyVolGroup/homevol. Теперь вы можете отформатировать LV с подходящей файловой системой.

Проверить, что LV создан, можно командой:

# lvs

Переименование логического тома

Для переименования существующего логического тома используйте команду lvrename(8).

Любая из следующих команд переименовывает логический том old_vol в группе томов MyVolGroup в new_vol.

# lvrename /dev/MyVolGroup/old_vol /dev/MyVolGroup/new_vol
# lvrename MyVolGroup old_vol new_vol

Убедитесь, что обновили все конфигурационные файлы (например, /etc/fstab или /etc/crypttab), ссылающиеся на переименованный логический том.

Изменение размера логического тома и файловой системы за один шаг

Примечание Поддерживаются только файловые системы ext2, ext3, ext4, ReiserFS и XFS. Для других типов файловых систем смотрите #Изменение размера логического тома и файловой системы по отдельности.

Расширить логический том mediavol в MyVolGroup на 10 ГиБ и одновременно изменить размер его файловой системы:

# lvresize -L +10G --resizefs MyVolGroup/mediavol

Установить размер логического тома mediavol в MyVolGroup равным 15 ГиБ и одновременно изменить размер его файловой системы:

# lvresize -L 15G --resizefs MyVolGroup/mediavol

Если вы хотите заполнить всё свободное место в группе томов, используйте следующую команду:

# lvresize -l +100%FREE --resizefs MyVolGroup/mediavol

Подробнее см. lvresize(8).

Изменение размера логического тома и файловой системы по отдельности

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

Чтобы расширить логический том mediavol в группе томов MyVolGroup на 2 ГиБ, не затрагивая его файловую систему:

# lvresize -L +2G MyVolGroup/mediavol

Теперь расширьте файловую систему (в данном примере ext4) до максимального размера нижележащего логического тома:

# resize2fs /dev/MyVolGroup/mediavol

Для Btrfs btrfs-filesystem(8) ожидает точку монтирования вместо устройства, эквивалентная команда:

# btrfs filesystem resize max /путь/к/точке/монтирования

Чтобы уменьшить размер логического тома mediavol в MyVolGroup на 500 МиБ, сначала вычислите результирующий размер файловой системы и уменьшите файловую систему (в данном примере Ext4) до нового размера:

# resize2fs /dev/MyVolGroup/mediavol НовыйРазмер

В отличие от Ext4, Btrfs поддерживает сжатие на лету (опять же, следует указывать точку монтирования), например:

# btrfs filesystem resize -500M /путь/к/точке/монтирования

Когда файловая система сжата, уменьшите размер логического тома:

# lvresize -L -500M MyVolGroup/mediavol

Чтобы вычислить точный размер логического тома для файловых систем ext2, ext3, ext4, используйте простую формулу: LVM_EXTENTS = FS_BLOCKS × FS_BLOCKSIZE ÷ LVM_EXTENTSIZE.

# tune2fs -l /dev/MyVolGroup/mediavol | grep Block
Block count:              102400000
Block size:               4096
Blocks per group:         32768
# vgdisplay MyVolGroup | grep "PE Size"
PE Size               4.00 MiB
Примечание Размер блока файловой системы указан в байтах. Убедитесь, что используете одинаковые единицы измерения для размера блока и экстента.
102400000 блоков × 4096 байт/блок ÷ 4 МиБ/экстент = 100000 экстентов

Использование --resizefs подтвердит правильность вычислений.

# lvreduce -l 100000 --resizefs /dev/MyVolGroup/mediavol
...
The filesystem is already 102400000 (4k) blocks long.  Nothing to do!
...
Logical volume sysvg/root successfully resized.

Подробнее см. lvresize(8).

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

Важно Перед удалением логического тома убедитесь, что вы переместили все данные, которые хотите сохранить, в другое место; в противном случае они будут потеряны!

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

# lvs

Затем найдите точку монтирования выбранного логического тома:

$ lsblk

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

# umount /точка_монтирования

Наконец, удалите логический том:

# lvremove группа_томов/логический_том

Например:

# lvremove MyVolGroup/homevol

Подтвердите, введя y.

Убедитесь, что обновили все конфигурационные файлы (например, /etc/fstab или /etc/crypttab), ссылающиеся на удалённый логический том.

Проверить удаление логического тома можно, снова набрав lvs от root (см. первый шаг этого раздела).

Снимки

LVM поддерживает снимки CoW (Copy-on-Write, копирование при записи). Снимок CoW изначально указывает на исходные данные. Когда блоки данных перезаписываются, исходная копия остаётся нетронутой, а новые блоки записываются в другое место на диске. Это даёт несколько полезных свойств:

  • Создание снимков выполняется быстро, поскольку не требует копирования данных (только гораздо более короткий список указателей на расположение на диске).
  • Снимкам требуется ровно столько свободного места, чтобы вместить новые блоки данных (плюс незначительный объём для указателей на новые блоки). Например, для снимка 35 ГиБ данных, в котором вы записываете только 2 ГиБ (как в оригинал, так и в снимок), потребуется всего 2 ГиБ свободного места.

Снимки LVM работают на блочном уровне. Они создают новое блочное устройство, не имеющее видимой связи с оригиналом, кроме как при работе с инструментами LVM. Поэтому удаление файлов в оригинале не освобождает место в снимках. Если вам нужны снимки на уровне файловой системы, лучше использовать btrfs, ZFS или bcachefs.

Важно
  • Снимок CoW не является резервной копией, потому что он не создаёт вторую копию исходных данных. Например, повреждённый сектор диска, затрагивающий исходные данные, также затрагивает и снимки. Тем не менее, снимок может быть полезен при использовании других инструментов для создания резервных копий, как описано в разделе ниже.
  • Btrfs ожидает, что разные файловые системы имеют разные UUID. Если вы делаете снимок тома LVM, содержащего файловую систему btrfs, обязательно измените UUID оригинала или копии до того, как оба будут смонтированы (или станут видны ядру, например, если несвязанный демон запустит btrfs device scan). Подробнее см. btrfs wiki Gotcha's.

Настройка

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

# lvcreate --size 100M --snapshot --name snap01vol /dev/MyVolGroup/lvol

С этим томом вы можете изменить менее 100 МиБ данных до того, как снимок заполнится.

Возврат изменённого логического тома lvol к состоянию на момент создания снимка snap01vol выполняется командой

# lvconvert --merge /dev/MyVolGroup/snap01vol

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

Примечание После слияния снимок перестанет существовать.

Также можно создавать несколько снимков и каждый из них при необходимости объединять с исходным логическим томом.

Резервное копирование

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

Снимок можно смонтировать и скопировать с помощью dd или tar. Размер файла резервной копии, созданной с помощью dd, будет равен размеру файлов, находящихся на снимке. Для восстановления просто создайте снимок, смонтируйте его и запишите или извлеките резервную копию на него. Затем объедините его с оригиналом.

Смотрите Create root filesystem snapshots with LVM для автоматизации создания чистых снимков корневой файловой системы во время запуска системы для резервного копирования и отката.

This article or section needs expansion.

Reason: Показать скрипты для автоматизации снимков root перед обновлениями, для отката... обновление menu.lst для загрузки со снимков (возможно, в отдельной статье?) (Discuss in Talk:LVM (Русский))

Шифрование

Смотрите dm-crypt/Encrypting an entire system#LUKS on LVM и dm-crypt/Encrypting an entire system#LVM on LUKS для возможных схем объединения LUKS с LVM.

Кэш

This article or section needs expansion.

Reason: LVM также поддерживает --type writecache, использующий dm-writecache. (Discuss in Talk:LVM (Русский))

Из lvmcache(7):

Тип логического тома cache использует небольшой и быстрый LV для повышения производительности большого и медленного LV. Это достигается путём хранения часто используемых блоков на более быстром LV. LVM называет маленький быстрый LV томом cache pool. Большой медленный LV называется origin LV. Из-за требований dm-cache (драйвера ядра) LVM дополнительно разделяет том cache pool на два устройства — LV данных кэша и LV метаданных кэша. LV данных кэша — это место, где хранятся копии блоков данных с origin LV для увеличения скорости. LV метаданных кэша содержит учётную информацию, определяющую, где хранятся блоки данных (например, на origin LV или на LV данных кэша). Пользователям следует ознакомиться с этими LV, если они хотят создавать наиболее производительные и надёжные кэшированные логические тома. Все эти связанные LV должны находиться в одной VG.

Создание кэша

Преобразуйте ваш быстрый диск (/dev/fastdisk) в PV и добавьте в существующую VG (MyVolGroup):

# vgextend MyVolGroup /dev/fastdisk

Использование логического тома кэша

Создайте логический том кэша с автоматическими метаданными на /dev/fastdisk и преобразуйте существующий LV MyVolGroup/rootvol в кэшированный LV — всё за один шаг:

# lvcreate --type cache --cachemode writethrough -l 100%FREE -n root_cachevol MyVolGroup/rootvol /dev/fastdisk
Совет Вместо -l 100%FREE для выделения 100% доступного пространства с PV /dev/fastdisk можно использовать -L 20G, чтобы выделить только 20 ГиБ для cachevol.

Использование пула кэша

При использовании логического тома кэша LVM автоматически управляет метаданными и данными кэша. Но вы также можете вручную создать LV метаданных и данных кэша, а затем создать пул кэша:

# lvcreate -n cache_meta -l 1%FREE MyVolGroup /dev/fastdisk
# lvcreate -n cache_data -l 100%FREE MyVolGroup /dev/fastdisk
# lvconvert --type cache-pool --cachemode writeback --poolmetadata MyVolGroup/cache_meta MyVolGroup/cache_data
# lvconvert --type cache --cachepool MyVolGroup/cache_data MyVolGroup/rootvol

Параметры Cachemode

Cachemode имеет два возможных варианта:

  • writethrough гарантирует, что любые записанные данные будут сохранены как в LV кэша, так и на origin LV. Потеря устройства, связанного с LV кэша, в этом случае не приведёт к потере данных;
  • writeback обеспечивает лучшую производительность, но ценой повышенного риска потери данных в случае отказа диска, используемого для кэша.

Если конкретный --cachemode не указан, система по умолчанию использует writethrough.

Совет Счётчики попаданий и промахов кэша можно посмотреть с помощью lvdisplay или lvm-cache-stats из пакета libblockdev-lvm, который также показывает их в процентах.

Удаление кэша

Если вам когда-либо понадобится отменить создание кэша, выполненное выше за один шаг:

# lvconvert --uncache MyVolGroup/rootvol

Это запишет все ожидающие записи, всё ещё находящиеся в кэше, обратно на origin LV, а затем удалит кэш. Доступны и другие опции, описанные в lvmcache(7).

RAID

LVM можно использовать для создания программного RAID. Это хороший выбор, если у вас нет аппаратного RAID и вы всё равно планировали использовать LVM. Из lvmraid(7):

lvm(8) RAID — это способ создания логического тома (LV), использующего несколько физических устройств для повышения производительности или устойчивости к отказу устройств. В LVM физическими устройствами являются физические тома (PV) в одной группе томов (VG).

LVM RAID поддерживает RAID 0, RAID 1, RAID 4, RAID 5, RAID 6 и RAID 10. Подробности о каждом уровне смотрите в Wikipedia:Standard RAID levels.

Совет mdadm также можно использовать для создания программного RAID. Возможно, он проще, популярнее и легче в настройке.

Настройка RAID

Создайте физические тома:

# pvcreate /dev/sda2 /dev/sdb2

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

# vgcreate MyVolGroup /dev/sda2 /dev/sdb2

Новые тома

Создавайте логические тома, используя lvcreate --type raidlevel, дополнительные опции смотрите в lvmraid(7) и lvcreate(8).

# lvcreate --type RaidLevel [OPTIONS] -n Name -L Size VG [PVs]

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

RAID 0

Например:

# lvcreate -n myraid1vol -i 2 -I 64 -L 70G VolGroup00 /dev/nvme1n1p1 /dev/nvme0n1p1

создаст чередующийся (raid0) логический том размером 70 ГиБ с именем «myraid1vol» в VolGroup00. Чередование будет распределено по /dev/nvme1n1p1 и /dev/nvme0n1p1. Размер полосы установлен равным 64K.

RAID 1

Например:

# lvcreate --type raid1 --mirrors 1 -L 20G -n myraid1vol MyVolGroup /dev/sda2 /dev/sdb2

создаст зеркалированный логический том размером 20 ГиБ с именем «myraid1vol» в VolGroup00 на /dev/sda2 и /dev/sdb2.

RAID 5

RAID5 требует не менее трёх дисков (количество --stripes плюс одно устройство чётности). Блоки данных и чётности хранятся на каждом устройстве, обычно в ротационном порядке.

Например:

# lvcreate --type raid5 --stripes 2 -L 40G -n myraid5vol MyVolGroup /dev/sda2 /dev/sdb2 /dev/sdc2

создаст чередующийся логический том размером 40 ГиБ с именем «myraid5vol» в VolGroup00 на /dev/sda2, /dev/sdb2 и /dev/sdc2. На каждом диске RAID5 займёт около 20 ГиБ.

RAID 6

RAID6 требует не менее пяти дисков (количество --stripes плюс два устройства чётности). Как и в RAID5, блоки данных и чётности хранятся на каждом устройстве, обычно в ротационном порядке.

Например:

# lvcreate --type raid6 --stripes 3 -L 60G -n myraid6vol MyVolGroup /dev/sda2 /dev/sdb2 /dev/sdc2 /dev/sdd2

создаст чередующийся логический том размером 60 ГиБ с именем «myraid6vol» в VolGroup00 на /dev/sda2, /dev/sdb2, /dev/sdc2 и /dev/sdd2. На каждом диске RAID6 займёт около 20 ГиБ.

RAID 10

Например:

# lvcreate -n myraid1vol -L 100G --type raid10 -m 1 -i 2 MyVolGroup /dev/sdd1 /dev/sdc1 /dev/sdb1 /dev/sda5

создаст логический том RAID10 размером 100 ГиБ с именем «myraid1vol» в VolGroup00 на /dev/sdd1, /dev/sdc1, /dev/sdb1 и /dev/sda5.

Существующие тома

Вы можете легко преобразовать не-RAID (например, линейный) том практически в любую другую конфигурацию RAID при условии, что у вас достаточно физических устройств для удовлетворения требований RAID. Некоторые из них потребуют прохождения промежуточных шагов, о которых lvconvert сообщит вам и запросит согласие. raid10 ниже можно заменить на raid0, raid1, raid5 и т.д.

# lvconvert --type raid10 /dev/vg01/lv01

С использованием конкретных PV:

# lvconvert --type raid10 /dev/vg01/lv01 /dev/sda1 /dev/sdb2 /dev/nvme0n1p1 ...

За ходом преобразования можно следить с помощью:

# watch lvs -o name,vg_name,copy_percent

Тонкое выделение

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

Из lvmthin(7):

Блоки в стандартном логическом томе lvm(8) (LV) выделяются при создании LV, но блоки в тонко выделенном LV выделяются по мере записи. Благодаря этому тонко выделенному LV задаётся виртуальный размер, и он может быть значительно больше физически доступного хранилища. Объём физического хранилища, предоставленного для тонко выделенных LV, можно увеличить позже по мере необходимости.

Пример: реализация виртуальных частных серверов

Вот классический пример использования. Предположим, вы хотите запустить собственный VPS-сервис, изначально размещая около 100 VPS на одном ПК с жёстким диском 930 ГиБ. Вряд ли каждый VPS будет фактически использовать всё выделенное ему пространство, поэтому вместо выделения каждому VPS по 9 ГиБ вы можете разрешить каждому VPS максимум 30 ГиБ и использовать тонкое выделение, чтобы выделять каждому VPS ровно столько места на жёстком диске, сколько он реально использует. Предположим, жёсткий диск 930 ГиБ — это /dev/sdb. Вот настройка.

Подготовьте группу томов MyVolGroup.

# vgcreate MyVolGroup /dev/sdb

Создайте тонкий пул LV MyThinPool. Этот LV предоставляет блоки для хранения.

# lvcreate --type thin-pool -n MyThinPool -l 95%FREE MyVolGroup

Тонкий пул состоит из двух подтомов: LV данных и LV метаданных. Эта команда создаёт оба автоматически. Но тонкий пул перестаёт работать, если любой из них полностью заполнится, и LVM в настоящее время не поддерживает сжатие ни одного из этих томов. Именно поэтому в приведённой выше команде оставлено 5% дополнительного пространства на случай, если вам когда-либо понадобится расширить подтома данных или метаданных тонкого пула.

Для каждого VPS создайте тонкий LV. Это блочное устройство, предоставляемое пользователю для его корневого раздела.

# lvcreate -n SomeClientsRoot -V 30G --thinpool MyThinPool MyVolGroup

Блочное устройство /dev/MyVolGroup/SomeClientsRoot затем может использоваться экземпляром VirtualBox в качестве корневого раздела.

Использование тонких снимков для экономии места

Тонкие снимки гораздо мощнее обычных, потому что они сами являются тонкими LV. Полный перечень преимуществ тонких снимков смотрите в руководстве Red Hat [4].

Вместо того чтобы каждый раз устанавливать Linux с нуля при создании VPS, гораздо экономнее по месту начать с одного тонкого LV, содержащего базовую установку Linux:

# lvcreate -n GenericRoot -V 30G --thinpool MyThinPool MyVolGroup
*** установите Linux на /dev/MyVolGroup/GenericRoot ***

Затем создавайте снимки с него для каждого VPS:

# lvcreate -s MyVolGroup/GenericRoot -n SomeClientsRoot

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

Поскольку это тонкие снимки, операция записи в GenericRoot вызывает только одну операцию COW в общей сложности, вместо одной операции COW на каждый снимок. Это позволяет обновлять GenericRoot эффективнее, чем если бы каждый VPS был обычным снимком.

Пример: обновление хранилища без простоя

Тонкое выделение может применяться и вне хостинга VPS. Вот как можно использовать его для увеличения эффективной ёмкости уже смонтированной файловой системы без её размонтирования. Снова предположим, что сервер имеет один жёсткий диск 930 ГиБ. Настройка такая же, как и для хостинга VPS, только здесь один тонкий LV и размер LV намного превышает размер тонкого пула.

# lvcreate -n MyThinLV -V 16T --thinpool MyThinPool MyVolGroup

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

Предположим, что через некоторое время потребовалось обновление хранилища, и в сервер вставлен новый жёсткий диск /dev/sdc. Чтобы увеличить ёмкость тонкого пула, добавьте новый жёсткий диск в VG:

# vgextend MyVolGroup /dev/sdc

Теперь расширьте тонкий пул:

# lvextend -l +95%FREE MyVolGroup/MyThinPool

Поскольку размер этого тонкого LV составляет 16 ТиБ, вы можете добавить ещё 15.09 ТиБ дискового пространства, прежде чем, наконец, потребуется размонтировать и изменить размер файловой системы.

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

Настройка

Некоторые настройки доступны путём редактирования /etc/lvm/lvm.conf. Возможно, вам будет полезно настроить вывод lvs и pvs, который по умолчанию не включает процент синхронизации (полезно для отслеживания прогресса преобразования, например, между линейным и RAID типами) и тип логического тома:

/etc/lvm/lvm.conf
report {
 	lvs_cols = "lv_name,lv_attr,lv_active,vg_name,lv_size,lv_layout,lv_allocation_policy,copy_percent,chunk_size"
	pvs_cols = "pv_name,vg_name,pv_size,pv_free,pv_used,dev_size"
}

Решение проблем

Команды LVM не работают

  • Загрузите нужный модуль:
# modprobe dm_mod

Модуль dm_mod должен загружаться автоматически. Если этого не происходит, явно загрузите модуль при загрузке.

  • Попробуйте запускать команды с префиксом lvm:
# lvm pvdisplay

Логические тома не отображаются

Если вы пытаетесь смонтировать существующие логические тома, но они не отображаются в lvscan, вы можете активировать их следующими командами:

# vgscan
# vgchange -ay

LVM на сменных носителях

Симптомы:

# vgscan
  Reading all physical volumes.  This may take a while...
  /dev/backupdrive1/backup: read failed after 0 of 4096 at 319836585984: Input/output error
  /dev/backupdrive1/backup: read failed after 0 of 4096 at 319836643328: Input/output error
  /dev/backupdrive1/backup: read failed after 0 of 4096 at 0: Input/output error
  /dev/backupdrive1/backup: read failed after 0 of 4096 at 4096: Input/output error
  Found volume group "backupdrive1" using metadata type lvm2
  Found volume group "networkdrive" using metadata type lvm2

Причина: отключение внешнего LVM-диска без предварительной деактивации группы томов. Перед отключением обязательно выполните:

# vgchange -an имя_группы_томов

Исправление: предполагая, что вы уже попытались активировать группу томов с помощью vgchange -ay vg и получаете ошибки Input/output:

# vgchange -an имя_группы_томов

Отключите внешний диск и подождите несколько минут:

# vgscan
# vgchange -ay имя_группы_томов

Приостановка/возобновление работы с LVM и сменными носителями

The factual accuracy of this article or section is disputed.

Reason: Предложенное решение не будет работать в более сложных конфигурациях, например, LUKS на LVM. (Discuss in Talk:LVM (Русский)#LVM on removable media)

Чтобы LVM корректно работал со сменными носителями — например, с внешним USB-диском — группа томов внешнего диска должна быть деактивирована перед приостановкой системы. Если этого не сделать, вы можете получить ошибки буферного ввода/вывода на устройстве dm (после возобновления). По этой причине не рекомендуется смешивать внешние и внутренние диски в одной группе томов.

Чтобы автоматически деактивировать группы томов с внешними USB-дисками, пометьте каждую группу томов тегом sleep_umount следующим образом:

# vgchange --addtag sleep_umount vg_external

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

/etc/systemd/system/ext_usb_vg_deactivate.service
[Unit]
Description=Deactivate external USB volume groups on suspend
Before=sleep.target

[Service]
Type=oneshot
ExecStart=-/etc/systemd/system/deactivate_sleep_vgs.sh

[Install]
WantedBy=sleep.target

и этот скрипт:

/etc/systemd/system/deactivate_sleep_vgs.sh
#!/bin/sh

TAG=@sleep_umount
vgs=$(vgs --noheadings -o vg_name $TAG)

echo "Deactivating volume groups with $TAG tag: $vgs"

# Unmount logical volumes belonging to all the volume groups with tag $TAG
for vg in $vgs; do
    for lv_dev_path in $(lvs --noheadings  -o lv_path -S lv_active=active,vg_name=$vg); do
        echo "Unmounting logical volume $lv_dev_path"
        umount $lv_dev_path
    done
done

# Deactivate volume groups tagged with sleep_umount
for vg in $vgs; do
    echo "Deactivating volume group $vg"
    vgchange -an $vg
done

Наконец, включите юнит.

Сбой изменения размера непрерывного логического тома

Если попытка расширить логический том завершается ошибкой:

" Insufficient suitable contiguous allocatable extents for logical volume "

Причина в том, что логический том был создан с явной политикой непрерывного распределения (опции -C y или --alloc contiguous) и больше нет смежных непрерывных экстентов.[5][dead link 2025-11-17—SSL error]

Чтобы исправить это, перед расширением логического тома измените его политику распределения командой lvchange --alloc inherit логический_том. Если вам необходимо сохранить политику непрерывного распределения, альтернативный подход — переместить том в область диска с достаточным количеством свободных экстентов. См. [6].

Команда "grub-mkconfig" сообщает об ошибках "unknown filesystem"

Перед генерацией grub.cfg обязательно удалите тома снимков.

Тонко выделенный корневой том отваливается по тайм-ауту

При большом количестве снимков thin_check работает достаточно долго, так что ожидание корневого устройства завершается по тайм-ауту. Чтобы компенсировать это, добавьте параметр ядра rootdelay=60 в конфигурацию вашего загрузчика. Или заставьте thin_check пропускать проверку отображения блоков (см. [7]) и пересоберите initramfs:

/etc/lvm/lvm.conf
thin_check_options = [ "-q", "--clear-needs-check-flag", "--skip-mappings" ]

Задержка при выключении

Если вы используете RAID, снимки или тонкое выделение и испытываете задержку при выключении, убедитесь, что lvm2-monitor.service запущен. См. FS#50420.

Гибернация в тонко выделенный том подкачки

Смотрите Power management/Suspend and hibernate#Hibernation into a thinly-provisioned LVM volume.

Смотрите также