Translate

неділю, 9 червня 2013 р.

Використання Logical Volume Manager (LVM)

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

LVM (Logical Volume Manager) - менеджер логічних томів, додатковий рівень абстракції між фізичними (/dev/sda1, /dev/sda2 і  т.д.) та логічними томами ( /home, /root, /boot і т.д.), що значно підвищує гнучкість файлової системи. Використовуючи менеджер логічних томів, можна відносно легко змінювати розмір вже існуючих логічних томів (додавши новий HDD, можна просто пододавати місця на уже створені розділи, таким чином вирішивши проблему браку місця) чи робити бекапи без перевантаження/вимкнення/зупинки сервісів. Створення розділів з LVM не обмежене розміром фізичного диска, тобто один розділ може займати розмір декількох вінчестерів чи розділ може знаходитись частково на декількох HDD.

Отже схематично рівні знаходяться так:


PV- Physical volume, фізичний том. Це власне диск чи просто розділ на диску.
VG - Volume group, группа томів. Найвищий рівень абстрактної моделі LVS. До групи томів входять фізичні томи.
LV - Logical volume, логічний том. Власне це еквівалент звичайного розділу в не-LVM системі. В данному випадку Volume group поділяється на окремі розділи на зразок /dev/mapper/diskone, /dev/mapper/disktwo. Наділі кожний логічний том монтується в відповідну директорію /, /usr, /home і т.д.

Переходимо до практики. Перш за все встановимо пакет для підтримки LVM:

# apt-get install lvm2

Необхідно створити чи використати існуючі неформатовані розділи. За допомогою fdisk я створив два тестових розділи /dev/sda7 та /dev/sda8 і ініціалізував їх для використання як розділів для LVM:

# pvcreate /dev/sda7
# pvcreate /dev/sda8

Створюємо групу томів, що складається із вищезгаданих дисків:

# vgcreate vg01 /dev/sda7 /dev/sda8

Створюємо логічний том в групі vg01:

# lvcreate -L5G -npupkin vg01

-L - розмір, в конкретному випадку 5 Гб.
-n - назва розділу, я обрав назву pupkin
vg01 - група, котра була попередньо створена.

Новостворений розділ /dev/vg01/pupkin тепер необхідно відформатувати в необхідній файловій системі. Для цього скористуємось, наприклад, програмою mkfs:

# mkfs.ext3 /dev/vg01/pupkin

Для ext4 форматувати слід таким чином:

# mkfs.ext4 /dev/vg01/pupkin

Для інших файлових систем приклад форматування можна з легкістю знайти в інтернеті.
Тепер нарешті можна змонтувати відформатований розділ:

# mount -t ext3 /dev/vg01/pupkin /media/films

# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/sdb1                 19G   17G  1,3G  93% /
none                     4,0K     0  4,0K   0% /sys/fs/cgroup
udev                     2,9G  4,0K  2,9G   1% /dev
...
tmpfs                    2,9G   96K  2,9G   1% /var/tmp
/dev/sdb5                 37G   24G   12G  67% /home
/dev/sda5                258G  243G  2,3G 100% /media/other
/dev/mapper/vg01-pupkin  5,0G  252M  4,5G   6% /media/films

Звісно, що директорія /media/films має існувати перед монтуванням. Власне все, розділ створений і готовий до свого прямого використання.

Часом місця на розділі може стати замало для певних дій і надалі піде мова про збільшення розділу. Спочатку перевіримо наявність вільного місця на LVM-групі vg01:

# vgdisplay vg01
  --- Volume group ---
  VG Name               vg01
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               33,37 GiB
  PE Size               4,00 MiB
  Total PE              8543
  Alloc PE / Size       2560 / 5,00 GiB
  Free  PE / Size       5982 / 23,37 GiB
  VG UUID               ksMPGT-1wke-d051-fgTn-gBaA-bI2x-ZT9JTs

Як бачимо, у моєму випадку на диску вільно  23,37 ГБ. Якщо ж необхідного місця замало, то э можливість додати в групу vg01 новий HDD необхідного об'єму:

# pvcreate /dev/sdb
# vgextend vg01 /dev/sdb

Збільшити ж розділ можна таким чином:

# lvextend -L10G /dev/vg01/pupkin
  Extending logical volume pupkin to 10,00 GiB
  Logical volume pupkin successfully resized

