Zarządzanie przestrzenią dyskową w Linuxie nie kończy się na zwykłych partycjach. W wielu sytuacjach klasyczny podział dysku okazuje się mało elastyczny, szczególnie wtedy, gdy system rośnie, danych przybywa, a potrzeby aplikacji zmieniają się z miesiąca na miesiąc. Właśnie w takich momentach do gry wchodzi LVM, czyli Logical Volume Manager. To rozwiązanie pozwala zarządzać przestrzenią dyskową znacznie wygodniej niż przy użyciu tradycyjnych partycji, bo daje możliwość łatwego rozszerzania, łączenia i organizowania miejsca na dyskach.
W praktyce LVM w Linuxie jest bardzo przydatny na serwerach, w maszynach wirtualnych i wszędzie tam, gdzie trudno przewidzieć, ile miejsca będzie potrzebne za miesiąc lub dwa. Zamiast tworzyć sztywne partycje i liczyć, że ich rozmiar okaże się wystarczający, budujesz bardziej elastyczną warstwę zarządzania przestrzenią. Dzięki temu możesz łatwiej rozszerzać wolumeny, dodawać nowe dyski i lepiej organizować dane. To rozwiązanie, które oszczędza czas, nerwy i często także niepotrzebne migracje danych.
W tym artykule pokażę, czym jest LVM, jak działa, z jakich elementów się składa i jak wykorzystać go w praktyce. Przejdziemy przez podstawowe pojęcia, omówimy najważniejsze polecenia i wykonamy prostą konfigurację krok po kroku: od przygotowania dysku, przez utworzenie PV, VG i LV, aż po formatowanie i trwałe montowanie w systemie. Na końcu zobaczysz też, kiedy warto używać LVM, jakie ma zalety oraz na co trzeba uważać. Jeśli uczysz się administracji Linuxem, to jest to jedna z tych rzeczy, które naprawdę warto dobrze zrozumieć.
Czym jest LVM?

LVM, czyli Logical Volume Manager, to mechanizm zarządzania pamięcią masową w systemach Linux. Jego zadaniem jest oddzielenie fizycznych dysków i partycji od logicznego sposobu przydzielania przestrzeni. W praktyce oznacza to, że nie musisz myśleć o każdym dysku osobno tak, jak przy klasycznych partycjach. Zamiast tego tworzysz pulę dostępnego miejsca, a dopiero z niej wydzielasz przestrzeń dla konkretnych zastosowań.
W klasycznym podejściu tworzysz partycję, formatujesz ją i używasz. Problem pojawia się wtedy, gdy jedna partycja zaczyna pękać w szwach, a druga obok jest prawie pusta. Przy tradycyjnym podziale dysku przenoszenie miejsca między partycjami nie jest ani szybkie, ani wygodne. LVM rozwiązuje ten problem, bo pozwala dużo łatwiej zarządzać przestrzenią dyskową i dopasowywać ją do realnych potrzeb systemu.
Najprościej mówiąc, LVM dodaje pomiędzy fizyczny dysk a system plików dodatkową warstwę logiki. Dla administratora to duże ułatwienie, bo nie trzeba idealnie zaplanować wszystkiego już na starcie. System może rosnąć, a układ przestrzeni może zmieniać się razem z nim. Właśnie dlatego LVM w Linuxie jest tak popularny w środowiskach serwerowych i testowych.
Podstawowe pojęcia w LVM: PV, VG i LV

