LVM

LVM a.k.a. Logical Volume Manager - технология, которая позволит тебе из управлять томами на жестких дисках более продвинуто. Достигается это за счет того, что работа с жесткими дисками происходит на уровне абстракций, о которых будет рассказано ниже. С помощью LVM можно изменять размер томов на лету, разметить разделы подобно RAID и использовать снапшоты. Для работы с LVM необходимы root права. Ну и конечно же проверьте, что у вас установлен пакет lvm2. ВАЖНО! GRUB не сможет загрузиться с LVM раздела! Не используйте LVM для /boot директории

  • Physical Volume (PV)

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

  • Volume Group (VG)

Этот уровень обозначает группу томов. Соответственно несколько PV можно собрать в один, например. Группе томов можно и нужно назначить имя.

  • Logical Volume (LV)

Самый последний уровень в этой системе. Обозначает уже сам целевой том который можно использовать.

Создание простого LVM из 2 дисков

Представим что есть задача обьединения двух жестких дисков, подключенных к системе. В нашем случае это HDD на 16 и 32 GB. Командой lsblk смотрим что у нас в системе:

mayekkuzu@debian-wiki:~$ lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda      8:0    0   32G  0 disk
├─sda1   8:1    0   31G  0 part /
├─sda2   8:2    0    1K  0 part
└─sda5   8:5    0  975M  0 part [SWAP]
sdb      8:16   0   16G  0 disk
sdc      8:32   0   32G  0 disk

Жесткие диски пустые, инициализируем PV на каждый из жестких дисков:

mayekkuzu@debian-wiki:~$ sudo pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.
mayekkuzu@debian-wiki:~$ sudo pvcreate /dev/sdc
Physical volume "/dev/sdc" successfully created.

Проверяем командой pvdisplay наши диски:

mayekkuzu@debian-wiki:~$ sudo pvdisplay
  --- Physical volume ---
  PV Name               /dev/sdc
  VG Name               mylvmgroup
  PV Size               32.00 GiB / not usable 4.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              8191
  Free PE               8191
  Allocated PE          0
  PV UUID               CHV3PB-5kYu-p2zS-ZmMJ-xB3X-VHvJ-pV5D1Y

  --- Physical volume ---
  PV Name               /dev/sdb
  VG Name               mylvmgroup
  PV Size               16.00 GiB / not usable 4.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              4095
  Free PE               4095
  Allocated PE          0
  PV UUID               ntBfx3-9eQ8-jfkZ-yD2x-n8fP-3BPk-L72R1x

Отлично. Можно создавать группу томов. Обязательно даем ему имя, например mylvmgroup:

mayekkuzu@debian-wiki:~$ sudo vgcreate mylvmgroup /dev/sdc /dev/sdb
Volume group "mylvmgroup" successfully created

Проверяем, создалась ли наша группа томов:

mayekkuzu@debian-wiki:~$ sudo vgdisplay
  --- Volume group ---
  VG Name               mylvmgroup
  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               47.99 GiB
  PE Size               4.00 MiB
  Total PE              12286
  Alloc PE / Size       0 / 0
  Free  PE / Size       12286 / 47.99 GiB
  VG UUID               zd1dzl-q5JN-EcuZ-6fP8-mQ5Q-qUA8-DrTo3H

Как видим теперь у нас массив из двух жестких дисков размером 48 GB. Создаем логический раздел. Весь обьем можно не использовать, представим что нам для наших задач хватит, допустим 12 GB:

mayekkuzu@debian-wiki:~$ sudo lvcreate -n myvolume -L12G mylvmgroup
Logical volume "myvolume" created.

Теперь посмотрим информацию о нашем логическом разделе:

mayekkuzu@debian-wiki:~$ sudo lvdisplay
  --- Logical volume ---
  LV Path                /dev/mylvmgroup/myvolume
  LV Name                myvolume
  VG Name                mylvmgroup
  LV UUID                Wf6xnH-WOkP-pPT1-cao3-JfsP-rY8O-hjKpV7
  LV Write Access        read/write
  LV Creation host, time debian-wiki, 2023-12-09 00:23:28 +0300
  LV Status              available
  # open                 0
  LV Size                12.00 GiB
  Current LE             3072
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:0

Как видим, наш логический диск теперь определяется как блочное устроиство. Теперь его можно смонтировать и отформатировать в нужную нам файловую систему. Стоит отметить, что наш логический раздел теперь можно найти как устроиство в /dev/mylvmgroup/myvolume Форматируем том в ext4

mayekkuzu@debian-wiki:~$ sudo mkfs.ext4 -L 12G_Data /dev/mylvmgroup/myvolume
mke2fs 1.47.0 (5-Feb-2023)
Discarding device blocks: done
Creating filesystem with 3145728 4k blocks and 786432 inodes
Filesystem UUID: 99ef979f-b7fb-4385-aee6-70befa437aa2
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208

Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

Монтируем в /mnt и проверяем командой lsblk, что раздел действительно примонтирован:

mayekkuzu@debian-wiki:~$ sudo mount /dev/mylvmgroup/myvolume /mnt
mayekkuzu@debian-wiki:~$ df -h
Filesystem                       Size  Used Avail Use% Mounted on
udev                             962M     0  962M   0% /dev
tmpfs                            197M  504K  197M   1% /run
/dev/sda1                         31G  1.3G   28G   5% /
tmpfs                            984M     0  984M   0% /dev/shm
tmpfs                            5.0M     0  5.0M   0% /run/lock
tmpfs                            197M     0  197M   0% /run/user/1000
/dev/mapper/mylvmgroup-myvolume   12G   24K   11G   1% /mnt

Можно полноценно работать с томом. Если планируется автоматическое монтирование для каких-то хотелок, можно прописать в /etc/fstab.

Изменение размера LV-тома

Например нужно увеличить размер на 12GB. Делается это таким образом. Нужно учесть момент, что в параметре lvresize нужно указать полный размер требуемого места. Тоесть к 12GB нужно добавить 12GB, получится 24GB:

mayekkuzu@debian-wiki:~$ sudo lvresize -L 24G mylvmgroup/myvolume
Size of logical volume mylvmgroup/myvolume changed from 12.00 GiB (3072 extents) to 24.00 GiB (6144 extents).
Logical volume mylvmgroup/myvolume successfully resized

Теперь нужно расширить файловую систему до 24GB внутри тома, этим нам поможет resize2fs:

mayekkuzu@debian-wiki:~$ sudo resize2fs /dev/mylvmgroup/myvolume
resize2fs 1.47.0 (5-Feb-2023)
Filesystem at /dev/mylvmgroup/myvolume is mounted on /mnt; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 3
The filesystem on /dev/mylvmgroup/myvolume is now 6291456 (4k) blocks long.

Проверяем, увеличился ли размер нашего тома:

mayekkuzu@debian-wiki:~$ df -h
Filesystem                       Size  Used Avail Use% Mounted on
udev                             962M     0  962M   0% /dev
tmpfs                            197M  504K  197M   1% /run
/dev/sda1                         31G  1.3G   28G   5% /
tmpfs                            984M     0  984M   0% /dev/shm
tmpfs                            5.0M     0  5.0M   0% /run/lock
tmpfs                            197M     0  197M   0% /run/user/1000
/dev/mapper/mylvmgroup-myvolume   24G   24K   23G   1% /mnt
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9