TL;DR — Kurzzusammenfassung

Vollständige LVM-Anleitung für Linux: Logical Volumes erweitern, Disks hinzufügen, ext4/XFS online wachsen lassen, Thin Provisioning, Snapshots und Cloud-VMs.

LVM (Logical Volume Manager) ist die Standard-Speicher-Abstraktionsschicht unter Linux, die es ermöglicht, Speicherplatz ohne Ausfallzeit zu vergrößern, Snapshots zu erstellen und zu migrieren. Diese Anleitung behandelt den vollständigen LVM-Workflow: Architektur, Hinzufügen von Disks, Erweiterung von Logical Volumes, Wachsen und Verkleinern von Dateisystemen, Thin Provisioning, Snapshots, Disk-Erweiterung auf Cloud-VMs und die häufigsten Fehler in der Produktion.

Voraussetzungen

  • Linux-System mit installiertem lvm2-Paket (sudo apt install lvm2 oder sudo dnf install lvm2).
  • Root- oder Sudo-Zugriff.
  • Mindestens eine bestehende LVM Volume Group oder eine zu initialisierende Disk.
  • Grundkenntnisse der Linux-Disk-Partitionierung (fdisk, lsblk, df).

LVM-Architektur

LVM führt drei Abstraktionsschichten zwischen physischen Disks und eingehängten Dateisystemen ein:

SchichtBefehlspräfixBeschreibung
Physical Volume (PV)pv*Disk oder Partition, die für LVM initialisiert wurde
Volume Group (VG)vg*Speicherpool aus einem oder mehreren PVs
Logical Volume (LV)lv*Virtuelles Block-Gerät, das aus dem freien Speicher der VG entnommen wird

Physical Extents (PE) sind die kleinste Zuteilungseinheit innerhalb einer VG (Standard 4 MiB). Jedes LV ist ein Bereich von PEs. Diese Abstraktion ermöglicht es LVs, mehrere Disks zu umfassen und jederzeit vergrößert zu werden.

Die Speicher-Stack sieht so aus:

/dev/sda1  /dev/sdb1  /dev/sdc    ← physische Disks / Partitionen
    └─── pvcreate ───────────┘

     Volume Group (vg_data)        ← Pool von PEs

  lv_root  lv_home  lv_db          ← Logical Volumes (Block-Geräte)

  ext4     ext4     xfs            ← Dateisysteme auf den LVs

Aktuelles Layout anzeigen

lsblk — Block-Geräte-Baum

lsblk
# NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
# sda               8:0    0   50G  0 disk
# ├─sda1            8:1    0    1G  0 part /boot
# └─sda2            8:2    0   49G  0 part
#   ├─vg_sys-lv_root 253:0  0   20G  0 lvm  /
#   └─vg_sys-lv_home 253:1  0   29G  0 lvm  /home

pvdisplay, vgdisplay, lvdisplay

pvdisplay          # Physical Volumes: Disk, Größe, genutzte/freie PEs
vgdisplay          # Volume Groups: Gesamt / genutzte / freie PEs
lvdisplay          # Logical Volumes: Pfad, Größe, Dateisystemtyp

Schnellbefehle:

pvs     # kompakte PV-Zusammenfassung
vgs     # kompakte VG-Zusammenfassung (VFree für verfügbaren Speicher)
lvs     # kompakte LV-Zusammenfassung
df -h   # Dateisystemnutzung (was das OS sieht)

Neue Disk zu LVM hinzufügen

Dies ist der häufigste Produktionsvorgang: eine VM erhält eine neue Disk und du möchtest diese Kapazität zu einer bestehenden VG hinzufügen.

Schritt 1 — Neue Disk partitionieren

fdisk /dev/sdb
# Innerhalb von fdisk:
# n   → neue Partition
# p   → primär
# 1   → Partitionsnummer
# [Enter] zweimal → gesamte Disk verwenden
# t   → Typ ändern
# 8e  → Linux LVM
# w   → schreiben und beenden

Für GPT-Disks (>2 TB oder UEFI-Systeme) verwende gdisk oder parted. Setze den Partitionstyp auf Linux LVM.

Schritt 2 — Physical Volume initialisieren

