Перейти к основному содержимому

Работа с LVM

Теория.

LVM (Logical Volume Manager), менеджер логических томов - это система управления дисковым пространством, абстрагирующаяся от физических устройств.

У LVM есть 3 уровня абстракции:

  1. PV (Physical Volume) — раздел на диске, весь диск или же устройства программного и аппаратного RAID.

  2. VG (Volume Group) — группа томов, объединяемые физические тома (PV) в группу или же создание единого диска, который можно дальше разбивать так, как нам хочется.

  3. LV (Logical Volume) — логические разделы, раздел нашей новой группы томов (VG), который мы потом форматируем и используем как обычный раздел, обычного жёсткого диска.

Для наглядности рассмотрим следующую диаграмму:

sda1    sda2     sdb     sdc       <-- PV
| | | |
| | | |
+-------+- VG00 -+-------+ <-- VG
|
+-------+--------+-------+
| | | |
root usr home var <-- LV
| | | |
ext3 reiserfs reiserfs xfs <-- Файловые системы

Практика.

Кратка справка по командам.

Physical Volumes.

  • pvcreate [device] — инициализация физического тома для использования в LVM.
  • pvdisplay — отображение информации о физических томах.
  • pvs — вывод всех физических томов с краткой информацией. Объем доступного и используемого пространства.
  • pvscan — сканирование всех дисков на наличие физических томов.
  • pvresize [device] — изменение размера физического тома.

Volume Groups.

  • vgcreate [volume-group] [physical-volume] — создание группы томов из одного или нескольких физических томов.
  • vgextend [volume-group] [physical-volume] — добавление физического тома в существующую группу томов.
  • vgreduce [volume-group] [physical-volume] — удаление физического тома из группы.
  • vgdisplay — отображение информации о группах томов.
  • vgs — вывод всех групп томов с краткой информацией.
  • vgscan — сканирование всех дисков для обнаружения групп томов.
  • vgremove [volume-group] — удаление группы томов (должна быть пустой).
  • vgrename [old-name] [new-name] — переименование группы томов.

Logical Volumes.

  • lvcreate -L [size] -n [name] [volume-group] — создание логического тома в группе.
  • lvextend -L [size] [logical-volume] — увеличение размера логического тома.
  • lvreduce -L [size] [logical-volume] — уменьшение размера логического тома.
  • lvresize -L [size] [logical-volume] — изменение размера логического тома до заданного значения.
  • lvdisplay — отображение информации о логических томах.
  • lvs — вывод всех логических томов с краткой информацией.
  • lvscan — сканирование всех дисков для обнаружения логических томов.
  • lvrename [volume-group] [old-name] [new-name] — переименование логического тома.

Создание разделов.

Для начала нам нужно установить утилиту:

dnf install lvm2

Рассмотрим пример создания томов из дисков sdb и sdc с помощью LVM.

1. Инициализация.

Помечаем диски, что они будут использоваться для LVM:

pvcreate /dev/sdb /dev/sdc
к сведению

напомним, что в качестве примера нами используются диски sdb и sdc.

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

pvdisplay

В нашем случае мы увидим:

  "/dev/sdb" is a new physical volume of "1,00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb
VG Name
PV Size 1,00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID rR8qya-eJes-7AC5-wuxv-CT7a-o30m-bnUrWa

"/dev/sdc" is a new physical volume of "1,00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdc
VG Name
PV Size 1,00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 2jIgFd-gQvH-cYkf-9K7N-M7cB-WWGE-9dzHIY

Где:

  • PV Name — имя диска.
  • VG Name — группа томов, в которую входит данный диск (в нашем случае пусто, так как мы еще не добавили его в группу).
  • PV Size — размер диска.
  • Allocatable — распределение по группам. Если NO, то диск еще не задействован и его необходимо для использования включить в группу.
  • PE Size — размер физического фрагмента (экстента). Пока диск не добавлен в группу, значение будет 0.
  • Total PE — количество физических экстентов.
  • Free PE — количество свободных физических экстентов.
  • Allocated PE — распределенные экстенты.
  • PV UUID — идентификатор физического раздела.

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

Инициализированные на первом этапе диски должны быть объединены в группы.

Группа может быть создана:

vgcreate vg01 /dev/sdb /dev/sdc

Где vg01 — произвольное имя создаваемой группы, а /dev/sdс и /dev/sdc — наши диски.

Просмотреть информацию о созданных группах можно командой:

