Робота з LVM
- Деталі
- Категорія: Servers (uk)
- Опубліковано: Четвер, 03 січня 2019, 16:24
- Автор: Super User
- Перегляди: 5674
Logical Volume Manager (LVM) - це дуже потужна система управління томами з даними для Linux. Вона дозволяє створювати поверх фізичних розділів (або навіть нерозбитих вінчестерів) логічні томи, які в самій системі буде видно як звичайні блокові пристрої з даними (тобто як звичайні розділи). Основні переваги LVM в тому, що по-перше одну групу логічних томів можна створювати поверх будь-якої кількості фізичних розділів, а по-друге розмір логічних томів можна легко змінювати прямо під час роботи. Крім того, LVM підтримує механізм снапшотів, копіювання розділів «на льоту» і дзеркалювання, подібне RAID-1.
LVM збільшує гнучкість файлової системи, однак, будучи просто проміжним шаром, не скасовує обмеження і використання інших шарів, а також ускладнює роботу. Тобто, як і раніше потрібно створювати і змінювати розділи, форматувати їх; зміна розміру має підтримуватися також і самою файловою системою.
Так само хотілося б звернути увагу на один важливий момент. При використанні LVM не слід намагатися розподілити весь наявний дисковий простір в логічні томи. Слід створити розділи з мінімально необхідним розміром, а потім, при необхідності збільшити їх до необхідного розміру за рахунок резервного вільного місця.
Создание разделов на LVM
Для початку потрібно встановити підтримку LVM в нашій системі.
# apt-get install lvm2
У нас є три вільних фізичних диска - sdb, sdc та sdd. Створимо LVM-розділ на перших двох з них.
Спочатку на цих дисках створимо фізичні томи LVM:
# pvcreate /dev/sdb
# pvcreate /dev/sdc
Тепер створимо групу томів з довільною назвою, наприклад, study:
# vgcreate study /dev/sdb /dev/sdc
В результаті ми повинні отримати виведення:
Volume group "study" successfully created
Після цього можна створювати логічні томи:
# lvcreate -n lv1 -L 5G study
# lvcreate -n lv2 -L 6G study
Тепер у нас є блокові пристрої /dev/study/lv1 и /dev/study/lv2. З ними можна працювати так само, як і зі звичайними розділами.
# mkfs.ext4 /dev/study/lv1
# mkfs.ext4 /dev/study/lv2
І можемо їх примонтувати до системи
Для цього створимо в системі точки монтування:
# mkdir /mnt/lv1
# mkdir /mnt/lv2
І примонтуємо розділи
# mount /dev/study/lv1 /mnt/lv1
# mount /dev/study/lv2 /mnt/lv2
Ввівши команду df -h ми побачимо інформацію про ці розділи
/dev/mapper/study-lv1 5,0G 138M 4,6G 3% /mnt/lv1
/dev/mapper/study-lv2 6,0G 140M 5,5G 3% /mnt/lv2
Тобто їх розмір 5 і 6 Gb, як ми і вказували при створенні.
Додавання фізичних томів
Якщо нам буде потрібно збільшити розмір якогось розділу всередині LVM, то для цього нам знадобиться, звичайно, вільне місце. Додамо в LVM диск sdd.
Створимо на ньому фізичний том:
# pvcreate /dev/sdd
І додамо його в групу томів study:
# vgextend study /dev/sdd
Тепер можна створити ще один логічний диск за допомогою lvcreate або збільшити розмір існуючого за допомогою команди lvresize.
Збільшимо розділ lv1 до 15 Gb.
# lvresize -L 15G study/lv1
Далі треба збільшити розмір файлової системи
# resize2fs /dev/study/lv1
Якщо після цього подивитися інформацію про розділи командою df -h, то ми побачимо
/dev/mapper/study-lv1 15G 141M 14G 1% /mnt/lv1
Тобто розмір розділу дійсно змінився.
Аварійна робота з LVM
Будь-яка система, і тим більше вінчестери, не надійна. І рано чи пізно ви потрапите в ситуацію, коли вінчестер починає давати збої. При використанні LVM є кілька варіантів захисту себе в таких ситуаціях.
Заміна диска нальоту.
Припустимо, що у нас почалися проблеми з диском /dev/sdd. Замінимо його на диск /dev/sde без вимикання системи.
Для цього створимо фізичний том на новому диску
# pvcreate /dev/sde
Та додамо його в групу томів study:
# vgextend study /dev/sde
Тепер нам потрібно перемістити інформацію з диска sdd на новий sde:
# pvmove /dev/sdd /dev/sde
/dev/sdd: Moved: 0,7%
/dev/sdd: Moved: 30,7%
/dev/sdd: Moved: 63,5%
/dev/sdd: Moved: 97,3%
/dev/sdd: Moved: 100,0%
Переміщення інформації займе якийсь час в залежності від обсягу диска.
Після закінчення переміщень видалимо збійний диск з групи томів:
# vgreduce study /dev/sdd
Removed "/dev/sdd" from volume group "study"
Тепер у нас все працює, збійний диск відключений і все це не припиняючи роботи сервера, буквально по живому.
Створення снапшотів LVM
Сфери застосування снапшотів можуть бути найрізноманітнішими. Наприклад, резервне копіювання бази даних. Якщо не використовувати LVM - базу даних необхідно зупиняти, копіювати її файли абикуди для подальшого резервного копіювання, а потім запускати її заново. Тобто робити це доведеться в неробочий час. З LVM все простіше - слід зробити знімок розділу з файлами бази даних і вже можна починати робити резервну копію. Зупинка бази даних не потрібна.
Найцікавіша особливість LVM при роботі зі знімками - це те, що знімок може займати менше дискового простору, ніж оригінал. Для цього використовується режим Copy-on-Write, при якому реальне використання дискового простору починається тільки при зміні даних на томі-оригіналі. Тобто при спробі модифікації файлу на томі-оригіналі незмінений файл спочатку зберігається на томі-знімку, а вже потім модифікується.
УВАГА! При заповненні тома-знімка до кінця, відбувається його знищення. Тобто том продовжує існувати, але ні змонтувати його, ні переглянути його вміст (якщо він був змонтований до цього) вже не вийде. Цю особливість слід обов'язково враховувати при завданні розміру тому-знімка в момент його створення.
Створення знімка виконується командою lvcreate:
# lvcreate -s -L 2M -n backup /dev/study/lv2
Rounding up size to full physical extent 4,00 MiB
Logical volume "backup" created
Ключ -s вказує, що створюємо ми саме снапшот, -n вказує ім'я створюваного тому, а /dev/study/lv2 показує з якого саме тому ми робимо знімок.
Команда lvscan покаже нам, що ми створили снапшот:
# lvscan
ACTIVE '/dev/study/lv1' [15,00 GiB] inherit
ACTIVE Original '/dev/study/lv2' [6,00 GiB] inherit
ACTIVE Snapshot '/dev/study/backup' [4,00 MiB] inherit
Тепер можете переконатися в тому, що зміни, що відбуваються з оригіналом, ніяк не вплинуть на снапшот.
Информаційні утиліти LVM
Отримати інформацію про групу томів
# vgdisplay
Отримати інформацію про створені логічні томи
# lvdisplay
Отримати інформацію про фізичні томи
# pvdisplay
{jcomments oт}