pvcreate /dev/sdb1
# Physical volume "/dev/sdb1" successfully created.

Schritt 3 — Volume Group erweitern

vgextend vg_sys /dev/sdb1
# Volume group "vg_sys" successfully extended
vgs    # bestätige, dass VFree gestiegen ist

Schritt 4 — Logical Volume erweitern

# Genau 20 GB hinzufügen
lvextend -L +20G /dev/vg_sys/lv_root

# Oder GESAMTEN freien Speicher der VG verwenden
lvextend -l +100%FREE /dev/vg_sys/lv_root

Schritt 5 — Dateisystem vergrößern

ext4 (online, kein Aushängen erforderlich):

resize2fs /dev/vg_sys/lv_root

XFS (online, Einhängepunkt verwenden):

xfs_growfs /

LV mit freiem Speicher in der VG erweitern

Wenn bereits freie PEs in der VG vorhanden sind (in vgs unter VFree sichtbar), überspringe die Disk-Hinzufüge-Schritte und gehe direkt zu lvextend:

vgs
# VG      #PV #LV #SN Attr   VSize   VFree
# vg_data   2   3   0 wz--n- 200.00g 45.00g   ← 45 GB frei

lvextend -L +30G /dev/vg_data/lv_db
resize2fs /dev/vg_data/lv_db    # ext4
# oder
xfs_growfs /var/lib/mysql        # XFS

Du kannst lvextend und resize2fs mit dem -r-Flag in einem einzigen Befehl kombinieren:

lvextend -L +30G -r /dev/vg_data/lv_db

Online- vs. Offline-Vergrößerung

DateisystemOnline wachsen?Online verkleinern?Hinweise
ext4JaNein — Aushängen erforderlichFlexibelste Option; unterstützt Wachsen und Verkleinern
XFSJaNiemalsXFS kann prinzipiell nicht verkleinert werden
BtrfsJaJaOnline-Wachsen und -Verkleinern unterstützt
ext3JaNeinVeraltet; bevorzuge ext4
swapNeinNeinswapoff, LV verkleinern, mkswap, swapon

Logical Volume verkleinern (Nur ext4 — Gefährlich)

Verkleinern ist irreversibel, wenn es falsch gemacht wird. Erstelle immer ein Backup. XFS kann nicht verkleinert werden.

# 1. Dateisystem aushängen
umount /dev/vg_data/lv_home

# 2. Dateisystem VOR dem Verkleinern prüfen und reparieren
e2fsck -f /dev/vg_data/lv_home

# 3. Dateisystem auf die Zielgröße verkleinern
resize2fs /dev/vg_data/lv_home 50G

# 4. Logical Volume entsprechend verkleinern (muss >= Dateisystemgröße sein)
lvreduce -L 50G /dev/vg_data/lv_home

# 5. Wieder einhängen und überprüfen
mount /dev/vg_data/lv_home /home
df -h /home

Kritische Regel: führe immer zuerst resize2fs zum Verkleinern des Dateisystems aus, BEVOR du lvreduce ausführst. Das LV zuerst zu verkleinern schneidet Daten ab und beschädigt das Dateisystem.


Thin Provisioning

Thin Provisioning ermöglicht die Überbelegung von Speicher — mehr Speicher an LVs vergeben, als physisch in der VG vorhanden ist.

# Thin Pool erstellen (100 GB in einer VG, die möglicherweise nur 50 GB frei hat)
lvcreate --thin -L 100G vg_data/thin_pool

# Thin LVs aus dem Pool erstellen
lvcreate --thin -V 30G --name lv_web vg_data/thin_pool
lvcreate --thin -V 30G --name lv_db  vg_data/thin_pool

# Tatsächliche Pool-Nutzung überwachen
lvs -a vg_data
# Data%  zeigt, wie voll der Pool ist — Alarm bei 80%, Handlung bei 90%

Warnung: wenn ein Thin Pool vollständig gefüllt ist, werden alle LVs im Pool schreibgeschützt. Überwache die Nutzung mit lvs.


LVM-Snapshots

