Jak ustawić LVM, jak robić snapshoty oraz automatycznie powiększać LV, czyli małe howto

1. Co to jest i do czego służy

LVM (Logical Volume Manager) pozwala na grupowanie urządzeń w wirtualne Volume Group (VG, nie lubię polskich tłumaczeń ;p) z których potem można tworzyć Logical Volume (LV) czyli taki wirtualny odpowiednik partycji dyskowych.

1.1 No dobra, ale po co mi coś takiego ?

LV różnią się od fizycznych partycji tym że po pierwsze, jeden LV może rozciągać się po paru fizycznych dyskach, oprócz tego obsługuje zmianę rozmiaru w locie, wiec jeżeli kiedyś zabraknie Ci miejsca możesz po prostu dorzucic drugi dysk, dodać go do VG i powiększyć LV o dodatkowe miejsce.

1.2 Czym to się różni od RAID i dlaczego nie uzyć RAID zamiast tego

RAID Pozwala na zgrupowanie dyskót tak żeby były widziane przez system jako jeden, ale nie pozwala na takie rzeczy jak zmienianie rozmiaru partycji w locie, snapshoting (wiecej o tym pozniej) czy zwiekszanie rozmiaru dostepnego storage.

Opórcz tego RAID świętnie współgra z LVM, wystarczy użyć RAID-u jako bazę do LVMowego VG i można cieszyć się bezpiecznym i elastycznym storage.

2.  Ok, chce mieć u siebie LVM, jak zacząć ?

Pokażę to sposób instalacji i konfiguracji LVM pod debianem, pod innymi distro powinno to wygladać podobnie, po dokładniejsze instrukcje instalacji zapraszam do LVM HOWTO

2.1 Instalacja niezbędnego softu

Narzędzia userspace:

aptitude install lvm2 reiserfsprogs

Kernel:

W kernelu musisz mieć włączone (zalecam wkompilowane w kernel):

Device Drivers -> Multiple devices driver support (RAID and LVM) -> Device mapper support
[*] Snapshot target
[*] Mirror target
[*] DM uevents

2.1 Mój pierwszy LVM

Na początku musimy przygotować partycje pod LVM:

pvcreate /dev/sdc1

Następnie tworzymy nowy VG:

vgcreate testvg /dev/sdc1

Mozna podac pare PV (Physical volume) przy tworzeniu, nalezy tylko pamietac o zainicjowaniu ich przez pvcreate

Teraz mozemy juz utworzyc pierwszy LV

lvcreate -L 10G -n muzyka testvg

Tworzy nam LV o nazwie muzyka w LV testvg o rozmiarze 10G
Urządzenie które reprezentuje ten LV to /dev/mapper/testvg-muzyka (na marginesie debian tworzy tez /dev/testvg/muzyka nie wiem jak inne distro) wiec teraz mozemy stworzyć i zamontować partycje:

mkreiserfs /dev/mapper/testvg-muzyka
mount
/dev/mapper/testvg-muzyka /var/music

Analogocznie można tworzyć dodatkowe LV. Polecam reiserfs z powodu tego ze mozna go latwo resizowac w locie ;].

2.2 Zabrakło mi miejsca na jakimś LVM, co robić ?

Możesz zwiększyć wielkość LV i systemu plików na nim. Najpierw sprawdź czy masz miejsce na VG:

vgdisplay testvg
— Volume group —
VG Name               testvg
System ID
Format                lvm2
Metadata Areas        1
Metadata Sequence No  152
VG Access             read/write
VG Status             resizable
MAX LV                0
Cur LV                2
Open LV               1
Max PV                0
Cur PV                1
Act PV                1
VG Size               180,25 GB
PE Size               128,00 MB
Total PE              1442
Alloc PE / Size       504 / 63,00 GB
Free  PE / Size       938 / 117,25 GB
VG UUID               WNqUPq-g2x2-BMwg-83Pq-D26a-XpYV-qTZNAF

Jak widac mamy jeszcze troche wolnego miejsca. Teraz tylko

lvresize -L +10G /dev/mapper/testvg-muzyka
resize_reiserfs -s +10G /dev/mapper/testvg-muzyka

i voila, mamy wiecej miejsca na nasze MP3 ;]

2.3 Cool ale mój dysk jest pełen, jak dodać nowe urządzenie do LVM?

pvcreate /dev/sdd
vgextend testvg /dev/sdd

I tyle. Teraz tylko powiększyć twoje LV.

3 Zaawansowane zastosowania

3.1 Snapshot

Zacznę może od końca. Wyobraź sobie że masz do zrobienia backup jakiegoś dużego “czegoś”. Nieważne czy to strona, czy jakiś fileshare, masz 50GB do zbackupowania. Nis prostrzego, piszesz jakiś skrypt lub używasz jakiegoś softu typu Bacula, 2h i backup zrobiony. Jest tylko jeden problem.

Pliki zmieniają się podczas backupowania. Jakiś soft zmienia wlasnie coś w pierwszej części pliku podczas gdy program wlaśnie backupuje drugą cześć tego pliku i w rezultacie plik się popsuł. Jak temu zaradzić ?

