31 июля 2017 г.

LVM в операционной системе Linux

В своём блоге несколько лет назад я делал памятку по системе Logical Volume Management (LVM) в операционной системе HP-UX. Четыре части статьи можно найти по тегу LVM.

К счастью, LVM в Linux очень похож на LVM в HP-UX (рис. 1).

Рис. 1. Концепция LVM в Linux.

Все понятия идентичны. На физических дисках или разделах дисков создаются физические тома (Physical Volumes). Эти тома объединяются в группы томов (Volume Groups). Один физический том может принадлежать только одной группе томов. Внутри группы томов пространство разбивается на логические тома (Logical Volumes). Соответствие между логическими и физическими томами происходит через единицу выделения пространства - Physical Extent, который равен по размеру Logical Extent. Карта распределения и соответствия LE и PE произвольная. Размер PE определяется в момент создания Volume Group и фиксирован во всё время существования группы (по-умолчанию, 4 Мб). Внутри логического тома можно создать файловую систему и смонтировать её в дереве общей файловой системы Linux.

Краткая последовательность создания:
  1. Для создания разделов можно использовать команды gdisk (GPT формат) или fdisk (MBR формат). При создании раздела указать тип LVM (код 8E или 8E00).
  2. На разделах создать физические тома (Physical Volumes) командой вида:
     # pvcreate /dev/sdaX /dev/sdbY 
  3. Создать группу томов (Volume Group) командой вида:
     # vgcreate -s размер_PE VGname /dev/sdaX /dev/sdbY 
  4. Создать необходимое количество логических томов (Logical Volumes) командами вида:
     # lvcreate -l/-L размер -n LVname VGname 
  5. Активировать группу томов командой вида:
     # vgchange -a y VGname 
    или
     # lvm vgchange -a y VGname 
  6. Создать файловые системы и смонтировать их, например командами:
     # mkfs -t xfs /dev/VGname/LVname
     # mount /dev/VGname/LVname /mount/XXX 

Если необходимо расширить файловую систему, то последовательность следующая:
  1. Расширить группу томов, создав и добавив физический том, если это необходимо:
     # pvcreate /dev/sdbZ
     # vgextend VGname /dev/sdbZ 
  2. Расширить логический том и файловую систему командами вида:
     # lvextend -L размер /dev/VGname/LVname
     # resize2fs /dev/VGname/LVname 
Можно сместить Physical Extents одного физического тома на другой (sdaX -> sdcZ). Например, для вывода его из состава группы томов. Использовать команду вида:
 # pvmove /dev/sdaX /dev/sdcZ 
Второй аргумент можно не указывать, тогда команда "разбросает" PE на то свободное место, которое есть в группе томов.

В Linux есть дополнительные команды просмотра информации по LVM:
 # pvs 
 # vgs 
 # lvs 

Они отображают информацию по всем физическим томам, группам томов и логическим томам в системе, соответственно (рис. 2).

Рис. 2. Пример вывода информации по LVM разделам в системе.

Есть возможно указать конкретные поля, которые необходимо вывести, например:
 # lvs -o lv_name,lv_size,device 
Информация по всем столбцам по команде вида:
 # lvs -o help 

Есть у LVM в Linux расширенные возможности:
  1. Создание snapshots, которые очень полезны при резервировании файловой системы с гарантией от изменений во время процесса. Смотрите справку на опцию -s команды lvcreate.
  2. Поддержка программного RAID 0/1/5/6/10.
  3. Создание кэш разделов на основе, например, SSD, для медленных и больших разделов.
  4. Поддержка кластерных конфигураций.

Есть команды vgexport/vgimport, которые позволяют переносить группы томов с одного сервера на другой или при настройке кластерной конфигурации.

В отличии от HP-UX, в Linux LVM реализуется через Device Mapper, который генерирует реальные имена устройств вида /dev/dm-X. А файлы вида /dev/VGname/LVname по сути являются символьными линками на эти файлы. Но рекомендуется работать именно с линками, так как Device Mapper не гарантирует соответствие файлов устройств /dev/dm-X самим устройствам после перезагрузки.

Не воспрещается использовать графические утилиты для конфигурации LVM. Хотя по мне, это не так изящно. В SLES это yast2 (модуль disk или Partitioner) (рис. 3), в RHEL - gnome-disk-utility.

Рис. 3. Раздел Partitioner утилиты Yast.

Дополнительно можно почитать хорошую Wiki-статью по LVM.

P.S. Поздравляю всех причастных с прошедшим днём системного администратора или просто сисадмина! :)


Автор: Шиболов Вячеслав Анатольевич


4 комментария:

  1. От себя добавлю:

    LVM 2 Caveat
    The single command
    # e2fsadm -L+1G /dev/myvg/homevol

    is equivalent to the two commands:

    # lvextend -L+1G /dev/myvg/homevol
    # resize2fs /dev/myvg/homevol

    ОтветитьУдалить
    Ответы
    1. Спасибо Виктор за дополнение

      Удалить
    2. В Redhat 6 есть GUI утилита system-config-lvm (System - Administration - Logical Volume Management), а вот в Redhat 7 нету GUI утилит для управления LVM.

      Удалить
    3. Поэтому знать базовые команды, рассматривать GUI только как бонус.

      Удалить