Snapshots erfassen den Zustand eines LV zu einem bestimmten Zeitpunkt mit Copy-on-Write. Sie sind die schnellste Möglichkeit, ein konsistentes Backup eines laufenden Servers zu erstellen.

# 5-GB-Snapshot von lv_root erstellen
lvcreate --snapshot -n lv_root_snap -L 5G /dev/vg_sys/lv_root

# Snapshot schreibgeschützt für Backup einhängen
mount -o ro /dev/vg_sys/lv_root_snap /mnt/snap
tar -czf /backup/root-$(date +%Y%m%d).tar.gz -C /mnt/snap .
umount /mnt/snap

# Snapshot nach Abschluss entfernen
lvremove /dev/vg_sys/lv_root_snap

Snapshot zusammenführen (Rollback)

# lv_root beim nächsten Start auf den Snapshot-Zustand zurücksetzen
lvconvert --merge /dev/vg_sys/lv_root_snap
reboot

LVM auf Cloud-VMs

Wenn du eine Disk in Azure, AWS oder GCP erweiterst, sieht das OS die größere Disk, aber das PV meldet noch die alte Größe. Verwende pvresize, um die LVM-Ansicht zu aktualisieren:

# Azure-Beispiel: Disk von 30 GB auf 50 GB im Portal erweitert
lsblk        # /dev/sda sollte 50G anzeigen

# Partition bei Bedarf vergrößern
sudo growpart /dev/sda 2

# LVM mitteilen, dass das PV jetzt größer ist
pvresize /dev/sda2

# Bestätigen, dass freier Speicher in der VG erschienen ist
vgs

# LV erweitern und Dateisystem wachsen lassen
lvextend -l +100%FREE -r /dev/vg_sys/lv_root

Häufige Fehler

FehlermeldungUrsacheLösung
Insufficient free spaceNicht genug PEs in der VGNeues PV mit pvcreate + vgextend hinzufügen, oder -l +100%FREE verwenden
Can't reduce LV below used spaceresize2fs-Ziel kleiner als tatsächliche DatenErst e2fsck -f ausführen, dann Dateisystem vor lvreduce verkleinern
Filesystem not showing new sizeresize2fs / xfs_growfs nach lvextend nicht ausgeführtresize2fs /dev/vg/lv oder xfs_growfs /einhängepunkt ausführen
Device /dev/sdX not foundPartitionstabelle nicht neu eingelesenpartprobe /dev/sdX ausführen, dann pvcreate erneut versuchen
WARNING: snapshot is fullCOW-Speicher erschöpftSnapshot erweitern: lvextend -L +2G /dev/vg/snap oder neu erstellen

LVM vs ZFS vs Btrfs vs mdadm vs Einfache Partitionen

FunktionLVMZFSBtrfsmdadmEinfache Partitionen
Online-VergrößerungJaJaJaBegrenztNein
SnapshotsJa (COW)Ja (COW)Ja (COW)NeinNein
RAIDJaJa (nativ)JaJaNein
KompressionNeinJaJaNeinNein
Thin ProvisioningJaJaTeilweiseNeinNein
LernkurveMittelHochMittelMittelNiedrig
Ideal fürAllgemeine Linux-ServerNAS, FreeBSDDesktop, FedoraLegacy-RAIDEinfaches Einzellaufwerk

Zusammenfassung

  • LVM fügt die Abstraktion PV → VG → LV hinzu: Speicher vergrößern und verschieben ohne Neustart.
  • Nutze pvdisplay, vgdisplay, lvdisplay und vgs, um das aktuelle Layout zu verstehen.
  • Kapazität hinzufügen: pvcreatevgextendlvextendresize2fs oder xfs_growfs.
  • Wachsen von ext4 und XFS ist immer online und sicher; nutze -r bei lvextend für einen Schritt.
  • Verkleinern erfordert Aushängen + e2fsck + resize2fs vor lvreduce. XFS kann nicht verkleinert werden.
  • Thin Provisioning ermöglicht Überbelegung; überwache Pool-Nutzung mit lvs.
  • Snapshots sind schnelle COW-Backups; dimensioniere sie großzügig.
  • Auf Cloud-VMs: pvresize nach Disk-Erweiterung im Portal verwenden.

Verwandte Artikel