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
20 Linux YUM (Yellowdog Updater, Modified) Commands for Package Management YUM
Viewed 11461 times since Thu, Oct 25, 2018
Use inotify-tools on CentOS 7 or RHEL 7 to watch files and directories for events
Viewed 14249 times since Fri, Jul 27, 2018
RHEL: How to rebuild and/or patch a RPM package
Viewed 8935 times since Sat, Jun 2, 2018
stunnel Howto A Guide to create SSL access to a HTTP-only webserver with stunnel
Viewed 2836 times since Fri, Sep 28, 2018
Modifying the inode count for an ext2/ext3/ext4 file system
Viewed 15548 times since Fri, Sep 18, 2020
Open SSL Creating Certificate Signing Request — CSR Generation
Viewed 2021 times since Mon, Feb 18, 2019
ZPOOL: Detach a submirror from a mirrored zpool
Viewed 2843 times since Sun, Jun 3, 2018
How to enable automatic security updates on CentOS 7 with yum-cron
Viewed 2594 times since Fri, Oct 26, 2018
Split and Reassemble files
Viewed 3625 times since Mon, May 28, 2018
Logowanie za pomocą kluczy Secure Shell
Viewed 3093 times since Thu, May 24, 2018