Робота з LVM | INTROSERV
EUR
european

EUR

usa

USD

Ukraine Ua
Ex. VAT Ex. VAT 0%

Робота з LVM

LVM (Logical Volume Manager) — це система керування дисками, яка додає рівень абстракції над фізичним сховищем. Вона дає змогу гнучко розподіляти дисковий простір, змінювати його розмір без зупинки системи та створювати резервні копії на основі знімків. LVM широко використовується як рівень зберігання для віртуалізації. У зашифрованих системах LVM часто розміщується поверх пристрою, зашифрованого за допомогою LUKS, тому після одного розблокування стає доступною вся група томів.

У цій статті розглядаються встановлення LVM у Linux, створення фізичних томів, груп томів і логічних томів, зміна їхніх розмірів, робота зі знімками та використання thin provisioning.

Встановлення LVM

LVM за замовчуванням входить до більшості дистрибутивів Linux. Якщо він відсутній, встановіть пакет lvm2 за допомогою системного менеджера пакетів.

У Debian та Ubuntu:

sudo apt-get install lvm2

У RHEL, CentOS Stream, AlmaLinux та Rocky Linux:

sudo dnf install lvm2

Створення фізичного тому

Фізичний том (PV) є базовим будівельним блоком LVM на найнижчому рівні. Це може бути весь диск (наприклад, /dev/sdb) або окремий розділ (наприклад, /dev/sdb1).

Info

Використання цілого диска як PV спрощує подальші операції зміни розміру, оскільки спочатку не потрібно збільшувати розташований на ньому розділ. Використання розділу є кращим, якщо на диску також мають зберігатися дані, не пов'язані з LVM, або якщо інші системні інструменти очікують наявність таблиці розділів.

Створіть фізичний том за допомогою pvcreate:

sudo pvcreate /dev/sdb

Замініть /dev/sdb шляхом до вашого блокового пристрою.

Перевірте результат за допомогою pvdisplay:

sudo pvdisplay

У виведенні буде перелічено фізичні томи, якими наразі керує LVM, разом з їхнім розміром та інформацією про групу томів.

Створення групи томів

Група томів (VG) об'єднує один або кілька фізичних томів в єдиний пул сховища. З цього пулу створюються логічні томи.

Створіть групу томів з назвою vg0 з одного фізичного тому:

sudo vgcreate vg0 /dev/sdb

Або одразу з кількох фізичних томів:

sudo vgcreate vg0 /dev/sdb /dev/sdc

Перевірте результат за допомогою vgdisplay:

sudo vgdisplay

Створення логічного тому

Логічний том (LV) відображається в системі як звичайний блоковий пристрій. На ньому можна створити файлову систему та змонтувати її.

Створіть логічний том lv0 розміром 10 ГБ усередині групи томів vg0:

sudo lvcreate -n lv0 -L 10G vg0

Прапорець -n задає ім'я логічного тому, а -L — його розмір.

Перевірте результат за допомогою lvdisplay:

sudo lvdisplay

Створіть файлову систему на логічному томі:

sudo mkfs.ext4 /dev/vg0/lv0

Створіть точку монтування та змонтуйте файлову систему:

sudo mkdir -p /mnt/lv0 sudo mount /dev/vg0/lv0 /mnt/lv0

Нова файлова система тепер доступна в /mnt/lv0. Щоб автоматично монтувати її під час завантаження, додайте відповідний запис до /etc/fstab.

Info

LVM надає кожен логічний том за двома еквівалентними шляхами: /dev/<vg>/<lv> та /dev/mapper/<vg>-<lv>. У наведеному вище прикладі це /dev/vg0/lv0 та /dev/mapper/vg0-lv0. Обидва шляхи вказують на один і той самий пристрій; інструменти та конфігураційні файли можуть використовувати будь-який із них.

Щоб переглянути повну ієрархію PV/VG/LV разом зі звичайними блоковими пристроями, виконайте:

lsblk

Зміна розміру томів

LVM підтримує зміну розміру без зупинки системи на кожному рівні: фізичних томів, груп томів і логічних томів.

pvresize оновлює представлення LVM про фізичний том після зміни розміру базового блокового пристрою (наприклад, після збільшення віртуального диска в гіпервізорі):