Snapshot w LVM jest to obraz systemu plików z danego momentu. Jak to działa ? Przydzielasz snapshotowi powiedzmy 15GB i dopóki na LV-matce nie zmieni się 15GB (przy czym wielokrotne zmieny w tym samym miejscu dysku liczone sa jako jedna zmiana) to snapshot bedzie pokazywał stan z danego czasu

Działa to tak że od zrobienia snapshotu każdy zapis na LV-matce powoduje to że stara zawartość kopiowana jest na LV-snapshot.

Co to nam daje ? To że można zrobić snapshot np. bazy danych (chociaż lepszą opcją jest backupowanie bazy przez zrobienie jej dumpa na dysk) o 23:20, potem odpalic na nim backup i ma się pewność że przez najbliższe 30 min podczas robienia backupu nic sie na tym nie zmieni, tworząc działający backup

Ułatwia też np. takie rzeczy jak testowanie nowych appów, czy updatów. Tworzymy snapshot naszego appa, potem robimy upgrade na snapshocie, sprawdzamy czy działa, usuwamy snapshot.

No to jak to zrobić ?

lvcreate –size 10G –snapshot –name appsnap /dev/mapper/testvg-app
mount /dev/mapper/testvg-appsnap /mnt/mirror

I tyle. Należy tylko pamietać ze do dziala do 10G zmian na dysku, oczywiście rozmiar można odpowiedni zwiększyć/

Usuwanie:

umount /dev/mapper/testvg-app
lvremove /dev/mapper/testvg-app

I teraz uwaga. LV z podłączonym snapshotem będzie miał obniżoną wydajność podczas zapisu.
Dlaczego ? Ponieważ gdy app chce zapisać np. blok nr. 2697 to LVM musi:
1.Odczytać ten blok z oryginalnego LV
2.Zapisać go w mirrorze (żeby mieć jego starą wersję w snapshocie)
3.Zapisać go w oryginale.
Gdy app po raz drugi będzie chciała blok 2697 to LVM już nie będzie tego robić ponieważ ma już starą wersję na snapshocie, ale przy pierwszym zapisie jest dość duży overhead

3.2 Mirroring

Czyli jak zrobić prosty RAID 1

przy tworzeniu LV przy pomocy lvcreate, dodać
-m 1
przy czym “1” to liczba dodatkowych kopii czyli np “-m 3” zapisze w sumie w 4 miejscach (oryginał + 4 kopie)
Oczywiście musimy mieć odpowiednią ilość PV (dysk./part. fizycznych) w VG. UWAGA! LVM nie rozróżnia czy PV dodane do VG są na tym samym dysku czy różnym wiec raczej należy się trzymać zasady “1 dysk – 1 PV”

3.3 Stripping (czyli mini RAID0)

Nie, nie striptiz, striping polega na rozdzieleniu jednego LV na parę dysków fizycznych, taki prosty RAIDzik0.
Dodaj przy tworzeniu LV do lvcreate:
-i 2
I raid0 gotowy. numer określa (oczywiście) na ile należy podzielić.
Dodaj:
-I 128
żeby ustalić wielkość bloku (tylko potęgi dwójki).

4.Auto-resize

No dobra wypatrywanie kiedy się skończy miejsce na dysku i potem klepanie komend z konsoli nie jest zbyt ciekawym sposobem spędziania czasu ;] Napisałem malutki program w perlu robiący to za nas:

http://devrandom.pl/wp-content/uploads/2008/12/lvautoresize.tar.gz

kopiujemy plik lvautoresize.conf do /etc/ i odpalamy program, wczyta on dane z configa, popatrzy na systemy plików i powiękrszy co trzeba. Za wszelkie spsucia przez ten program nie odpowiadam ;] Plik konfiguracyjny jest w XMLu, wszystkie dane w MBajtach. Proponuje dodać ten programik do crona, co godzinę;]. Potrafi też pisać to sysloga (jako “lvautosize”), podstawowe info, co zwiekszył i czy zakonczyło się to sukcesem

 

 

source: http://devrandom.pl/blog/2008/12/27/lvm/

Attachments
There are no attachments for this article.
Related Articles RSS Feed
SSH: Execute Remote Command or Script – Linux
Viewed 393 times since Mon, Feb 18, 2019
Linux PAM configuration that allows or deny login via the sshd server
Viewed 421 times since Wed, Oct 3, 2018
Automatic YUM Updates with Yum-cron
Viewed 458 times since Fri, Oct 26, 2018
python learning
Viewed 365 times since Wed, Dec 18, 2019
Linux RAID Mdadm Cheat Sheet
Viewed 212 times since Fri, May 15, 2020
Linux - How to get Memory information
Viewed 503 times since Fri, Jun 8, 2018
LVM: Extend an existing Volume Group by adding a new disk
Viewed 605 times since Sat, Jun 2, 2018
How to enable Proxy Settings for Yum Command on RHEL / CentOS Servers
Viewed 741 times since Thu, Jul 19, 2018
Install Security Patches or Updates Automatically on CentOS and RHEL
Viewed 396 times since Fri, Oct 26, 2018
Understanding logrotate utility part 1
Viewed 460 times since Fri, Nov 30, 2018