vgdisplay

На что мы получим следующее:

  --- Volume group ---
VG Name vg01
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 1,99 GiB
PE Size 4,00 MiB
Total PE 510
Alloc PE / Size 0 / 0
Free PE / Size 510 / 1,99 GiB
VG UUID b0FAUz-wlXt-Hzqz-Sxs4-oEgZ-aquZ-jLzfKz

Где:

  • VG Name — имя группы.
  • Format — версия подсистемы, используемая для создания группы.
  • Metadata Areas — область размещения метаданных. Увеличивается на единицу с созданием каждой группы.
  • VG Access — уровень доступа к группе томов.
  • VG Size — суммарный объем всех дисков, которые входят в группу.
  • PE Size — размер физического фрагмента (экстента).
  • Total PE — количество физических экстентов.
  • Alloc PE / Size — распределенное пространство: колическтво экстентов / объем.
  • Free PE / Size — свободное пространство: колическтво экстентов / объем.
  • VG UUID — идентификатор группы.

3. Создание логических томов.

Последний этап — создание логического раздела из группы томов командой lvcreate. Ее синтаксис:

lvcreate [опции] [имя группы томов]

Примеры создания логических томов:

Cоздание тома на 1 Гб из группы vg01:

lvcreate -L 1G vg01

Cоздание тома с именем lv01 на 50 Мб из группы vg01:

lvcreate -L50 -n lv01 vg01

При создании тома используется 40% от дискового пространства группы vg01:

lvcreate -l 40%VG vg01

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

lvcreate -l 100%FREE -n lv01 vg01
к сведению

также можно использовать %PVS — процент места от физического тома (PV); %ORIGIN — размер оригинального тома (применяется для снапшотов).

Посмотрим информацию о созданном томе:

lvdisplay

После выполнение команды увидим следующие:

  --- Logical volume ---
LV Path /dev/vg01/lv01
LV Name lv01
VG Name vg01
LV UUID 4nQ2rp-7AcZ-ePEQ-AdUr-qcR7-i4rq-vDISfD
LV Write Access read/write
LV Creation host, time vln.dmosk.local, 2019-03-18 20:01:14 +0300
LV Status available
# open 0
LV Size 52,00 MiB
Current LE 13
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2

Где:

  • LV Path — путь к устройству логического тома.
  • LV Name — имя логического тома.
  • VG Name — имя группы томов.
  • LV UUID — идентификатор.
  • LV Write Access — уровень доступа.
  • LV Creation host, time — имя компьютера и дата, когда был создан том.
  • LV Size — объем дискового пространства, доступный для использования.
  • Current LE — количество логических экстентов.

Создание файловой системы и монтирование тома.

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

1. Файловая система.

Процесс создания файловой системы на томах LVM ничем не отличается от работы с любыми другими разделами.

Например, для создания файловой системы ext4 вводим:

mkfs.ext4 /dev/vg01/lv01

Где vg01 — наша группа томов, lv01 — логический том.

Для создания, например, файловой системы xfs вводим:

mkfs.xfs /dev/vg01/lv01

2. Монтирование.

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

Для разового монтирования пользуемся командой:

mount /dev/vg01/lv01 /mnt

Где /dev/vg01/lv01 — созданный нами логический том, /mnt — раздел, в который мы хотим примонтировать раздел.

Для постоянного монтирования раздела добавляем строку в /etc/fstab любым удобным методом:

/dev/vg01/lv01  /mnt    ext4    defaults        1 2
к сведению

В данном примере мы монтируем при загрузке системы том /dev/vg01/lv01 в каталог /mnt где используется файловая система ext4.

Проверяем настройку fstab, смонтировав раздел:

mount -a

Проверяем, что диск примонтирован:

df -hT

3. Просмотр информации.

Разберемся, как получить информацию о дисковых накопителях в системе:

  1. Для общего представления дисков, разделов и томов вводим:
lsblk

Мы получим следующие:

NAME             MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda 8:0 0 30G 0 disk
sda1 8:1 0 1G 0 part /boot
sda2 8:2 0 29G 0 part
sys-root 253:0 0 27G 0 lvm /
sys-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 1G 0 disk
vg01-lv01-real 253:3 0 1G 0 lvm
vg01-lv01 253:2 0 1G 0 lvm /mnt
vg01-sn01 253:5 0 1G 0 lvm
sdc 8:32 0 1G 0 disk
vg01-lv01-real 253:3 0 1G 0 lvm
vg01-lv01 253:2 0 1G 0 lvm /mnt
vg01-sn01 253:5 0 1G 0 lvm
vg01-sn01-cow 253:4 0 500M 0 lvm
vg01-sn01 253:5 0 1G 0 lvm
sdd 8:48 0 1G 0 disk