Żeby dobrze zrozumieć LVM, trzeba poznać trzy podstawowe skróty: PV, VG i LV. Na początku mogą wyglądać trochę groźnie, ale ich logika jest naprawdę prosta. Każdy z tych elementów pełni inną rolę w układzie całości. Gdy raz to sobie poukładasz, dalsza konfiguracja staje się dużo bardziej intuicyjna.
Najprościej można to porównać do magazynu. Physical Volume (PV) to fizyczny nośnik albo partycja, z której da się korzystać w LVM. Volume Group (VG) to wspólna pula miejsca zbudowana z jednego lub kilku PV. Logical Volume (LV) to wydzielony fragment tej puli, który zachowuje się dla systemu jak zwykła partycja i który możesz sformatować oraz zamontować.
Physical Volume – pierwszy element LVM
PV to najniższy poziom w strukturze LVM. Najczęściej jest to partycja oznaczona jako przeznaczona dla LVM albo całe urządzenie blokowe, które zostaje przygotowane do pracy w tym mechanizmie. Taki element staje się „cegiełką”, z której później budujemy większą strukturę.
Sam PV nie jest jeszcze miejscem, które montujesz do katalogu – to dopiero surowy składnik dalszej konfiguracji. Do utworzenia PV używa się polecenia pvcreate. W tym momencie system zapisuje odpowiednie metadane i zaczyna traktować wskazaną partycję jako część środowiska LVM.
Volume Group – wspólna pula miejsca
VG, to grupa utworzona z jednego lub kilku Physical Volume. To właśnie tutaj zaczyna być widać największy sens korzystania z LVM. Zamiast pracować na pojedynczym dysku, tworzysz wspólną pulę miejsca. Dopiero z tej puli wydzielasz przestrzeń na konkretne cele.
VG można traktować jak centralny magazyn. Jeśli dołożysz nowy dysk i przygotujesz z niego PV, możesz później włączyć go do już istniejącej grupy. Grupę tworzy się poleceniem vgcreate. Na tym etapie można też określić rozmiar extentów, czyli jednostek, z których LVM buduje kolejne wolumeny.
Logical Volume – odpowiednik partycji w LVM
LV, to element, z którym pracuje się już bezpośrednio. To właśnie ten wolumen logiczny formatujesz wybranym systemem plików i montujesz do konkretnego katalogu. Dla systemu operacyjnego zachowuje się on podobnie do zwykłej partycji. Różnica polega na tym, że jego rozmiar można dużo wygodniej zmieniać.
LV powstaje z przestrzeni dostępnej w VG. Możesz utworzyć osobny wolumen na dane aplikacji, katalog z logami, backupy albo bazę danych. Możesz określić jego rozmiar w gigabajtach, megabajtach albo nawet w liczbie extentów. Do utworzenia LV używa się polecenia lvcreate.
Extenty w LVM – co to właściwie jest?
W kontekście LVM bardzo często pojawia się pojęcie extentów. Są to niewielkie, stałe jednostki, na które LVM dzieli przestrzeń w grupie wolumenów. Dzięki temu system może sprawnie przydzielać miejsce do wolumenów logicznych. Jeśli podczas tworzenia VG ustawisz rozmiar extentu na przykład na 8 MiB, to każdy wolumen logiczny będzie budowany jako wielokrotność właśnie tej wartości. Oznacza to, że gdy utworzysz wolumen o rozmiarze 50 extentów, zajmie on 400 MiB.
Tworzenie LVM w praktyce – krok po kroku

