Świeżo zainstalowany Ubuntu Server pokazuje, że dysk systemowy jest niemal pełny, mimo że fizyczny nośnik ma dużo więcej miejsca. To jeden z najczęstszych momentów zaskoczenia administratorów, bo domyślny instalator z LVM przypisuje partycji głównej tylko część dostępnej przestrzeni. Na szczęście rozwiązanie sprowadza się do jednego polecenia: sudo lvextend -l +100%FREE -r /dev/ubuntu-vg/ubuntu-lv.

Dlaczego Ubuntu nie wykorzystuje całego dysku?

Podczas instalacji Ubuntu Server z domyślnym układem LVM (guided storage) instalator tworzy grupę woluminów o rozmiarze całego dysku, ale wolumin logiczny dla partycji głównej dostaje tylko jej część, zwykle około 100 GB lub połowę pojemności. To celowe zachowanie: producenci zakładają, że resztę miejsca administrator sam przydzieli tam, gdzie będzie potrzebne (np. osobny wolumin na dane czy bazę).

W praktyce oznacza to jednak, że po kilku tygodniach pracy serwer zgłasza brak miejsca na dysku, choć w rzeczywistości połowa nośnika leży odłogiem. Zamiast reinstalacji wystarczy dołączyć wolne miejsce do istniejącego woluminu.

LVM w pigułce - trzy warstwy

Aby świadomie wydawać polecenia, warto znać trzy podstawowe pojęcia LVM:

  • PV (Physical Volume) - wolumin fizyczny, czyli partycja lub dysk (np. /dev/sda3) oddany pod zarządzanie LVM.
  • VG (Volume Group) - grupa woluminów, wspólna pula miejsca złożona z jednego lub wielu PV (np. ubuntu-vg).
  • LV (Logical Volume) - wolumin logiczny wycinany z VG, na którym leży system plików (np. ubuntu-lv zamontowany jako /).

Ścieżka /dev/ubuntu-vg/ubuntu-lv oznacza więc wolumin logiczny ubuntu-lv należący do grupy ubuntu-vg. Ten sam wolumin bywa widoczny również jako /dev/mapper/ubuntu--vg-ubuntu--lv (pojedyncze myślniki w nazwie są podwajane).

Krok 1: sprawdź stan przed zmianą

Zanim cokolwiek zmienisz, zrób zdjęcie sytuacji. Zajętość systemu plików pokaże df:

df -h /

Układ dysków i partycji sprawdzisz poleceniem:

lsblk

Stan warstw LVM podejrzysz trzema poleceniami:

sudo pvs   # woluminy fizyczne
sudo vgs   # grupy woluminów
sudo lvs   # woluminy logiczne

Najważniejsza jest kolumna VFree w wyniku vgs. Jeśli pokazuje wartość większą od zera, masz wolne miejsce gotowe do dołączenia:

  VG        #PV #LV #SN Attr   VSize    VFree
  ubuntu-vg   1   1   0 wz--n- <200.00g <100.00g

Tutaj grupa ma 200 GB, z czego około 100 GB jest wolne. Dokładny obraz da też sudo vgdisplay ubuntu-vg.

Krok 2: rozszerz wolumin jednym poleceniem

Gdy VFree jest większe od zera, całą wolną przestrzeń dołączysz i od razu powiększysz system plików tak:

sudo lvextend -l +100%FREE -r /dev/ubuntu-vg/ubuntu-lv

Rozłóżmy to polecenie na czynniki pierwsze:

  • lvextend - narzędzie LVM do powiększania woluminu logicznego.
  • -l +100%FREE - rozmiar podany w extentach (jednostkach logicznych). +100%FREE oznacza dołożenie całego wolnego miejsca z grupy woluminów.
  • -r (albo --resizefs) - po rozszerzeniu woluminu automatycznie powiększa system plików odpowiednim narzędziem.
  • /dev/ubuntu-vg/ubuntu-lv - ścieżka do woluminu logicznego, który powiększamy.

Po chwili zobaczysz komunikat w stylu:

Size of logical volume ubuntu-vg/ubuntu-lv changed from <100.00 GiB to <200.00 GiB.
Logical volume ubuntu-vg/ubuntu-lv successfully resized.

Krok 3: zweryfikuj wynik

Sprawdź, czy system plików faktycznie urósł:

df -h /

Kolumna Rozmiar (Size) powinna teraz odpowiadać pełnej pojemności dysku. Warto też potwierdzić stan LVM:

sudo lvs
sudo vgs

Po udanej operacji VFree w vgs spadnie do zera, bo całe miejsce trafiło do woluminu głównego.

Gdy grupa woluminów jest już pełna (VFree 0)

Jeśli vgs pokazuje VFree 0, w grupie nie ma czego dołączać. Tak dzieje się najczęściej po powiększeniu dysku wirtualnej maszyny albo woluminu na macierzy. Trzeba wtedy przepchnąć nową przestrzeń przez wszystkie warstwy, od dołu do góry.

1. Powiększ dysk fizyczny

Zwiększ rozmiar dysku w hypervisorze (Proxmox, VMware, Hyper-V) lub w panelu dostawcy chmury. System zobaczy nowy rozmiar po ponownym odczycie (czasem konieczny jest rescan lub restart).

2. Rozszerz partycję

Pakiet cloud-guest-utils dostarcza growpart, które powiększy partycję do końca dysku (uwaga na spację między dyskiem a numerem partycji):

sudo growpart /dev/sda 3

3. Rozszerz wolumin fizyczny

Teraz LVM musi zauważyć większą partycję:

sudo pvresize /dev/sda3

Po tym kroku sudo vgs ponownie pokaże wolne miejsce w VFree i możesz wrócić do polecenia lvextend z kroku 2.