У даному прикладі розділ було збільшено до 10 ГБ.
А так можна збільшити розмір логічного тому на 5 ГБ:

# lvextend -L+5G /dev/vg01/pupkin
  Extending logical volume pupkin to 15,00 GiB
  Logical volume pupkin successfully resized

Надалі необхідно відмонтувати розділ і "розширити" файлову систему на розділі:

# umount /dev/vg01/pupkin

# resize2fs /dev/vg01/pupkin
resize2fs 1.42.5 (29-Jul-2012)
Resizing the filesystem on /dev/mapper/vg01-pupkin to 3932160 (4k) blocks.
The filesystem on /dev/mapper/vg01-pupkin is now 3932160 blocks long

Часом resize2fs запитує перевірку розділу, котру можна виконати таким чином:

# e2fsck -f /dev/vg01/pupkin
e2fsck 1.42.5 (29-Jul-2012)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/mapper/vg01-pupkin: 34/327680 files (5.9% non-contiguous), 84936/1310720 blocks

І знову монтуємо розділ в необхідну директорію:

# mount /dev/vg01/pupkin /media/films

І знову можна перевірити стан LVM-групи vg01:

# vgdisplay vg01
  --- Volume group ---
  VG Name               vg01
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               33,37 GiB
  PE Size               4,00 MiB
  Total PE              8543
  Alloc PE / Size       3840 / 15,00 GiB
  Free  PE / Size       4703 / 18,37 GiB
  VG UUID               ksMPGT-1wke-d051-fgTn-gBaA-bI2x-ZT9JTs

Як бачимо, значення Alloc PE та Free  PE дещо змінились. Також розмір диску можна глянути за допомогою утиліти df.
За допомогою LVM також можна робити снапшоти стану файлової системи, без відмонтування діючого розділу:

# lvcreate -L1G -s -n backup -p r /dev/vg01/pupkin
   Logical volume "backup" created

-p r - тільки з правами на читання
-s - створення снапшоту
-n - ім'я розділу

Монтуємо снапшот:

# mkdir backup
# mount /dev/vg01/backup /media/backup

І копіюємо дані, котрі нам необхідні. Снапшот файлової системи буде створено на період виконання команди lvcreate.
Якщо снапшот більше не потрібен, то його можна із легкістю видалити:

# umount /media/backup
# lvremove /dev/vg01/backup
  Do you really want to remove active logical volume backup? [y/n]: y
  Logical volume "backup" successfully removed

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

# dd if=/dev/zero of=/media/films/img.img count=100 bs=10240k
100+0 records in
100+0 records out
1048576000 bytes (1,0 GB) copied, 40,0484 s, 26,2 MB/s
root@hp-probook:/media# hdparm -t /dev/mapper/vg01-pupkin

І без:

# dd if=/dev/zero of=/media/films/img.img count=100 bs=10240k
100+0 records in
100+0 records out
1048576000 bytes (1,0 GB) copied, 7,45882 s, 141 MB/s
root@hp-probook:/media# 

Звісно, коли lvm-розділ більше не потрібний, групу можна просто видалити і попередньо розмонтувати та деактивувати:

# umount /media/films
# vgchange -a n vg00
  0 logical volume(s) in volume group "vg01" now active

# vgremove vg01
Do you really want to remove volume group "vg01" containing 1 logical volumes? [y/n]: y
Do you really want to remove active logical volume pupkin? [y/n]: y
  Logical volume "pupkin" successfully removed
  Volume group "vg01" successfully removed

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

PS. Вивести всі volume групи та з яких блочних пристроїв вони складаються можна таким чином:

# pvscan
  PV /dev/vda2   VG VolGroup00   lvm2 [19.78 GiB / 0    free]
  Total: 1 [19.78 GiB] / in use: 1 [19.78 GiB] / in no VG: 0 [0 ]

А так можна побачити які логічні розділи (LV,  logical volume) знаходяться на кожній volume групі:

# pvdisplay -m

Посилання:
Повесть о Linux и LVM (Logical Volume Manager)
http://www.markus-gattol.name/ws/lvm.html
LVM HOWTO
http://habrahabr.ru/post/111503/

Немає коментарів:

Дописати коментар