SCROLL
Среднее время на прочтение: 5 мин.

Разбираем как работать с LVM (Logical Volume Manager). Создание, изменение, замена физических, логических и групп томов LVM.

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

Основные преимущества LVM в том, что во-первых одну группу логических томов можно создавать поверх любого количества физических разделов, а во-вторых размер логических томов можно легко менять прямо во время работы. Кроме того, LVM поддерживает механизм снапшотов, копирование разделов «на лету» и зеркалирование, подобное RAID-1.

 

Разберем как пользоваться LVM в Ubuntu Server 14.04.

 

[stextbox id=’black’]Тестовый стенд — ОС Ubuntu Server 14.04 LTS, 2х HDD — 450Gb[/stextbox]

 

Подготовка системы

Перед началом установки обновляем систему до актуального состояния:

sudo apt-get update && sudo apt-get upgrade -y

Устанавливаем поддержку LVM в системе:

sudo apt-get install lvm2

 

Инициализация жестких дисков

Для того чтобы начать работу с LVM, необходимо жесткие диски сделать понятными для LVM, перевести их в LVM — 8E Linux LMV.

 

Вывод имеющихся жестких дисков в системе:

sudo fdisk -l

Диск /dev/sdb: 483.2 Гб, 483183820800 байт
255 головок, 63 секторов/треков, 58743 цилиндров, всего 943718400 секторов
Units = секторы of 1 * 512 = 512 bytes
Размер сектора (логического/физического): 512 байт / 512 байт
I/O size (minimum/optimal): 512 bytes / 512 bytes
Идентификатор диска: 0x00000000
На диске /dev/sdb отсутствует верная таблица разделов
 
Диск /dev/sdc: 483.2 Гб, 483183820800 байт
255 головок, 63 секторов/треков, 58743 цилиндров, всего 943718400 секторов
Units = секторы of 1 * 512 = 512 bytes
Размер сектора (логического/физического): 512 байт / 512 байт
I/O size (minimum/optimal): 512 bytes / 512 bytes
Идентификатор диска: 0x00000000
На диске /dev/sdc отсутствует верная таблица разделов

Жесткие диски /dev/sdb, /dev/sdc переводим в формат LVM (pvcreate):

sudo pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created

sudo pvcreate /dev/sdc
Physical volume "/dev/sdc" successfully created

 

Отобразить физические LVM разделы, можно командой (pvscan):

sudo pvscan

PV /dev/sdb lvm2 [400,00 GiB]
PV /dev/sdc lvm2 [450,00 GiB]
Total: 2 [850,00 GiB] / in use: 0 [0 ] / in no VG: 2 [850,00 GiB]

Отобразить физические LVM разделы с подробными сведениями, можно командой (pvdisplay):

sudo pvdisplay

--- Physical volume ---
PV Name /dev/sda6
VG Name
PV Size 1.86 GB / not usable 2.12 MB
Allocatable yes
PE Size (KByte) 4096
Total PE 476
Free PE 456
Allocated PE 20
PV UUID m67TXf-EY6w-6LuX-NNB6-kU4L-wnk8-NjjZfv

--- Physical volume ---
PV Name /dev/sda7
VG Name
PV Size 1.86 GB / not usable 2.12 MB
Allocatable yes
PE Size (KByte) 4096
Total PE 476
Free PE 476
Allocated PE 0
PV UUID b031x0-6rej-BcBu-bE2C-eCXG-jObu-0Boo0x

 

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

Группа томов — это объединение физических томов, при котором создается общий пул памяти который будет распределен между логическими томами.

 

Создаем из физических томов /dev/sdb, /dev/sdc группу томов с названием (прим. jakonda):

sudo vgcreate jakonda /dev/sdb /dev/sdc
Volume group "jakonda" successfully created

 

Отобразить имеющиеся группы томов, можно командой (vgdisplay):

sudo vgdisplay

--- Volume group ---
VG Name jakonda
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 899,99 GiB
PE Size 4,00 MiB
Total PE 230398
Alloc PE / Size 0 / 0
Free PE / Size 230398 / 899,99 GiB
VG UUID 6e6XZ0-6wf1-Fuxj-mc7n-kilP-MyZF-oSCpN0

[stextbox id=’info’]VG Size — Общий размер дискового пространства группового тома.
Alloc PE / Size — Сколько уже выделено для создания логических томов.
Free PE / Size — Свободное, еще не распределенное дисковое пространство.[/stextbox]

 

Увеличить размер группы томов

Увеличить размер группы томов, можно путем добавления в него предварительно инициализированного физического тома (прим. /dev/sdd), командой (vgextend):

sudo vgextend jakonda /dev/sdd
Volume group "jakonda" successfully extended

 

Уменьшить размер группы томов

Уменьшить размер группы томов, можно путем вывода из него физических томов (прим. /dev/sdb). Перед тем как выводить физический том из группы томов, необходимо убедится что что физический том не используется никакими логическими томами.

 

Если физический том (прим. /dev/sdb) не используется никакими логическими томами, вывести его можно командой (vgreduce):

sudo vgreduce jakonda /dev/sdb
Removed "/dev/sdb" from volume group "jakonda"

 

Если физический том (прим. /dev/sdb) используется какими либо логическими томами, то перед тем как выводить его из группы томов, необходимо освободить его от имеющихся на нем данных.

[stextbox id=’warning’]Важный фактор вывода физического тома из группы томов является то, чтобы в группе томов было достаточно свободного места для размещения данных из выводимого физического тома.[/stextbox]

 

Освободить физический том (прим. /dev/sdb) от данных, можно несколькими путями:

  • Путем автоматического распределения данных на другие физические тома этого логического тома (pvmove /dev/sdb)
  • Путем указания на какой физический том переместить данные (pvmove /dev/sdb /dev/sdd)
sudo pvmove /dev/sdb
pvmove -- moving physical extents in active volume group "dev"
pvmove -- WARNING: moving of active logical volumes may cause data loss!
pvmove -- do you want to continue? [y/n] y
pvmove -- 249 extents of physical volume "/dev/sdb" successfully moved

 

Освобожденный от данных физический том (прим. /dev/sdb), можно выводить из группы томов, командой (vgreduce):

sudo vgreduce jakonda /dev/sdb 
Removed "/dev/sdb" from volume group "jakonda"

[stextbox id=’info’]Выводить физические тома из группы томов,можно без остановки работы системы.[/stextbox]

 

Физический перенос группы томов

Физический перенос группы томов с имеющимся в них логических томами, на другую систему выполняется командами (vgexport, vgimport).

 

Размонтируем все логические тома (прим. datastore1), входящие в группы томов (прим. jakonda) и деактивируем группу томов (прим. jakonda):

sudo unmount /mnt/jakonda/datastore1
sudo vgchange -an jakonda
vgchange -- volume group "jakonda" successfully deactivated

Экспортируем группу томов (прим. jakonda), командой (vgexport):

sudo vgexport jakonda
vgexport -- volume group "jakonda" sucessfully exported

[stextbox id=’info’]Процедура экспорта группы томов запрещает доступ к ней на данной системе и готовит ее к удалению.[/stextbox]

 

Выключаем машину, демонтируем диски (составляющие переносимую группу томов) и подключаем их к новой системе. Проверяем видит ли их система, командой (pvscan):

sudo pvscan 
pvscan -- reading all physical volumes (this may take a while...) 
pvscan -- inactive PV "/dev/sdb" is in EXPORTED VG "jakonda" [400 MB / 400 MB free] 
pvscan -- inactive PV "/dev/sdс" is in EXPORTED VG "jakonda" [450 MB / 244 MB free] 
pvscan -- total: 2 [1.95 GB] / in use: 2 [1.95 GB] / in no VG: 0 [0]

 

Импортируем группу томов (прим. jakonda), командой (vgimport):

sudo vgimport jakonda/dev/sdb /dev/sdс
vgimport -- doing automatic backup of volume group "jakonda"
vgimport -- volume group "jakonda" successfully imported and activated

Монтируем логические тома (прим. datastore1) в систему:

sudo mkdir -p /mnt/jakonda/datastore1 
sudo mount /dev/jakonda/datastore1 /mnt/jakonda/datastore1

 

Резервирование/Восстановление конфигурации группы томов

Резервирование и восстановление конфигурации определенной группы томов, выполняется командами (vgcfgbackup, vgcfgrestore). Файлы резервных копий находятся (/etc/lvm/backup).

 

Резервное копирование конфигурации группы томов (прим. jakonda), командой (vgcfgbackup):

sudo vgcfgbackup jakonda
Volume group "zoneminder" successfully backed up.

 

Восстановление конфигурации группы томов (прим. jakonda), командой (vgcfgrestore):

sudo vgcfgrestore jakonda
Restored volume group zoneminder

 

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

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

 

Деактивируем группу томов (прим. jakonda), командой (vgchange):

sudo vgchange -a n jakonda

Удаляем группу томов (прим. jakonda), командой (vgremove):

sudo vgremove jakonda
Volume group "jakonda" successfully removed

 

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

Создадим логический том (прим. jakonda) состоящего в группе томов datastore1, размером 50G, командой:

lvcreate -L 50G -n jakonda datastore1

Logical volume "jakonda" created

[stextbox id=’info’]Используемые ключи:
-L — Размер логического тома. Используются суффиксы: K (килобайты), M (мегабайты), G (гигабайты), T (терабайты).
-n — Название логического тома и принадлежность его к группе томов[/stextbox]

 

Форматируем созданный логический том jakonda в формат ext4:

mkfs.ext4 /dev/datastore1/jakonda

 

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

mkdir -p /mnt/datastore1/jakonda 
mount /dev/datastore1/jakonda /mnt/datastore1/jakonda

 

Отобразить информацию по логическим томам, можно командой (lvdisplay):

 --- Logical volume ---
 LV Path /dev/datastore1/jakonda
 LV Name jakonda
 VG Name datastore1
 LV UUID P1rdwe-Cpu5-6Dnj-RWPd-OZOn-NeNi-HeRuAY
 LV Write Access read/write
 LV Creation host, time srv-zm, 2018-02-14 09:02:05 +0300
 LV Status available
 # open 0
 LV Size 50,00 GiB
 Current LE 256
 Segments 1
 Allocation inherit
 Read ahead sectors auto
 - currently set to 256
 Block device 252:0

 

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

Увеличим размер логического тома (прим. jakonda) состоящего в группе томов datastore1 на 10Gb, командой:

lvextend -L +10G /dev/datastore1/jakonda

Extending logical volume datastore1 to 60,00 GiB
Logical volume jakonda successfully resized

 

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

resize2fs /dev/datastore1/jakonda

resize2fs 1.42.9 (4-Feb-2014)
Filesystem at /dev/datastore1/jakonda  is mounted on /mnt/datastore1/jakonda ; on-line resizing required old_desc_blocks = 4, new_desc_blocks = 4
The filesystem on /dev/datastore1/jakonda  is now 15728640 blocks long.

[stextbox id=’info’]Операцию по увеличению объема логического тома, можно производить на горячую, без остановки системы.[/stextbox]

 

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

Операция по уменьшению размера логического тома, возможно только на размонтированном логическом томе, в ином состоянии уменьшить размер логического тома нельзя.

[stextbox id=’warning’]Перед выполнением операции уменьшения размера логического тома, желательно иметь резервную копию данных с логического тома.[/stextbox]

[stextbox id=’alert’]Важно соблюдать последовательность действий, во избежании потери данных с логического тома!!![/stextbox]

 

Выполним уменьшение логического тома (прим. jakonda) состоящего в группе томов datastore1 на 10Gb от текущего размера (60G).

 

Демонтируем логический том jakonda из системы и проверяем его на наличие ошибок:

umount /dev/datastore1/jakonda
e2fsck -f /dev/datastore1/jakonda

[stextbox id=’info’]Используемый ключ -f в утилите e2fsck, означает выполнение принудительной проверки, даже если файловая система помечена как чистая[/stextbox]

 

Уменьшаем размер файловой системы логического тома jakonda, командой:

resize2fs /dev/datastore1/jakonda 50G

[stextbox id=’alert’]где 50G — это итоговый размер, который мы хотим задать для файловой системы, а не на который мы хотим уменьшить файловую систему.[/stextbox]

 

Теперь уменьшим размер самого логического тома jakonda, командой:

lvreduce -L -10G /dev/datastore1/jakonda

  WARNING: Reducing active logical volume to 50,00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce datastore1/jakonda? [y/n]: y
  Size of logical volume datastore1/acronis changed from 60,00 GiB (287744 extents) to 50,00 GiB (262144 extents).
  Logical volume datastore1/jakonda successfully resized.

 

После завершения операции, монтируем логический том jakonda в систему и следом монтируем его к папке:

mount /dev/datastore1/jakonda 
mount /dev/datastore1/jakonda /mnt/datastore1/jakonda

 

 

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

Перед удалением логического тома он должен быть размонтирован из системы.

 

Размонтируем логический том (прим. jakonda) из группы томов datastore1 и выполняем его удаление:

umount /dev/datastore1/jakonda

lvremove /dev/datastore1/jakonda

Do you really want to remove and DISCARD active logical volume jakonda? [y/n]: y
 Logical volume "jakonda" successfully removed

Обсуждение

2 комментариев
  • а зачем везде перед командами писать sudo?

    • Это ответ на комментарий Qasd

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