Warianty polecenia

Dołożenie konkretnej ilości miejsca

Jeśli nie chcesz przydzielać wszystkiego, użyj opcji -L z rozmiarem bezwzględnym:

sudo lvextend -L +50G -r /dev/ubuntu-vg/ubuntu-lv

Dołoży to dokładnie 50 GB. Znak + jest istotny - bez niego -L 50G ustawia rozmiar docelowy na 50 GB (a nie dodaje).

Rozszerzenie bez automatycznego resize

Gdy pominiesz -r, powiększysz tylko wolumin, a system plików trzeba dociągnąć ręcznie. Dla ext4:

sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
sudo resize2fs /dev/ubuntu-vg/ubuntu-lv

Dla systemu plików XFS (montowanego, np. jako /) używa się nazwy punktu montowania:

sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
sudo xfs_growfs /

ext4 czy XFS - o czym pamiętać

Cecha ext4 XFS
Narzędzie resize resize2fs xfs_growfs
Powiększanie online Tak Tak
Zmniejszanie (shrink) Tak (offline) Nie
Obsługa przez -r Tak Tak

Domyślny system plików w Ubuntu Server to ext4, ale coraz częściej spotkasz XFS. W obu przypadkach opcja -r wybierze właściwe narzędzie automatycznie.

Rozwiązywanie problemów

Komunikat "Insufficient free space"

  • Grupa woluminów nie ma wolnych extentów - sprawdź VFree w sudo vgs.
  • Jeśli VFree wynosi 0, przejdź do sekcji o powiększaniu dysku fizycznego (growpart, pvresize).

growpart zgłasza "NOCHANGE"

  • System nie widzi jeszcze większego dysku - odśwież skanowanie: echo 1 | sudo tee /sys/class/block/sda/device/rescan lub zrestartuj serwer.
  • Upewnij się, że powiększyłeś właściwy dysk w hypervisorze.

df nadal pokazuje stary rozmiar

  • Wolumin urósł, ale system plików nie - uruchom resize2fs (ext4) lub xfs_growfs / (XFS), albo powtórz lvextend z opcją -r.

Nie znam nazwy grupy woluminów

  • Nie każdy system używa nazwy ubuntu-vg. Sprawdź faktyczne nazwy poleceniem sudo lvs lub sudo vgs i podstaw je w ścieżce.

Uwagi o bezpieczeństwie

Rozszerzanie woluminu (lvextend) jest operacją bezpieczną - nie narusza istniejących danych. Odwrotna operacja, czyli zmniejszanie (lvreduce, resize2fs w dół), jest ryzykowna i przy błędnej kolejności prowadzi do utraty danych. Zanim zmniejszysz jakikolwiek wolumin, zawsze wykonaj kopię zapasową. Przy powiększaniu produkcyjnych systemów i tak zalecamy aktualny backup oraz snapshot maszyny, o ile środowisko na to pozwala.

Podsumowanie

Rozszerzenie dysku LVM na Ubuntu Server to jedna z tych czynności, które wyglądają groźnie, a sprowadzają się do jednego polecenia. Gdy w grupie woluminów jest wolne miejsce, wystarczy sudo lvextend -l +100%FREE -r /dev/ubuntu-vg/ubuntu-lv, aby dołączyć całą przestrzeń i od razu powiększyć system plików, bez restartu i przerwy w pracy.

Jeżeli grupa jest już pełna, dokładasz miejsce od dołu: powiększasz dysk w hypervisorze, potem growpart, pvresize i ponownie lvextend. Ta sama logika trzech warstw (PV, VG, LV) sprawdza się na serwerach fizycznych, wirtualnych i w chmurze.

Potrzebujesz pomocy przy planowaniu przestrzeni dyskowej, migracji serwera albo konfiguracji LVM pod bazy danych? Skontaktuj się z nami - chętnie doradzimy.

Przydatne linki

Najczęściej zadawane pytania

Dlaczego Ubuntu Server po instalacji nie wykorzystuje całego dysku?

Domyślny instalator z opcją LVM przypisuje do woluminu logicznego tylko część grupy woluminów (zwykle około połowy). Reszta miejsca pozostaje wolna w grupie woluminów i można ją w każdej chwili dołączyć poleceniem lvextend, bez ponownej instalacji systemu.

Co robi opcja -r w poleceniu lvextend?

Opcja -r (--resizefs) automatycznie powiększa system plików zaraz po rozszerzeniu woluminu logicznego. Dla ext4 wywoła resize2fs, a dla XFS xfs_growfs, dzięki czemu nie trzeba uruchamiać tych poleceń ręcznie.

Czy rozszerzenie dysku LVM wymaga restartu lub odmontowania?

Nie. Systemy plików ext4 oraz XFS obsługują powiększanie online, czyli na zamontowanym i działającym systemie. Rozszerzenie woluminu głównego odbywa się bez restartu i bez przerwy w pracy usług.

Czym różni się -l +100%FREE od -L +10G?

Opcja -l operuje na extentach i wartościach procentowych, więc +100%FREE dołącza całe wolne miejsce z grupy woluminów. Opcja -L przyjmuje rozmiar bezwzględny, np. +10G dołoży dokładnie 10 gigabajtów.

Co zrobić, gdy vgs pokazuje 0 wolnego miejsca (VFree 0)?

Grupa woluminów jest już w pełni zajęta. Najpierw powiększ nośnik fizyczny: zwiększ dysk w hypervisorze lub macierzy, następnie rozszerz partycję poleceniem growpart, a potem wolumin fizyczny poleceniem pvresize. Dopiero wtedy lvextend znajdzie wolne miejsce.