sudo pvresize /dev/sdb

vgextend додає фізичний том до наявної групи томів, збільшуючи її розмір:

sudo vgextend vg0 /dev/sdc

vgreduce видаляє фізичний том із групи томів:

sudo vgreduce vg0 /dev/sdc

lvresize змінює розмір логічного тому. Наприклад, щоб додати 5 ГБ до lv0:

sudo lvresize -L +5G /dev/vg0/lv0

Або щоб розширити логічний том і використати весь вільний простір у групі томів:

sudo lvresize -l +100%FREE /dev/vg0/lv0

Info

Зверніть увагу на різницю між -L (велика літера) та -l (мала літера). Варіант із великою літерою приймає розмір із суфіксом одиниці, наприклад M, G або T. Варіант із малою літерою приймає кількість екстентів або відсоток.

Зміна розміру логічного тому не змінює розмір файлової системи на ньому. Використовуйте відповідний інструмент для конкретної файлової системи. Для ext2, ext3 та ext4:

sudo resize2fs /dev/vg0/lv0

Для XFS виконайте xfs_growfs для точки монтування файлової системи.

Для підтримуваних файлових систем, включно з ext4 та XFS, команда lvextend із прапорцем -r змінює розмір логічного тому та файлової системи за один крок:

sudo lvextend -r -L +5G /dev/vg0/lv0

Це найпоширеніший спосіб збільшення розміру без зупинки системи.

Warning

Зменшення логічного тому виконується у зворотному порядку: спочатку потрібно зменшити файлову систему і лише після цього логічний том. Якщо зробити навпаки, базовий пристрій буде обрізаний у той час, коли файлова система все ще вважає, що має початковий розмір, що призводить до знищення даних. Для ext4 операція виконується офлайн. Відмонтуйте файлову систему, виконайте sudo e2fsck -f /dev/vg0/lv0, зменште файлову систему за допомогою sudo resize2fs /dev/vg0/lv0 <new_size>, зменште логічний том до такого самого розміру за допомогою sudo lvresize -L <new_size> /dev/vg0/lv0, а потім знову змонтуйте файлову систему. XFS взагалі не підтримує зменшення розміру; єдиний спосіб зробити файлову систему XFS меншою — створити резервну копію, створити файлову систему меншого розміру та відновити дані.

Кожна з наведених вище команд підтримує --help для отримання повного списку параметрів.

Знімки LVM

Знімок фіксує стан логічного тому в певний момент часу. Він працює за механізмом copy-on-write: у міру зміни початкового логічного тому змінені блоки зберігаються в зарезервованому просторі знімка, тому знімок продовжує відображати початковий стан.

Знімки корисні для створення резервних копій працюючої файлової системи, узгоджених зі станом на момент збою, а також для тестування змін, які можна скасувати шляхом видалення знімка. Резервні копії, узгоджені з додатком, потребують додаткової координації, наприклад заморожування файлової системи або переведення додатка в стан очікування перед створенням знімка.

Створення знімка

Створіть знімок за допомогою lvcreate та прапорця -s:

sudo lvcreate -L 1G -s -n myvolume_snap /dev/myvg/myvolume

Це створить знімок myvolume_snap логічного тому myvolume у групі томів myvg, зарезервувавши 1 ГБ для змін. Вибирайте розмір зарезервованого простору залежно від обсягу даних, які, як очікується, зміняться протягом існування знімка: для майже неактивних томів потрібно мало місця, тоді як для томів з інтенсивним записом може знадобитися значна частина початкового розміру.

Для довготривалих знімків і сценаріїв із великою кількістю знімків розгляньте використання thin-знімків усередині thin pool. Вони отримують простір зі спільного пулу в міру потреби замість попереднього резервування фіксованого обсягу, що зазвичай є ефективнішим з точки зору використання простору.

Warning

Якщо початковий логічний том зміниться більше, ніж може вмістити знімок, знімок стане недійсним, а захоплені ним дані будуть втрачені. Розмір знімка має враховувати очікуваний обсяг змін протягом усього періоду його існування.

Використання знімка

Знімок можна змонтувати як будь-який інший логічний том. Для резервного копіювання та перевірки монтуйте його лише для читання, якщо доступ на запис справді не потрібен:

