LVM Logical Volume Manager Linux Tutorial
LVM – Logical Volume Manager unter Linux einrichten und verwalten
Was ist LVM und warum sollte man es nutzen?
LVM (Logical Volume Manager) ist ein System zur Abstraktion und Virtualisierung von physischen Festplatten und Partitionen. Anstatt direkt mit Partitionen zu arbeiten, erstellt man Logical Volumes (LV), die flexible Größe haben und über mehrere physische Disks verteilt sein können. LVM ermöglicht es, Speicher dynamisch zu verwalten, ohne Downtime zu verursachen.
Hauptvorteile von LVM
- Flexible Speicherverwaltung: LVs können online vergrößert und verkleinert werden (für ext4, XFS)
- Online-Erweiterung ohne Neustart: Neue Disks hinzufügen und Volumes erweitern während das System läuft
- Snapshots: Point-in-Time Kopien ohne zusätzliche physische Speicherung, ideal für Backups
- Migration: Daten zwischen Disks migrieren ohne Ausfallzeit
- Redundanz: RAID-ähnliche Funktionen ohne Hardware-RAID-Controller
- Mehrere Disks kombinieren: Ein LV kann über mehrere physische Disks verteilt sein
- Thin Provisioning: Mehr Speicher zuteilen als physisch vorhanden ist
LVM Architektur und Konzepte
LVM basiert auf einer hierarchischen Struktur aus vier Ebenen. Hier ist die grundlegende Architektur:
Physical Disks (/dev/sdb, /dev/sdc, etc.)
|
V
Physical Volumes (PV) - /dev/sdb1, /dev/sdc1
|
V
Volume Groups (VG) - data-vg, backup-vg
|
V
Logical Volumes (LV) - data-lv, backup-lv, logs-lv
|
V
Filesystems (ext4, xfs, btrfs, etc.)
|
V
Mount Points (/mnt/data, /var/backup, etc.)
Schlüsselkonzepte erklärt
- Physical Volume (PV): Eine Festplattenpartition oder ganze Disk, die LVM zur Verwendung initialisiert wird. Mehrere PVs bilden einen Speicher-Pool.
- Volume Group (VG): Ein logischer Speicher-Pool aus einem oder mehreren PVs. Aus einer VG können mehrere LVs erstellt werden.
- Logical Volume (LV): Ein virtuelles Volume wie eine normale Festplattenpartition, aber mit flexibler Größe. LVs werden aus VG-Space erstellt.
- Physical Extent (PE): Die kleinste Allokationseinheit in einer VG (standardmäßig 4 MB). Ein LV besteht aus mehreren dieser PEs.
- Logical Extent (LE): Die Zuordnung eines PE zu einem LV.
Installation von LVM
Installieren Sie das LVM2-Paket, das alle notwendigen Tools enthält:
sudo apt update sudo apt install -y lvm2
Überprüfen Sie die Installation:
lvm version
Die Ausgabe sollte die Versionsnummer und "LVM version" anzeigen.
Schritt 1: Festplatten vorbereiten
Listen Sie alle verfügbaren Block-Geräte auf, um zu sehen, welche Disks zur Verfügung stehen:
lsblk fdisk -l
Für dieses Beispiel verwenden wir /dev/sdb (eine zusätzliche Festplatte). Partitionieren Sie die Disk mit fdisk:
sudo fdisk /dev/sdb
Folgen Sie diesen Schritten im interaktiven fdisk-Menü:
Command (m for help): n # Neue Partition erstellen Partition type (p for primary): p # Primäre Partition Partition number (1-4, default 1): 1 # Partitionsnummer 1 First sector: [Enter] # Standard akzeptieren (erste verfügbar) Last sector: [Enter] # Standard akzeptieren (ganze Disk) Command (m for help): t # Partitionstyp ändern Partition number (1-4): 1 # Partition 1 Hex code (type L to list all codes): 8e # LVM-Typ (8e ist Linux LVM) Command (m for help): w # Änderungen schreiben und beenden
Überprüfen Sie die neue Partition:
sudo lsblk /dev/sdb sudo fdisk -l /dev/sdb
Sie sollten /dev/sdb1 mit Typ "Linux LVM" sehen.
Schritt 2: Physical Volume (PV) erstellen
Initialisieren Sie die Partition als Physical Volume für LVM:
sudo pvcreate /dev/sdb1
Überprüfen Sie den erstellten Physical Volume:
sudo pvdisplay
Dies zeigt alle PVs mit Details. Oder verwenden Sie die kompakte Ansicht:
sudo pvs
Detaillierte Informationen für einen spezifischen PV:
sudo pvdisplay /dev/sdb1
Schritt 3: Volume Group (VG) erstellen
Erstellen Sie eine Volume Group aus einem oder mehreren Physical Volumes:
sudo vgcreate data-vg /dev/sdb1
Dies erstellt eine VG namens "data-vg" mit dem PV /dev/sdb1. Überprüfen Sie:
sudo vgdisplay sudo vgs
Detaillierte Informationen:
sudo vgdisplay data-vg
Die Ausgabe zeigt verfügbare Space, Anzahl PEs, PE-Größe (standardmäßig 4 MB) und andere Details.
Schritt 4: Logical Volume (LV) erstellen
Erstellen Sie ein Logical Volume innerhalb der Volume Group:
sudo lvcreate -L 20G -n data-lv data-vg
Dies erstellt ein LV namens "data-lv" mit 20 GB Größe in der VG "data-vg". Alternativ können Sie eine prozentuale Größe verwenden:
sudo lvcreate -l 50%VG -n data-lv data-vg
Dies würde 50% des gesamten VG-Space verwenden. Überprüfen Sie die neuen LVs:
sudo lvdisplay sudo lvs
Das neue LV ist unter /dev/data-vg/data-lv oder /dev/mapper/data--vg-data--lv verfügbar.
Schritt 5: Dateisystem erstellen und mounten
Erstellen Sie ein Dateisystem auf dem Logical Volume (ext4 ist am weitesten verbreitet):
sudo mkfs.ext4 /dev/data-vg/data-lv
Oder für XFS (bessere Performance bei großen Volumes):
sudo mkfs.xfs /dev/data-vg/data-lv
Erstellen Sie ein Mount-Verzeichnis:
sudo mkdir -p /mnt/data
Mounten Sie das Volume:
sudo mount /dev/data-vg/data-lv /mnt/data
Überprüfen Sie das Mounting:
lsblk df -h /mnt/data
Um das Mount persistent zu machen, fügen Sie es zu /etc/fstab hinzu:
sudo nano /etc/fstab
Fügen Sie diese Zeile am Ende hinzu:
/dev/data-vg/data-lv /mnt/data ext4 defaults,nofail 0 2
Speichern Sie die Datei und testen Sie, ob die Konfiguration korrekt ist:
sudo mount -a
Schritt 6: Neue Disk zu Volume Group hinzufügen
Wenn Sie mehr Speicher benötigen, können Sie neue Disks zur bestehenden VG hinzufügen, ohne bestehende LVs zu beeinflussen.
Bereiten Sie die neue Disk vor (z.B. /dev/sdc):
sudo fdisk /dev/sdc # Wiederholen Sie die Schritte vom Step 1 (neue Partition mit Typ 8e)
Erstellen Sie einen PV auf der neuen Partition:
sudo pvcreate /dev/sdc1
Erweitern Sie die VG mit dem neuen PV:
sudo vgextend data-vg /dev/sdc1
Überprüfen Sie die erweiterte VG:
sudo vgdisplay data-vg sudo pvs
Schritt 7: Logical Volume erweitern (Online-Erweiterung)
Das ist einer der Hauptvorteile von LVM - Sie können ein LV erweitern OHNE es zu unmounten:
sudo lvextend -L +10G /dev/data-vg/data-lv
Das LV ist nun vergrößert, aber das Dateisystem muss auch erweitert werden:
sudo resize2fs /dev/data-vg/data-lv
Für XFS verwenden Sie xfs_growfs:
sudo xfs_growfs /mnt/data
Überprüfen Sie das Ergebnis:
sudo lvs df -h /mnt/data
Alle verfügbaren Space verwenden
Um alle freien Space in der VG zu verwenden:
sudo lvextend -l +100%FREE /dev/data-vg/data-lv sudo resize2fs /dev/data-vg/data-lv
Schritt 8: Logical Volume verkleinern (mit Vorsicht)
Um ein LV zu verkleinern, müssen Sie mehrere Schritte in der richtigen Reihenfolge durchführen:
1. Unmounten Sie das Dateisystem:
sudo umount /mnt/data
2. Überprüfen Sie das Dateisystem auf Fehler:
sudo e2fsck -f /dev/data-vg/data-lv
3. Verkleinern Sie das Dateisystem (nicht das LV!) - z.B. auf 15 GB:
sudo resize2fs /dev/data-vg/data-lv 15G
4. Verkleinern Sie dann das LV selbst:
sudo lvreduce -L 15G /dev/data-vg/data-lv
5. Mounten Sie es wieder:
sudo mount /dev/data-vg/data-lv /mnt/data
6. Überprüfen Sie die neue Größe:
df -h /mnt/data sudo lvs
Schritt 9: Snapshots erstellen und verwalten
Snapshots erstellen eine Point-in-Time-Kopie eines LV für schnelle Backups oder Tests, ohne zusätzliche physische Speicherung.
Snapshot erstellen
Erstellen Sie einen Snapshot des data-lv:
sudo lvcreate -s -n data-snap -L 5G /dev/data-vg/data-lv
Dies erstellt einen Read-Only Snapshot namens "data-snap" mit 5 GB Space für Änderungen am Original-LV während der Snapshot existiert.
Überprüfen Sie die Snapshots:
sudo lvs -o lv_name,lv_size,pool_lv /dev/data-vg/
Snapshot mounten (Read-Only)
Sie können einen Snapshot als Read-Only Filesystem mounten, um von einem bestimmten Zeitpunkt zu arbeiten:
sudo mkdir -p /mnt/data-snap sudo mount -o ro /dev/data-vg/data-snap /mnt/data-snap
Jetzt können Sie Dateien vom Snapshot kopieren, wiederherstellen oder überprüfen, ohne das Original zu beeinflussen.
Snapshot löschen
Wenn Sie den Snapshot nicht mehr benötigen:
sudo umount /mnt/data-snap sudo lvremove /dev/data-vg/data-snap
Aus Snapshot wiederherstellen (Rollback)
Um den gesamten LV zu seinem Snapshot-Zustand zurückzufahren:
sudo umount /mnt/data sudo lvconvert --merge /dev/data-vg/data-snap
Das LV wird beim nächsten Mounten zum Snapshot-Zustand zurückgesetzt. Der Snapshot wird nach dem Merge gelöscht.
Schritt 10: Logical Volumes entfernen
Um ein LV zu entfernen, müssen Sie es zuerst unmounten:
sudo umount /mnt/data sudo lvremove /dev/data-vg/data-lv
Um eine ganze Volume Group zu entfernen (alle LVs müssen zuerst gelöscht sein):
sudo vgremove data-vg
Um Physical Volumes zu entfernen:
sudo pvremove /dev/sdb1
Praktisches Szenario: Server-Disk fast voll
Ein reales Beispiel für die Verwendung von LVM zum Beheben eines vollen Dateisystems:
Das Problem
Ihr /data-Partition ist zu 95% voll und Sie benötigen schnell mehr Speicher, ohne Downtime zu verursachen oder das System neu zu partitionieren.
Die Lösung mit LVM
1. Neue Festplatte an Server anschließen (/dev/sdc)
2. Physical Volume erstellen:
sudo pvcreate /dev/sdc1
3. Zur bestehenden VG hinzufügen:
sudo vgextend data-vg /dev/sdc1
4. LV online erweitern um 100 GB:
sudo lvextend -L +100G /dev/data-vg/data-lv
5. Dateisystem erweitern (während es mounted ist!):
sudo resize2fs /dev/data-vg/data-lv
6. Überprüfen Sie das Ergebnis:
df -h /mnt/data
Fertig! Alles ist erledigt - KEIN Neustart erforderlich! Die Benutzer erleben KEINE Downtime und der Speicher ist sofort verfügbar.
LVM Thin Provisioning
Thin Provisioning ermöglicht es, mehr Speicher zuzuteilen, als physisch vorhanden ist. Der Speicher wird nur bei Bedarf tatsächlich verwendet.
Erstellen Sie einen Thin Pool:
sudo lvcreate -L 100G --thinpool tp_data data-vg
Erstellen Sie LVs aus dem Thin Pool:
sudo lvcreate -V 50G -T data-vg/tp_data -n thin-lv1 sudo lvcreate -V 75G -T data-vg/tp_data -n thin-lv2
Dies erstellt zwei LVs mit zusammen 125 GB Größe, obwohl der Pool nur 100 GB hat. Der Speicher wird bei tatsächlicher Verwendung aus dem Pool allokiert. Dies ist sehr nützlich für virtuelle Maschinen oder Container mit variablem Speicherbedarf.
Vergleich: LVM vs Plain Partitions vs ZFS
| Feature | LVM | Plain Partitions (fdisk) | ZFS |
|---|---|---|---|
| Online-Erweiterung | Ja (sehr einfach) | Nein (Neustart nötig) | Ja (native) |
| Online-Verkleinerung | Ja (mit Vorsicht) | Nein (sehr kompliziert) | Ja |
| Snapshots | Ja (Copy-on-Write) | Nein | Ja (native) |
| Mehrere Disks kombinieren | Ja (flexibel) | Nein (einzelne Partitionen) | Ja (native Pools) |
| Dateisystem-Checksummen | Nein (vom FS abhängig) | Nein (vom FS abhängig) | Ja (SHA-256 native) |
| Komplexität | Mittel (lernenswert) | Einfach | Komplex (viele Features) |
| Hardwareunterstützung | Alle Linux-Systeme | Alle Betriebssysteme | Linux, BSD, Solaris |
| Performance | Gut (minimal Overhead) | Sehr gut (kein Overhead) | Ausgezeichnet (mit ARC) |
| Lizenz | GPL (kostenlos) | N/A | CDDL |
| Best für | Linux-Server, Flexibilität | Einfache Setups, USB-Sticks | High-End Storage, NAS |
Wichtigste LVM-Befehle Übersicht
| Befehl | Funktion |
|---|---|
| sudo pvcreate /dev/sdb1 | Physical Volume erstellen |
| sudo pvdisplay | Alle PVs anzeigen (detailliert) |
| sudo pvs | Alle PVs anzeigen (kompakt) |
| sudo vgcreate vg-name /dev/sdb1 | Volume Group erstellen |
| sudo vgdisplay | Alle VGs anzeigen (detailliert) |
| sudo vgs | Alle VGs anzeigen (kompakt) |
| sudo vgextend vg-name /dev/sdc1 | VG mit neuem PV erweitern |
| sudo lvcreate -L 20G -n lv-name vg-name | Logical Volume (20 GB) erstellen |
| sudo lvdisplay | Alle LVs anzeigen (detailliert) |
| sudo lvs | Alle LVs anzeigen (kompakt) |
| sudo lvextend -L +10G /dev/vg-name/lv-name | LV um 10 GB erweitern |
| sudo resize2fs /dev/vg-name/lv-name | Ext4-Dateisystem erweitern |
| sudo xfs_growfs /mount/point | XFS-Dateisystem erweitern |
| sudo lvreduce -L 15G /dev/vg-name/lv-name | LV verkleinern (mit Vorsicht!) |
| sudo lvcreate -s -n snap-name -L 5G /dev/vg-name/lv-name | Snapshot erstellen |
| sudo lvremove /dev/vg-name/lv-name | LV entfernen |
| sudo vgremove vg-name | VG entfernen (LVs müssen weg) |
| sudo pvremove /dev/sdb1 | PV entfernen |
Best Practices und Tipps
- Immer Backups vor Verkleinerung: Sichern Sie IMMER Ihre Daten, bevor Sie LVs verkleinern. Dies ist eine gefährliche Operation.
- Snapshot-Größe berechnen: Ein Snapshot sollte 30-50% der LV-Größe sein, um alle Änderungen am Original-LV zu speichern.
- Aussagekräftige Naming Convention: Verwenden Sie beschreibende Namen (z.B. "data-lv", "backup-lv", "logs-lv") statt "lv1", "lv2".
- Regelmäßig monitoren: Überprüfen Sie die Auslastung mit: watch -n 1 'lvs; echo; vgs'
- Space-Puffer halten: Halten Sie immer 10-20% freien Space in VGs für Operationen und Snapshots.
- Dokumentation führen: Dokumentieren Sie Ihre LVM-Struktur für zukünftige Wartung (z.B. welche LVs welchen Services entsprechen).
- Ext4 über XFS: Für ext4 können Sie Dateisysteme online vergrößern und verkleinern. XFS kann nur vergrößert werden.
Fehlerbehebung
LV wird beim Boot nicht gemountet
Überprüfen Sie /etc/fstab auf Fehler und führen Sie aus:
sudo mount -a
Falls Fehler auftreten, überprüfen Sie die Device-Pfade und stellen Sie sicher, dass lvm2 installiert ist.
VG zeigt fehlende Physical Volumes
Wenn ein PV ausfällt, können Sie es entfernen:
sudo vgdisplay sudo vgreduce --removemissing data-vg
Snapshot ist voll
Snapshots haben endliche Größe. Wenn der Snapshot voll ist, können Sie ihn löschen oder erweitern:
sudo lvextend -L +5G /dev/data-vg/data-snap
Keine freie Space in VG für Erweiterung
Überprüfen Sie freie Space und fügen Sie ggf. neue Disks hinzu:
sudo vgs sudo vgextend data-vg /dev/sdd1
Zusammenfassung
LVM ist ein mächtiges und flexibles Werkzeug für Speicherverwaltung unter Linux. Mit LVM können Sie Ihre Infrastruktur agiler gestalten, ohne physische Umpartitionierung oder Neustarts durchzuführen. Die grundlegende Hierarchie ist: Physical Volumes → Volume Groups → Logical Volumes → Filesystems. Starten Sie mit einfachen Setups und erweitern Sie schrittweise nach Bedarf.
Die Hauptvorteile sind Online-Erweiterung, Snapshots für Backups und die Flexibilität, mehrere Disks zu kombinieren. Mit LVM sparen Sie Zeit und vermeiden teure Downtime bei Speichererweiterungen.