Использование LVM облегчает конфигурирование дискового пространства. Если нужно добавить больше дискового пространства в LVM, достаточно расширить ваш LVM раздел (LVM volume) за счет свободного места в группе LVM (LVM group).
Также если вдруг вы заметите что один их ваших физических дисков в LVM group выходит из строя вы можете добавить новый физический жёсткий диск в LVM group и перенести данные на новый жесткий диск. В целом можно сделать это и без LVM копируя всё на внешний носитель, после заменить диск и вернуть все данные назад. Но в таком случае вам придётся останавливать сервисы, которые пишут на этот диск.
Еще один плюс — это возможность объединить большое количество жестких дисков в один. Например, у вас есть 4 диска по 2ТБ и вам надо отдать их все под базы данных при этом гораздо проще будет если бд будут хранится на одном разделе, а не на 4. Вот в такой ситуации вы объединяете все 4 диска и получаете раздел размером в 8 ТБ.
LVM даёт возможность делать snapshots. Что означает что вы можете сделать снимок раздела на определённый момент и уже по необходимости откатится к нему в будущем. Особенно полезно для всяких экспериментов.
Также в LVM реализованы все уровни RAID, но считается что это не совсем прямое предназначение LVM.
PD/Physical devices
Physical devices - это физические устройства, которые предоставляются для LVM group и где хранятся данные. Под Physical devices подразумевается разделы жд, физические жд, RAID массивы
, SAN устройства
.
Устройства должны быть инициализированы как LVM Physical volume чтобы их можно было использовать в LVM.
PV/Physical volumes (Физические тома)
Physical volumes - это базовое физическое хранилище используемое в LVM. Первым делом нужно инициализировать ваше устройство хранения данных как Physical volume для использования в LVM.
Инструменты LVM сегментируют Physical volumes на физические экстенты (Physical extends) которые представляют из себя небольшие фрагменты данных, которые действуют как минимальный блок хранения.
По сути является специальной файловой системой для LVM, где помимо прочего хранятся метаданные указывающие к какой VG относится устройство.
У каждого Physical volume есть свой супер-блок где хранятся метаданные о VG, который находится в начале диска.
VG/Volume groups (Группа томов)
Volume groups - это пулы хранения (Storage pools), состоящие из одного или множества Physical volume. Т.е. можно сказать что Volume group то же самое что и LUN
в схд, или одно общее единое пространство. Один Physical volume может быть назначен только одной Volume group. Может состоять из любого количества Physical Volumes и также расширятся в будущем. Хранит метаданные о том в каком PV находятся Physical extends и в каком Logical Volume находятся Logical extends и сопоставляет их.
Если разбирать преимущества LVM которые я описывал ранее можно сказать что как раз благодаря VG мы и получаем 4 диска объединённые в один, размером 8ТБ.
LV/Logical Volumes (Логические тома)
Logical Volumes - это набор из Logical extends, который соответствует Physical extends и имеют одинаковый размер. Logical extends сопоставляются с Physical extends и хранятся там же и не обязательно что все Logical extends одного LV хранятся на Physical extends одного PV. Также можно расширять LV благодаря наличию свободны Physical extends в PV. Каждый кусок Logical extends можно перенести на другой Physical extends, как раз имеется в виду ситуация с заменой диска не останавливая работу приложений.
Получается при использовании обычных разделов вы не можете создать раздел который начинается в начале диска, потом прерывается на середине и потом снова продолжается в конце. В LVM же благодаря Logical extends и Physical extends такое возможно.
Именно их мы и монтируем в ОС как разделы, создаются они из пространства VG.
Создаём LVM
После всей теории мы наконец переходим к практике.
Подготовка PD
Используя parted
, о котором я писал тут создаём новые разделы для LVM. При использовании раздела для LVM тип раздела должен быть Linux LVM.
- Выводим список всех дисков
sudo parted -l
- Создаём таблицу разделов и раздел
sudo parted /dev/sdd mklabel gpt
sudo parted /dev/sde mklabel gpt
sudo parted /dev/sdf mklabel gptsudo
sudo parted /dev/sdd mkpart primary 1049kB 3220MB
sudo parted /dev/sde mkpart primary 1049kB 3220MB
sudo parted /dev/sdf mkpart primary 1049kB 3220MB
sudo parted /dev/sdd print
Number Start End Size File system Name Flags
1 1049kB 3220MB 3219MB primary
sudo parted /dev/sdd set 1 lvm on
sudo parted /dev/sde set 1 lvm on
sudo parted /dev/sdf set 1 lvm on
sudo parted /dev/sdd print
Number Start End Size File system Name Flags
1 1049kB 3220MB 3219MB primary lvm
set 1 lvm on
- это просто маркер чтобы пользователю ОС было понятно, что это LVM диск. Ядро же понимает, что это LVM благодаря типу раздела в таблице разделов. Например Коды типов разделов для mbr и GUID для gpt. Но при использовании LVM тип раздела прописывается в супер-блоке самого раздела и даже если в MBR
или GPT
стоит другой тип, то ядро выберет тип, который в супер-блоке, т.е. LVM. Про MBR
и GPT
я также писал ранее.
Создаём PV
Для этого используем pvcreate
и указываем наши PD. Команда pvcreate
делит наш PV на Physical extends, по умолчанию блоки по 4Мб.
sudo pvcreate /dev/sdd1 /dev/sde1 /dev/sdf1
sudo pvdisplay
Создаём VG
Для этого используем команду vgcreate
где указываем название группы и наши PV. Если делать аналогии, то по сути вы получаете после vgcreate
один большой HDD.
sudo vgcreate VG01 /dev/sdd1 /dev/sde1 /dev/sdf1
sudo vgdisplay
--- Volume group ---
VG Name VG01
System ID
Format lvm2
Metadata Areas 3
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 3
Act PV 3
VG Size <8.99 GiB
PE Size 4.00 MiB
Total PE 2301
Alloc PE / Size 0 / 0
Free PE / Size 2301 / <8.99 GiB
VG UUID 33R3E3-wMFp-5xKi-HdVr-cKir-6efI-Fv2qMH
Команда создаст VG с именем VG01
и размером 6Гб
.
Создаём LV
LV создаём используя команду lvcreate
и указываем имя LV и его размеры и в конце имя VG. При этом используя опцию -L вы задаёте размер в байтах, а при использовании -l в Physical extends.
sudo lvcreate -n LV01 -l 1000 VG01
sudo lvcreate -n LV02 -L 700M VG01
sudo lvdisplay
--- Logical volume ---
LV Path /dev/VG01/PV01
LV Name PV01
VG Name VG01
LV UUID HAxIpl-uJxf-YxdI-QIvT-3vbK-MHCi-ZmhjY6
LV Write Access read/write
LV Creation host, time mylab-vm-4.dc2.my.local, 2021-10-02 17:12:30 +0600
LV Status available
# open 0
LV Size <3.91 GiB
Current LE 1000
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2
--- Logical volume ---
LV Path /dev/VG01/PV02
LV Name PV02
VG Name VG01
LV UUID ic8QE3-bKiB-SMua-OR1c-Ax8a-IrM3-DKdP1M
LV Write Access read/write
LV Creation host, time mylab-vm-4.dc2.my.local, 2021-10-02 17:12:55 +0600
LV Status available
# open 0
LV Size 700.00 MiB
Current LE 175
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:3
Создаём файловую систему на LV
Для этого используем уже знакомую нам утилиту mkfs
.
sudo mkfs.ext4 /dev/VG01/LV02
sudo mkfs.ext4 /dev/VG01/LV01
Монтируем наш LV
Ну и последним шагом будет монтирование в ОС.
sudo mkdir /my-lvm-01
sudo mkdir /my-lvm-02
sudo vim /etc/fstab
/dev/VG01/LV01 /my-lvm-01 ext4 defaults 0 0
/dev/VG01/LV02 /my-lvm-02 ext4 defaults 0 0
sudo mount -a
df -h
Удаляем LV
Для этого используем команду lvremove
и передаём ей полный путь к LV.
sudo umount /my-lvm-01
sudo umount /my-lvm-02
sudo lvremove /dev/VG01/LV01
sudo lvremove /dev/VG01/LV02
Удаляем VG
Для этого используем команду vgremove
и передаём ей имя VG.
sudo vgremove VG01
Удаляем PV
Для этого используем команду pvremove
и передаём ей имя PD.
sudo pvremove /dev/sdd1 /dev/sde1 /dev/sdf1
Комментарии