Schemat działania LVM jest zwykle bardzo podobny, niezależnie od konkretnego przypadku. Najpierw przygotowujesz dysk lub partycję, potem tworzysz z niej PV, następnie budujesz VG, a na końcu wydzielasz z niej LV. Dopiero taki wolumen logiczny formatujesz i montujesz w systemie. Całość ma więc swoją kolejność i dobrze jest się jej trzymać.
Przygotowanie dysku pod LVM
Zanim zaczniesz konfigurować LVM, najpierw trzeba sprawdzić, jakie dyski są widoczne w systemie. Najczęściej robi się to poleceniem lsblk, które w czytelny sposób pokazuje urządzenia blokowe, partycje i ich punkty montowania.
Jeżeli dysk nie ma jeszcze partycji przeznaczonej pod LVM, należy ją utworzyć. Można do tego użyć na przykład narzędzia fdisk. W praktyce często tworzy się partycję i ustawia jej typ jako Linux LVM. To dobry nawyk, bo od razu wiadomo, do czego dana partycja służy.
Po utworzeniu partycji warto odświeżyć tablicę partycji poleceniem partprobe. Następnie dobrze jest ponownie sprawdzić wynik za pomocą lsblk. Taka kontrola po każdym etapie naprawdę się opłaca. Jeśli wszystko poszło dobrze, zobaczysz nową partycję, na przykład /dev/sdb1. I właśnie na niej można rozpocząć właściwą konfigurację LVM. Całą powyższą konfiguracje przedstawiam poniżej.
lsblk
fdisk /dev/sdb
g
n
default
default
+600M
t
linux lvm
p
w
partprobe /dev/sdb
lsblk
Tworzenie Physical Volume
Gdy partycja jest już gotowa, można przekształcić ją w Physical Volume. Do tego służy polecenie pvcreate, po którym wskazujesz urządzenie, na przykład /dev/sdb1.
pvcreate /dev/sdb1
Tworzenie Volume Group
Kiedy masz już przygotowany PV, możesz utworzyć VG, czyli grupę wolumenów. To ona stanie się wspólną pulą miejsca, z której później wydzielisz logiczne wolumeny. W naszym przykładzie grupa będzie nazywać się vgstorage. To dobra nazwa, bo od razu podpowiada, że ma służyć jako magazyn danych.
Przy tworzeniu VG można ustawić również rozmiar extentu, przykładowo na 8Mb. Wtedy używa się przełącznika -s 8M przy poleceniu vgcreate.
vgcreate -s 8M vgstorage /dev/sdb1
Tworzenie Logical Volume
Gdy grupa wolumenów jest gotowa, można wydzielić z niej LV, czyli wolumen logiczny. W naszym przykładzie utworzymy wolumen o nazwie database i rozmiarze 50 extentów. Ponieważ wcześniej ustawiliśmy extent na 8 MiB, taki wolumen będzie miał łącznie 400 MiB. To bardzo fajnie pokazuje, jak działa przydzielanie miejsca w LVM.
Do utworzenia takiego wolumenu używa się polecenia lvcreate. W tym przypadku przełącznik -l 50 oznacza liczbę extentów, -n lvdatabase ustawia nazwę wolumenu, a vgstorage wskazuje grupę, z której ma zostać pobrane miejsce. Po wykonaniu polecenia system utworzy nowe urządzenie logiczne, które będzie widoczne pod ścieżką w stylu /dev/vgstorage/lvdatabase. I właśnie ten element będzie już można potraktować jak zwykłą partycję do dalszego użycia.
Po wszystkim dobrze jest jeszcze raz przejrzeć wynik lsblk. Dzięki temu zobaczysz, że wewnątrz grupy pojawił się nowy logiczny wolumen.
lvcreate -l 50 -n lvdatabase vgstorage
lsblk
Formatowanie Logical Volume
Sam LV nie wystarczy, żeby zacząć zapisywać na nim dane. Tak samo jak zwykłą partycję, trzeba go jeszcze sformatować w wybranym systemie plików. Dopiero wtedy system wie, jak organizować pliki, katalogi i metadane na danym wolumenie. Bez tego masz tylko surowy obszar pamięci, z którego praktycznie nie da się normalnie korzystać.
W nowoczesnych systemach bardzo często wybiera się ext4 albo xfs. Robi się to poleceniem mkfs.ext4 wskazując ścieżkę do wolumenu logicznego. To prosty etap, ale absolutnie nie można go pominąć. Po sformatowaniu warto sprawdzić wynik poleceniem lsblk -f albo blkid. Dzięki temu zobaczysz typ systemu plików oraz identyfikator UUID, który będzie przydatny przy trwałym montowaniu wolumenu.
mkfs.ext4 /dev/vgstorage/lvdatabase
lsblk -f
blkid /dev/vgstorage/lvdatabase
Montowanie wolumenu logicznego
Po utworzeniu systemu plików przychodzi moment, w którym trzeba wolumen zamontować do konkretnego katalogu. W Linuxie samo istnienie urządzenia blokowego nie oznacza jeszcze, że będzie ono widoczne pod jakąś ścieżką w systemie. Musisz wskazać katalog, pod którym ta przestrzeń ma być dostępna. W naszym przykładzie będzie to /mnt/database.
Najpierw należy utworzyć sam katalog poleceniem mkdir. Następnie można zamontować wolumen ręcznie poleceniem mount, ale jeśli chcesz, by montował się automatycznie po restarcie, warto od razu skonfigurować /etc/fstab. W tym pliku dodajesz wpis zawierający UUID, punkt montowania, typ systemu plików i opcje montowania. Jest to standardowa i bardzo wygodna metoda trwałego montowania zasobów w Linuxie.
Po edycji /etc/fstab warto zawsze wykonać mount -a. Dzięki temu system spróbuje zamontować wszystko zgodnie z nową konfiguracją i od razu wyłapie ewentualne błędy. To świetny test, bo pozwala sprawdzić poprawność wpisu bez konieczności restartu. Lepiej dowiedzieć się teraz, że w pliku jest literówka, niż odkryć to po restarcie serwera, gdy zaczynają się mniej przyjemne rozmowy.
mkdir -p /mnt/database
blkid /dev/vgstorage/lvdatabase
Przykładowy wpis do /etc/fstab:
UUID=twoj_uuid_z_blkid /mnt/database ext4 defaults 0 0
Następnie montujemy i sprawdzamy.
mount -a
lsblk
Po wykonaniu wszystkich powyższych kroków masz gotowy i działający wolumen logiczny o wielkości 400MB.