sudo mkdir -p /mnt/snapshot sudo mount -o ro /dev/myvg/myvolume_snap /mnt/snapshot

Після монтування знімок можна читати для резервного копіювання або перевірки.

Видалення знімка

Коли знімок більше не потрібен, видаліть його за допомогою lvremove:

sudo lvremove /dev/myvg/myvolume_snap

Видалення знімка звільняє зарезервований ним простір. Будь-які дані, записані безпосередньо у знімок, а не в початковий том, будуть втрачені.

Щоб повернути початковий том до стану, зафіксованого знімком, використовуйте lvconvert --merge замість lvremove:

sudo lvconvert --merge /dev/myvg/myvolume_snap

Після злиття знімок буде використаний і автоматично видалений. Якщо початковий том зараз використовується, злиття буде відкладено до наступної активації тому.

Thin provisioning

Thin pool — це спеціальний тип логічного тому, який виділяє простір для зберігання за потреби. Логічні томи, створені всередині нього (thin volumes), можуть мати заявлений розмір, що перевищує фактично доступний вільний простір у пулі, а реальне місце споживають лише записані блоки.

Ця технологія широко використовується у віртуалізації, де багато віртуальних дисків спільно використовують один пул сховища, але рідко всі одночасно досягають заявленої ємності.

Створення thin pool

Створіть thin pool mythinpool розміром 50 ГБ у групі томів myvg:

sudo lvcreate -L 50G -T -n mythinpool myvg

Прапорець -L задає розмір пулу, -T вказує lvcreate створити thin pool, а -n задає його ім'я. LVM виділяє пул із вільного простору групи томів; наприкінці команди можна вказати конкретні фізичні томи, якщо пул потрібно розмістити на певних пристроях.

Створення thin volume

Створіть thin volume mythinvolume розміром 10 ГБ усередині mythinpool:

sudo lvcreate -V 10G -T myvg/mythinpool -n mythinvolume

Прапорець -V задає віртуальний розмір thin volume, -T вказує thin pool, а -n задає ім'я нового тому.

Використання thin volume

Thin volume використовується так само, як будь-який інший логічний том. Створіть на ньому файлову систему:

sudo mkfs.ext4 /dev/myvg/mythinvolume

Після цього thin volume можна змонтувати та використовувати як звичайний блоковий пристрій.

Warning

Оскільки thin pool може використовувати overcommit, необхідно контролювати фактичне використання пулу. Простір даних і простір метаданих можуть вичерпуватися незалежно один від одного, і обидва є критичними: якщо thin pool під час запису в thin volume вичерпає простір даних або метаданих, операції запису до цього тому почнуть завершуватися з помилками.

Поточне використання простору даних і метаданих усіх логічних томів, включно з thin pool, можна перевірити за допомогою lvs:

sudo lvs -o +data_percent,metadata_percent

Коли значення data_percent або metadata_percent наближається до 100, розширте thin pool за допомогою lvextend, перш ніж він буде повністю заповнений.

Довідник команд

Поширені команди LVM, згруповані за рівнями.

Фізичні томи:

  • pvcreate ініціалізує блоковий пристрій як фізичний том.
  • pvdisplay показує детальну інформацію про фізичні томи.
  • pvs показує компактну зведену таблицю фізичних томів.
  • pvresize оновлює фізичний том після зміни розміру базового пристрою.

Групи томів:

  • vgcreate створює групу томів з одного або кількох фізичних томів.
  • vgextend додає фізичний том до групи томів.
  • vgreduce видаляє фізичний том із групи томів.
  • vgdisplay показує детальну інформацію про групи томів.
  • vgs показує компактну зведену таблицю груп томів.

Логічні томи:

  • lvcreate створює логічний том.
  • lvextend та lvresize змінюють розмір логічного тому.
  • lvremove видаляє логічний том.
  • lvconvert --merge об'єднує знімок назад із його вихідним томом.
  • lvdisplay показує детальну інформацію про логічні томи.
  • lvs показує компактну зведену таблицю логічних томів.

Для повсякденного використання короткі команди pvs, vgs та lvs зазвичай зручніші за докладні варіанти *display. Кожна команда підтримує --help для отримання повного списку параметрів.

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA