Linux notes #12 — Как работает LVM (Logical Volume Manager) в Linux

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

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

Выглядит это примерно так

Physical volume — /dev/sdb1 и /dev/sdc1 // физические тома (разделы и диски)
Volume group — vg1 // группа томов с общим пространством
Logical volume — lv1 и lv2 // разделы внутри группы томов (логические тома)

Добавим 2 новых диска в нашу виртуальную машину, чтобы всего их было 3, на одном сама система и 2 абсолютно новых. У меня например система стоит на /dev/sdb, и свободные диски сейчас это /dev/sda и /dev/sdc. У вас это может быть по-другому. 

sudo fdisk -l
Disk /dev/sdb: 100 GiB, 107374182400 bytes, 209715200 sectors
Disk model: QEMU HARDDISK

Disk /dev/sda: 2 GiB, 2147483648 bytes, 4194304 sectors
Disk model: QEMU HARDDISK

Disk /dev/sdc: 2 GiB, 2147483648 bytes, 4194304 sectors
Disk model: QEMU HARDDISK

Выполним

sudo fdisk /dev/sda

g

n

enter

enter

+200M // создадим раздел на 200МБ

n

2

enter

+400M

p

w

Создадим Physical volume

sudo pvcreate /dev/sda1

Посмотрим

sudo pvdisplay

Создадим Volume group

sudo vgcreate vg1 /dev/sda1

Проверим

sudo vgdisplay

Создадим Logical volume 

sudo lvcreate vg1 -n lv1 -l 100%FREE // при создании отдадим все свободное место

Если нужно указать конкретно объем

sudo lvcreate vg1 -n lv1 -L 196M

Проверим

sudo lvdisplay

Создадим файловую систему

sudo mkfs.ext4 /dev/vg1/lv1

sudo mkdir /mnt/newlv

Добавим в /etc/fstab

sudo nano /etc/fstab

/dev/mapper/vg1-lv1 /mnt/newlv ext4 defaults 0 0

Примонтируем и проверим

sudo mount - a

df -h

Допустим мы хотим увеличить место и возьмем второй диск

sudo pvcreate /dev/sdc

Полезная команда, на случай если на диске уже есть таблица разделов, но вы уверены, что хотите его добавить (АККУРАТНЕЕ С ДАННОЙ КОМАНДОЙ)

sudo wipefs -a /dev/sdc

Расширим Volume group и добавим новый диск

sudo vgextend vg1 /dev/sdc

sudo vgdisplay

sudo lvextend vg1/lv1 -L +500M

Если мы сейчас посмотрим размер с помощью команд

sudo lvdisplay
и
df -h

Мы увидим, что нам нужно сообщить ФС об изменениях

sudo resize2fs /dev/vg1/lv1

Проверяем

df -h

Все успешно

Все это можно было сделать и сразу

sudo lvextend vg1/lv1 -L +500M -r // -r в конце

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

lvremove — vgremove — pvremove

Поработаем со снапшотами

sudo nano /mnt/newlv/snapfile
Файл до изменений
sudo lvcreate -s -n newsnap -L 100M vg1/lv1

sudo lvs

lv1     vg1       owi-aos---  <1.17g                                                    
newsnap vg1       swi-a-s--- 100.00m      lv1    0.01    // запомним значение
sudo nano /mnt/newlv/snapfile
Файл после изменений
sudo lvs
lv1     vg1       owi-aos---  <1.17g                                                    
newsnap vg1       swi-a-s--- 100.00m      lv1    0.04     // видим что изменилось
sudo mount /dev/vg1/newsnap /mnt/newsnap/
sudo cat /mnt/newsnap/snapfile
Файл до изменений

sudo cat /mnt/newlv/snapfile 
Файл после изменений
sudo umount /mnt/newlv /mnt/newsnap

Можно удалить снапшот

sudo lvremove /dev/vg1/newsnap

или

sudo lvconvert --merge vg1/newsnap

sudo mount /mnt/newlv
sudo cat /mnt/newlv/snapfile
Файл до изменений
sudo lvs