Головна

Робота з LVM

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т}