Как видим, команда отображает корневое блочное устройство, какие разделы из него сделаны и в какие логические тома организованы из некоторых из разделов.

  1. Получить информацию о проинициализированных для LVM дисков можно двумя способами:

Кратко:

pvs

Подробно:

pvdisplay

или

pvdisplay /dev/sdb
  1. Посмотреть информацию о группах LVM так же можно двумя способами:

Кратко:

vgs

Подробно:

vgdisplay

или

vgdisplay vg01
  1. Посмотреть информацию о логических томах тоже можно двумя способами:

Кратко:

lvs
к сведению

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

Подробно:

lvdisplay

или

lvdisplay /dev/vg01/lv01
  1. Для поиска всех устройств, имеющих отношение к LVM, вводим:
lvmdiskscan

Увеличение пространства.

1. Увеличение томов.

Увеличение размера тома может выполняться с помощью добавления еще одного диска или при увеличении имеющихся дисков (например, увеличение диска виртуальной машины). Итак, процедура выполняется в 4 этапа:

  1. Расширение физического тома

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

A. Если добавляем еще один диск.

Инициализируем новый диск:

pvcreate /dev/sdd

Проверяем объем физического тома:

pvdisplay

B. Если увеличиваем дисковое пространство имеющегося диска.

Увеличиваем размер физического диска командой:

pvresize /dev/sda

Где /dev/sda — диск, который был увеличен.

Проверяем объем физического тома:

pvdisplay
  1. Добавление нового диска к группе томов

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

vgextend vg01 /dev/sdd

Данная команда расширит группу vg01 за счет добавленого или расширенного диска sdd.

Результат можно увидеть командой:

vgdisplay
  1. Увеличение логического раздела

Выполняется одной командой.

A. все свободное пространство:

lvextend -l +100%FREE /dev/vg01/lv01

Данной командой мы выделяем все свободное пространство группы томов vg01 разделу lv01.

к сведению

Также можно использовать опцию -r, которая укажет программе сразу расширить файловую систему:

    lvextend -r -l +100%FREE /dev/vg01/lv01

B. Определенный объем:

lvextend -L+30G /dev/vg01/lv01

Данной командой мы добавляем 30 Гб от группы томов vg01 разделу lv01.

C. до нужного объема:

lvextend -L500G /dev/vg01/lv01

Данной командой мы доводим наш раздел до объема в 500 Гб.

Результат можно увидеть командой:

lvdisplay

2. Увеличение размера файловой системы.

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

Посмотреть используемую файловую систему:

df -T

Для каждой файловой системы существуют свои инструменты.

Для ext2/ext3/ext4:

resize2fs /dev/vg01/lv01

Для XFS:

xfs_growfs /dev/vg01/lv01

Для Reiserfs:

resize_reiserfs /dev/vg01/lv01

Удаление томов.

Если необходимо полностью разобрать LVM тома, выполняем следующие действия.

1. Отмонтируем разделы.

umount /mnt

Где /mnt — точка монтирования для раздела.

Удаляем соответствующую запись из /etc/fstab (в противном случае наша система может не загрузиться после перезагрузки):

#/dev/vg01/lv01  /mnt    ext4    defaults        1 2

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

Смотрим информацию о логичеких томах:

lvdisplay

2. Удаляем логический том.

lvremove /dev/vg01/lv01

На вопрос системы, действительно ли мы хотим удалить логических том, отвечаем да (y):

Do you really want to remove active logical volume vg01/lv01? [y/n]: y

Если система вернет ошибку Logical volume contains a filesystem in use, необходимо убедиться, что мы отмонтировали том.

Смотрим информацию о группах томов:

vgdisplay

3. Удаляем группу томов.

vgremove vg01

4. Убираем пометку с дисков на использование их для LVM.

pvremove /dev/sd{b,c,d}

B данном примере мы деинициализируем диски /dev/sdb, /dev/sdc, /dev/sdd.

В итоге мы получим:

  Labels on physical volume "/dev/sdb" successfully wiped.
Labels on physical volume "/dev/sdc" successfully wiped.
Labels on physical volume "/dev/sdd" successfully wiped.