Logical Volume Manager (LVM) to zaawansowana warstwa abstrakcji magazynowania, która oddziela widok logiczny od fizycznej struktury dysków, umożliwiając elastyczne zarządzanie przestrzenią w systemach Linux. Mechanizm wykorzystuje sterownik device-mapper w jądrze, zapewniając partycjonowanie niezależne od fizycznego układu dysku. Niniejszy przewodnik przedstawia tworzenie, konfigurację i zarządzanie LVM: od podstaw po zaawansowane funkcje, takie jak mirroring, striping, snapshoty oraz thin provisioning. Znajdziesz tu gotowe polecenia, strategie migracji danych i sprawdzone praktyki dla bezpiecznego i efektywnego zarządzania pamięcią masową.
Fundamentalne koncepcje Logical Volume Manager
LVM zmienia tradycyjny model partycjonowania: zamiast przypisywać system plików do konkretnej partycji fizycznej, wprowadza warstwę logiczną, która pozwala swobodnie gospodarować przestrzenią. To kluczowa zaleta w nowoczesnych środowiskach, gdzie pojemność musi być skalowalna, a przestoje – niedopuszczalne.
W klasycznym podejściu błędnie oszacowany rozmiar partycji wymaga kosztownego przepartycjonowania i przestojów. LVM likwiduje to ograniczenie, umożliwiając dynamiczne rozszerzanie lub zmniejszanie przestrzeni, często bez przerywania pracy usług.
Dla szybkiego przeglądu kluczowych korzyści LVM, zwróć uwagę na poniższe punkty:
- elastyczne skalowanie – zmiana rozmiarów wolumenów w locie, bez kosztownych migracji;
- agregacja wielu dysków – łączenie urządzeń w jedną pulę przestrzeni (VG);
- wyższa dostępność – migrowanie danych między dyskami bez przestojów (pvmove);
- zaawansowane funkcje – snapshoty, thin provisioning, striping, lustra i RAID w warstwie logicznej.
Architektura i komponenty systemu LVM
Architektura LVM składa się z trzech warstw, które nakładają się hierarchicznie, zapewniając elastyczność i odporność. Zrozumienie ich roli jest niezbędne do prawidłowego projektowania i utrzymania środowiska LVM.
Najważniejsze elementy architektury LVM to:
- Physical Volumes (PV) – zainicjalizowane dyski/partycje stanowiące źródło przestrzeni;
- Volume Groups (VG) – pule magazynowania, które agregują jeden lub wiele PV;
- Logical Volumes (LV) – „wirtualne partycje” widoczne w systemie jako urządzenia blokowe.
Warstwy fizyczne – dyski i partycje
Podstawą są urządzenia blokowe: dyski lub ich partycje (SATA, SAS, NVMe). W LVM to one stają się bazą do budowy warstw PV, VG i LV, zamiast być bezpośrednio formatowane systemem plików.
Wolumeny fizyczne (physical volumes – PV)
Wolumen fizyczny to urządzenie z metadanymi LVM, przygotowane do użycia w grupach wolumenów. Inicjalizacja odbywa się poleceniem pvcreate. Każdy PV dzieli się na fizyczne ekstenty (PE). Domyślny rozmiar PE to 4 MB i stanowi najmniejszą jednostkę alokacji. Dobór rozmiaru PE wpływa na wydajność i precyzję alokacji – mniejsze PE dają lepszą granularność, większe sprzyjają sekwencyjnym obciążeniom.
Grupy wolumenów (volume groups – VG)
VG to logiczna pula przestrzeni, z której alokuje się LV. Można ją skalować, dodając kolejne PV, bez przerywania pracy usług. Metadane VG są redundantnie przechowywane na wszystkich PV, co zwiększa odporność na uszkodzenia.
Wolumeny logiczne (logical volumes – LV)
LV to „partycje” widoczne w systemie (np. /dev/nazwa_vg/nazwa_lv lub /dev/mapper/nazwa_vg-nazwa_lv). Składają się z logicznych ekstentów (LE) o rozmiarze równym PE, co umożliwia mapowanie LE→PE i bezprzerwową migrację danych.
Tworzenie wolumenów fizycznych
Inicjalizacja PV jest pierwszym krokiem – usuwa istniejące dane i nie jest odwracalna bez pełnego czyszczenia, dlatego wymaga ostrożności.
Przygotowanie i inicjalizacja urządzeń
Najpierw upewnij się, że urządzenie jest poprawnie wykryte i nie zawiera cennych danych. Możesz skorzystać z lsblk. W razie pozostałości metadanych LVM użyj -ff do wymuszenia.
Inicjalizacja pojedynczego lub wielu urządzeń przebiega następująco:
sudo pvcreate /dev/sdb
sudo pvcreate /dev/sdb /dev/sdc /dev/sdd
Weryfikacja i wyświetlanie wolumenów fizycznych
Po inicjalizacji zweryfikuj stan PV i metadanych:
sudo pvs
sudo pvdisplay
sudo pvscan
Tworzenie i zarządzanie grupami wolumenów
VG agreguje przestrzeń z wielu PV i udostępnia ją do tworzenia LV. Przemyślany projekt VG wpływa na wydajność i łatwość rozbudowy w przyszłości.
Tworzenie grupy wolumenów
Utwórz VG, a opcjonalnie ustaw rozmiar PE (domyślnie 4 MB):
sudo vgcreate moja_grupa /dev/sdb /dev/sdc
sudo vgcreate -s 8M moja_grupa /dev/sdb /dev/sdc
Aby rozszerzyć VG o kolejny dysk:
sudo vgextend moja_grupa /dev/sdd
Wyświetlanie i monitorowanie grup wolumenów
Do szybkiego przeglądu i szczegółów użyj:
sudo vgs
sudo vgdisplay
Deaktywacja i usuwanie grup wolumenów
W trakcie prac serwisowych możesz deaktywować VG i następnie ją usunąć:
sudo vgchange -a n moja_grupa
sudo vgremove moja_grupa
Tworzenie i konfiguracja wolumenów logicznych
LV to urządzenia blokowe dla systemu plików. Tworzenie jest proste, a liczne opcje pozwalają dostroić wydajność do potrzeb.
Tworzenie podstawowych wolumenów logicznych
Utwórz LV, podając rozmiar i nazwę (także w ekstentach lub jako całość wolnej przestrzeni):
sudo lvcreate -L 10G -n moj_wolumin moja_grupa
sudo lvcreate -l 1280 -n moj_wolumin moja_grupa
sudo lvcreate -l 100%FREE -n moj_wolumin moja_grupa
Tworzenie systemów plików na wolumenach logicznych
Najczęściej używane systemy plików to ext4 i XFS (szczególnie dla dużych plików):
sudo mkfs.ext4 /dev/moja_grupa/moj_wolumin
Aby zrezygnować z rezerwacji miejsca dla root:
sudo mkfs.ext4 -m 0 /dev/moja_grupa/moj_wolumin
Montowanie i konfiguracja w /etc/fstab
Zamontuj LV i dodaj wpis do /etc/fstab. Zalecane jest używanie ścieżek /dev/mapper/ ze względu na snapshoty.
sudo mkdir /mnt/punkt_montowania
sudo mount /dev/mapper/moja_grupa-moj_wolumin /mnt/punkt_montowania
Przykładowy wpis w /etc/fstab:
/dev/mapper/moja_grupa-moj_wolumin /mnt/punkt_montowania ext4 defaults 0 0
Przetestuj konfigurację:
sudo mount -a
Zmiana nazw i właściwości wolumenów logicznych
Zmiana nazwy LV oraz modyfikacja atrybutów (np. tylko do odczytu) wygląda tak:
sudo lvrename /dev/moja_grupa/stara_nazwa /dev/moja_grupa/nowa_nazwa
sudo lvchange -pr /dev/moja_grupa/moj_wolumin
Rozszerzanie i zmniejszanie wolumenów
Jedną z największych zalet LVM jest możliwość bezprzerwowej zmiany rozmiaru wolumenów. W wielu przypadkach operacje można wykonać online.
Rozszerzanie grup wolumenów
Dodaj nowy PV do VG i sprawdź wolną przestrzeń:
sudo pvcreate /dev/sde
sudo vgextend moja_grupa /dev/sde
sudo vgs
sudo vgdisplay
Rozszerzanie wolumenów logicznych i systemów plików
Rozszerz LV, a następnie powiększ system plików (dla ext2/3/4 lub XFS):
sudo lvextend -L +10G /dev/moja_grupa/moj_wolumin
sudo lvextend -l +100%FREE /dev/moja_grupa/moj_wolumin
sudo resize2fs /dev/moja_grupa/moj_wolumin
sudo xfs_growfs /mnt/punkt_montowania
Rozszerzenie LV nie powiększa automatycznie systemu plików – trzeba wykonać to osobno.
Zmniejszanie wolumenów
Zmniejszanie jest ryzykowniejsze niż rozszerzanie i grozi utratą danych. Najpierw zmniejsz system plików, następnie LV (zwykle offline, po odmontowaniu):
sudo resize2fs /dev/moja_grupa/moj_wolumin 5G
sudo lvreduce -L 5G /dev/moja_grupa/moj_wolumin
Zaawansowane typy wolumenów logicznych
Oprócz wolumenów liniowych LVM oferuje konfiguracje pod kątem wydajności i odporności: striped, mirrored, RAID oraz thin provisioning.
Wolumeny striped (rozłożone)
Dane są rozkładane na wiele PV (jak RAID 0), co zwiększa przepustowość:
sudo lvcreate -i 3 -I 64 -L 10G -n moj_striped moja_grupa
Dla danych niewymagających redundancji striped zapewnia wysoką wydajność.
Wolumeny lustrzane (mirrored)
Zapewniają redundancję przez utrzymanie minimum dwóch kopii danych:
sudo lvcreate -m1 -L 10G -n moj_mirror moja_grupa
Większa niezawodność odbywa się kosztem dodatkowej przestrzeni.
Logiczne wolumeny RAID
RAID na poziomie LVM oferuje elastyczność i możliwość konwersji typów:
sudo lvcreate --type raid5 --stripes 3 -L 20G -n moj_raid5 moja_grupa /dev/sdb /dev/sdc /dev/sdd
sudo lvcreate --type raid6 --stripes 4 -L 30G -n moj_raid6 moja_grupa /dev/sdb /dev/sdc /dev/sdd /dev/sde
Wolumeny RAID w LVM można dynamicznie konwertować między typami.
Wolumeny z thin provisioning
Pozwalają przydzielać przestrzeń „na żądanie”, większą niż fizycznie dostępna:
sudo lvcreate -T -L 100G -n moj_thin_pool moja_grupa
sudo lvcreate -T moja_grupa/moj_thin_pool -V 500G -n moj_thin_volume
Regularnie monitoruj wykorzystanie puli thin i w razie potrzeby ją rozszerzaj, aby uniknąć wyczerpania miejsca.
Dla szybkiego porównania typów LV i ich zastosowań przedstawiamy zestawienie:
| Typ LV | Redundancja | Wydajność | Typowe zastosowania | Uwagi |
|---|---|---|---|---|
| Liniowy | Brak | Standardowa | Ogólne przeznaczenie | Najprostsza konfiguracja |
| Striped | Brak | Wysoka (I/O równoległe) | Obciążenia sekwencyjne, duże pliki | Wymaga ≥ liczby PV równej liczbie pasków |
| Mirrored (RAID 1) | Tak (kopie danych) | Odczyt szybszy, zapis kosztowniejszy | Dane krytyczne, wysoka dostępność | Koszt pojemności ×2 (lub więcej) |
| RAID 5 | Tak (pojedynczy parytet) | Dobry kompromis | Magazyny danych, backup | Wolniejsze zapisy małych bloków |
| RAID 6 | Tak (podwójny parytet) | Niższa niż RAID 5 | Duże macierze, tolerancja 2 awarii | Wyższy narzut parytetu |
| Thin | Zależnie od puli | Zależnie od nośnika | Wirtualizacja, chmura | Wymaga stałego monitoringu puli |
Snapshoty i kopie zapasowe
Snapshoty tworzą punkt w czasie bez zatrzymywania usług. Świetnie sprawdzają się przy spójnych backupach baz danych i aktywnych systemów plików.
Tworzenie snapshotów
Utwórz snapshot i określ jego rozmiar (zapas na zmiany):
sudo lvcreate -L 5G -s -n moj_snapshot /dev/moja_grupa/moj_wolumin
Snapshoty działają w trybie copy‑on‑write – tworzą się błyskawicznie, a bloki są kopiowane dopiero przy modyfikacji źródła.
Użycie snapshotów do kopii zapasowych
Zamontuj snapshot tylko do odczytu, wykonaj kopię, a potem go usuń:
sudo mkdir /mnt/snapshot_mount
sudo mount -o ro /dev/moja_grupa/moj_snapshot /mnt/snapshot_mount
sudo tar -czf /backup/backup.tar.gz /mnt/snapshot_mount
sudo umount /mnt/snapshot_mount
sudo lvremove /dev/moja_grupa/moj_snapshot
Scalanie snapshotów
Scal snapshot ze źródłem, aby cofnąć zmiany do stanu z momentu utworzenia:
sudo lvconvert --merge /dev/moja_grupa/moj_snapshot
Optymalizacja wydajności – caching i striping
Mechanizmy cache i striping potrafią znacząco przyspieszyć I/O dla wymagających obciążeń.
LVM cache
Dołącz szybkie urządzenie (np. SSD) jako cache do LV, aby przyspieszyć dostęp do „gorących” danych:
sudo lvcreate -L 50G -n cache_volume moja_grupa /dev/sdf
sudo lvconvert --type cache --cachepool cache_volume /dev/moja_grupa/moj_wolumin
Dostrajanie odbywa się przez --cachesettings (np. high_watermark).
Striping dla wydajności
Rozkład danych na kilka PV zwiększa równoległość I/O:
sudo lvcreate -i 3 -I 256 -L 100G -n high_perf moja_grupa /dev/sdb /dev/sdc /dev/sdd
Większe paski lepsze dla dużych plików sekwencyjnych, mniejsze – dla losowego I/O.
Zarządzanie dyskami i migracja danych
LVM umożliwia migrację danych „w locie” dzięki pvmove, co pozwala wymieniać dyski bez przestojów.
Przygotowanie do migracji dysku
Dodaj nowy dysk jako PV i rozszerz VG:
sudo pvcreate /dev/sdf
sudo vgextend moja_grupa /dev/sdf
Przenoszenie danych pomiędzy dyskami
Przenieś dane ze starego PV na nowy (automat lub z podaniem celu):
sudo pvmove /dev/sdb
sudo pvmove /dev/sdb /dev/sdf
Podczas migracji dane pozostają dostępne dla aplikacji.
Usuwanie starego dysku
Po migracji usuń PV z VG i wyczyść metadane:
sudo vgreduce moja_grupa /dev/sdb
sudo pvremove /dev/sdb
RAID 1 dla redundancji
RAID 1 (mirroring) przechowuje identyczne kopie danych na co najmniej dwóch dyskach, chroniąc przed awarią pojedynczego nośnika.
Tworzenie wolumenów lustrzanych
Utwórz lustro lub skonwertuj istniejący LV:
sudo lvcreate -m1 -L 50G -n moj_mirror moja_grupa
sudo lvconvert -m1 /dev/moja_grupa/moj_wolumin
Oddzielanie i scalanie luster
Na potrzeby testów lub kopii odłącz lustro, a następnie scal z powrotem:
sudo lvconvert --splitmirror 1 -n nowe_lv moja_grupa/moj_wolumin
sudo lvconvert --merge /dev/moja_grupa/stare_lustro
Diagnostyka i rozwiązywanie problemów
Znajomość narzędzi diagnostycznych skraca czas przywracania usług do działania.
Weryfikacja spójności metadanych
LVM utrzymuje kopie zapasowe metadanych w /etc/lvm/backup/. W razie problemów użyj:
sudo vgcfgbackup moja_grupa
sudo vgcfgrestore moja_grupa
Diagnostyka problemów I/O
Do analizy wydajności dysków przydatne jest iostat i kluczowe metryki:
iostat -x 5
- %util – procent czasu zajętości urządzenia;
- r/s – liczba operacji odczytu na sekundę;
- w/s – liczba operacji zapisu na sekundę;
- rrqm/s – scalenia żądań odczytu na sekundę;
- wrqm/s – scalenia żądań zapisu na sekundę.
Przywracanie uszkodzonych wolumenów
Jeśli utracono metadane, a posiadasz kopię, odtwórz strukturę i aktywuj VG:
sudo pvcreate --restorefile backup_file --uuid UUID /dev/sdb
sudo vgcfgrestore --force nazwa_grupy
sudo vgscan
sudo vgchange -ay nazwa_grupy
Monitorowanie zdrowia dysku
Regularnie sprawdzaj S.M.A.R.T. dla nośników:
sudo smartctl -a /dev/sdb
Zaawansowane strategie konfiguracji
Dla złożonych środowisk warto wykorzystać mechanizmy eksportu/importu, polityki aktywacji i profile konfiguracji.
Eksport i import grup wolumenów
Eksport/Import VG ułatwia migracje między serwerami:
sudo vgexport moja_grupa
# przeniesienie dysków do innego systemu
sudo vgimport moja_grupa
sudo vgchange -ay moja_grupa
Polityki aktywacji
Kontroluj, które wolumeny aktywują się przy starcie systemu:
sudo vgchange -a y moja_grupa
sudo lvchange -a y /dev/moja_grupa/moj_wolumin
Profilowanie konfiguracji
Profile w /etc/lvm/profile/ pozwalają zapisać i stosować złożone ustawienia do wybranych LV lub VG.
Najlepsze praktyki i rekomendacje
Aby uprościć administrację i zwiększyć bezpieczeństwo, stosuj poniższe praktyki:
- rezerwa pojemności – pozostaw 10–20% wolnej przestrzeni w VG, by szybko reagować na wzrost potrzeb;
- granularność alokacji – dobieraj rozmiar PE do profilu I/O; mniejsze PE zwiększa precyzję, większe – przepustowość sekwencyjną;
- rozszerzaj, nie zmniejszaj – projektuj LV z zapasem; zmniejszanie zwykle wymaga przestoju i niesie ryzyko;
- monitoring – śledź wolną przestrzeń (
vgs,vgdisplay) i stan dysków (smartctl); - kopie metadanych – wykonuj cyklicznie
vgcfgbackup(pliki w/etc/lvm/backup/); - czytelne nazwy – stosuj spójne nazewnictwo (np.
vg_data,lv_backup) dla łatwiejszej administracji; - /etc/fstab – używaj ścieżek
/dev/mapper/, aby uniknąć kolizji UUID przy snapshotach (np./dev/mapper/vg_data-lv_home /home ext4 defaults,nofail 0 2).
Migracja z tradycyjnego partycjonowania do LVM
Migrację można przeprowadzić bez utraty danych, o ile jest dobrze zaplanowana i przetestowana. Poniżej proponowana sekwencja kroków:
- Dodaj nowy dysk, utwórz PV i VG/LV docelowe (np.
pvcreate,vgcreate,lvcreate); - Sklonuj dane ze starych partycji (np.
rsync -aHAX,tar, w wyjątkowych przypadkachdd); - Zaktualizuj
/etc/fstabi konfigurację bootloadera; jeśli to wymagane, pozostaw/bootpoza LVM; - Przetestuj rozruch i integralność danych, a dopiero potem usuń stare partycje.
Zaawansowane zagadnienia – thin provisioning i LVM w chmurze
W środowiskach wirtualnych i chmurowych wiele maszyn rezerwuje duże wolumeny, realnie używając ułamka pojemności. Thin provisioning zwiększa efektywność wykorzystania zasobów i gęstość upakowania.
LVM obsługuje snapshoty wolumenów thin, co pozwala na szybkie klonowanie maszyn. Snapshoty thin współdzielą bloki ze źródłem do momentu modyfikacji, więc początkowo zajmują minimalną przestrzeń.