Jak sprawdzić konfigurację LVM?
Po skonfigurowaniu LVM warto umieć szybko sprawdzać, co dokładnie zostało utworzone. Do tego służą między innymi polecenia pvs, vgs i lvs. Każde z nich pokazuje inny poziom struktury LVM: fizyczne wolumeny, grupy wolumenów i wolumeny logiczne. To taki podstawowy zestaw diagnostyczny, który naprawdę warto znać na pamięć.

Polecenie pvs pokaże listę dostępnych Physical Volume, ich rozmiar i przypisanie do grup. vgs pozwoli zobaczyć grupy wolumenów, ilość wolnego miejsca i rozmiar extentów. lvs z kolei pokaże logiczne wolumeny, ich nazwy, rozmiary i powiązanie z konkretnymi grupami. Te trzy polecenia wystarczają w wielu codziennych sytuacjach, gdy chcesz szybko zorientować się w stanie konfiguracji.
Jeżeli potrzebujesz więcej szczegółów, możesz użyć również pvdisplay, vgdisplay i lvdisplay. Te komendy pokazują bardziej rozbudowane informacje i bywają przydatne przy dokładniejszej analizie. W praktyce często zaczyna się od krótkich wersji, a po szczegóły sięga dopiero wtedy, gdy coś wymaga głębszego sprawdzenia.
Dodawanie nowego dysku do istniejącej grupy LVM
Czasami samo rozszerzenie wolumenu nie wystarczy, bo po prostu kończy się fizyczne miejsce. W takiej sytuacji można dołożyć nowy dysk, przygotować go jako PV i dodać do istniejącej VG. To kolejna cecha, która sprawia, że LVM jest tak wygodny. System może rosnąć razem z infrastrukturą.
Najpierw przygotowujesz nową partycję lub całe urządzenie i tworzysz na nim Physical Volume. Następnie poleceniem vgextend dodajesz ten zasób do już istniejącej grupy wolumenów. Od tej chwili nowa przestrzeń staje się częścią wspólnej puli. Możesz ją wykorzystać do powiększenia istniejących wolumenów albo do utworzenia zupełnie nowych.
fdisk /dev/sdc
n
default
default
+2G
t
linux lvm
p
w
pvcreate /dev/sdc1
vgextend vgstorage /dev/sdc1
Po zweryfikowaniu grupy wolumenów poleceniem vgs widać, że do grupy został dodany dodatkowy fizyczny wolumen.
Rozszerzanie wolumenu logicznego
Do powiększania wolumenu logicznego służy polecenie lvextend. Można podać konkretny rozmiar albo dodać określoną ilość miejsca do już istniejącego wolumenu. Po rozszerzeniu LV trzeba jeszcze zazwyczaj powiększyć sam system plików, żeby system operacyjny faktycznie zobaczył dodatkową przestrzeń. To bardzo ważne, bo samo zwiększenie warstwy LVM nie zawsze automatycznie oznacza zwiększenie przestrzeni dostępnej dla plików.
W przypadku ext4 często wykorzystuje się polecenie resize2fs, a przy xfs zwykle xfs_growfs. Cały proces jest więc dwuetapowy: najpierw rozszerzasz wolumen logiczny, a potem rozszerzasz system plików.
lvextend -L +2G /dev/vgstorage/lvdatabase
resize2fs /dev/vgstorage/lvdatabase
można połączyć oba kroki naraz za pomocą przełącznika -r, który rozszerza od razu system plików.
lvextend -r -L +2G /dev/vgstorage/lvdatabase
Po wydaniu polecenia lsblk można zauważyć, że partycja /dev/sdc1 została wciągnięta do wolumenu logicznego, teraz ma prawie 2,5GB i jest również zamontowana do katalogu /mnt/database.

Zmniejszanie wolumenu logicznego
Zanim zmniejszysz wolumen, musisz upewnić się, że aktualnie zajęte miejsce rzeczywiście zmieści się w nowym rozmiarze. Do tego przydaje się polecenie df -hT, które pokazuje rozmiar, użycie oraz typ systemu plików. Jeżeli na wolumenie znajduje się więcej danych niż planowany nowy rozmiar, operacja po prostu nie ma sensu i może skończyć się problemami. W praktyce oznacza to, że najpierw trzeba sprawdzić stan, a dopiero potem przejść do zmian.
Kolejnym krokiem jest odmontowanie wolumenu. System plików nie powinien być w użyciu w trakcie zmniejszania, dlatego trzeba go najpierw odłączyć. Najczytelniej jest odmontować go przez punkt montowania, na przykład /mnt/database, chociaż można też użyć ścieżki urządzenia. Po odmontowaniu warto wykonać kontrolę spójności poleceniem e2fsck -f, ponieważ przed zmniejszeniem system plików powinien być sprawdzony i naprawiony, jeśli wykryte zostaną jakieś błędy.
Dopiero po kontroli można zmniejszyć system plików poleceniem resize2fs. To bardzo ważny moment, bo najpierw zmniejszamy to, co znajduje się wewnątrz wolumenu, a dopiero potem sam kontener LVM. Gdy system plików zostanie bezpiecznie zmniejszony, można użyć polecenia lvreduce, aby zmniejszyć rozmiar logicznego wolumenu do tej samej wartości. Na końcu warto ponownie zamontować wolumen i sprawdzić wynik poleceniami lvs, df -hT oraz lsblk.
W tym przykładzie najpierw sprawdzamy aktualne użycie miejsca, następnie odmontowujemy wolumen i wykonujemy kontrolę systemu plików. Potem zmniejszamy system plików do 280 MB, a dopiero po tym redukujemy sam wolumen logiczny do tej samej wartości. Na końcu montujemy wszystko z powrotem i sprawdzamy, czy nowy rozmiar został poprawnie zastosowany.
df -hT
umount /mnt/database
e2fsck -f /dev/vgstorage/lvdatabase
resize2fs /dev/vgstorage/lvdatabase 280M
lvreduce -L 280M /dev/vgstorage/lvdatabase
mount /dev/vgstorage/lvdatabase /mnt/database
lvs
df -hT
Ponownie po wydaniu polecenia lsblk widzimy, że rozmiar partycji wolumenu został tym razem zmniejszony do 280Mb.

Dlaczego ta kolejność jest tak ważna?
Przy zmniejszaniu LVM obowiązuje bardzo prosta zasada: najpierw system plików, potem wolumen logiczny. Jeśli najpierw zmniejszysz LV, a system plików nadal będzie większy, możesz odciąć fragment danych i uszkodzić całą strukturę. To właśnie dlatego zmniejszanie jest bardziej niebezpieczne niż rozszerzanie. W praktyce najlepiej zapamiętać, że najpierw „zwężasz zawartość”, a dopiero potem „zwężasz pojemnik”.
Podsumowanie
LVM w Linuxie to bardzo praktyczne narzędzie do zarządzania przestrzenią dyskową. Pozwala odejść od sztywnego myślenia o zwykłych partycjach i przejść do bardziej elastycznego modelu pracy. Dzięki niemu możesz tworzyć wolumeny logiczne, rozszerzać je, dodawać nowe dyski do istniejącej puli i lepiej organizować dane. To rozwiązanie, które świetnie sprawdza się w nowoczesnej administracji systemami.
Jeśli dopiero zaczynasz naukę, najlepiej ćwiczyć na maszynie wirtualnej albo w domowym labie. Tam spokojnie przećwiczysz schemat PV → VG → LV bez ryzyka, że coś ważnego przestanie działać. Po kilku takich ćwiczeniach cała logika LVM staje się naprawdę prosta. A kiedy pierwszy raz bezboleśnie rozszerzysz wolumen zamiast przenosić pół systemu ręcznie, szybko zrozumiesz, dlaczego warto było się tego nauczyć.