LVM (Logical Volume Manager) ermöglicht flexible Speicherverwaltung unter Linux. Partitionen können dynamisch vergrößert, verkleinert und über mehrere Festplatten verteilt werden.
Grundkonzepte
LVM-Hierarchie
Physical Volumes (PV) → Physische Festplatten/Partitionen
↓
Volume Groups (VG) → Pool aus PVs
↓
Logical Volumes (LV) → "Partitionen" aus dem PoolBeispiel
┌──────────────────────────────────────────────┐
│ Volume Group: vg0 │
│ ┌────────────┐ ┌────────────┐ │
│ │ /dev/sda1 │ │ /dev/sdb1 │ (PVs) │
│ │ 100 GB │ │ 200 GB │ │
│ └────────────┘ └────────────┘ │
│ │
│ ┌──────┐ ┌──────┐ ┌──────┐ ┌─────────────┐│
│ │ root │ │ home │ │ var │ │ free ││
│ │ 50GB │ │100GB │ │ 50GB │ │ 100GB ││ (LVs)
│ └──────┘ └──────┘ └──────┘ └─────────────┘│
└──────────────────────────────────────────────┘Installation
# Debian/Ubuntu
apt install lvm2
# CentOS/RHEL
dnf install lvm2Physical Volumes (PV)
PV erstellen
# Auf Partition
pvcreate /dev/sdb1
# Auf ganzer Festplatte
pvcreate /dev/sdc
# Mehrere gleichzeitig
pvcreate /dev/sdb1 /dev/sdc1 /dev/sdd1PV anzeigen
# Übersicht
pvs
# Details
pvdisplay
pvdisplay /dev/sdb1PV entfernen
pvremove /dev/sdb1Volume Groups (VG)
VG erstellen
# Mit einem PV
vgcreate vg0 /dev/sdb1
# Mit mehreren PVs
vgcreate vg0 /dev/sdb1 /dev/sdc1VG anzeigen
# Übersicht
vgs
# Details
vgdisplay
vgdisplay vg0VG erweitern
# Neue Festplatte hinzufügen
pvcreate /dev/sdd1
vgextend vg0 /dev/sdd1VG verkleinern
# PV entfernen (Daten vorher verschieben!)
pvmove /dev/sdb1
vgreduce vg0 /dev/sdb1VG umbenennen
vgrename vg0 new_vg_nameVG entfernen
vgremove vg0Logical Volumes (LV)
LV erstellen
# Mit fester Größe
lvcreate -L 50G -n lv_root vg0
# Mit Prozent des freien Platzes
lvcreate -l 100%FREE -n lv_data vg0
# Mit Prozent der VG
lvcreate -l 50%VG -n lv_home vg0LV anzeigen
# Übersicht
lvs
# Details
lvdisplay
lvdisplay /dev/vg0/lv_rootLV vergrößern
# Um Größe erweitern
lvextend -L +10G /dev/vg0/lv_root
# Auf Größe erweitern
lvextend -L 100G /dev/vg0/lv_root
# Gesamten freien Platz nutzen
lvextend -l +100%FREE /dev/vg0/lv_root
# Mit Dateisystem erweitern
lvextend -L +10G -r /dev/vg0/lv_rootDateisystem erweitern
# ext4
resize2fs /dev/vg0/lv_root
# XFS (nur vergrößern!)
xfs_growfs /dev/vg0/lv_rootLV verkleinern
# Achtung: Dateisystem zuerst verkleinern!
# ext4 aushängen und prüfen
umount /dev/vg0/lv_home
e2fsck -f /dev/vg0/lv_home
# Dateisystem verkleinern
resize2fs /dev/vg0/lv_home 80G
# LV verkleinern
lvreduce -L 80G /dev/vg0/lv_home
# Wieder mounten
mount /dev/vg0/lv_home /homeLV umbenennen
lvrename vg0 old_name new_nameLV entfernen
# Aushängen
umount /dev/vg0/lv_data
# Entfernen
lvremove /dev/vg0/lv_dataDateisystem erstellen
# ext4
mkfs.ext4 /dev/vg0/lv_root
# XFS
mkfs.xfs /dev/vg0/lv_dataMounten
Manuell
mount /dev/vg0/lv_root /mntfstab
# /etc/fstab
/dev/vg0/lv_root / ext4 defaults 0 1
/dev/vg0/lv_home /home ext4 defaults 0 2
/dev/vg0/lv_data /data xfs defaults 0 0Snapshots
Snapshot erstellen
# Snapshot mit 5GB für Änderungen
lvcreate -L 5G -s -n lv_root_snap /dev/vg0/lv_rootSnapshot verwenden
# Mounten (readonly)
mount -o ro /dev/vg0/lv_root_snap /mnt/snapshot
# Backup vom Snapshot
tar -czf backup.tar.gz -C /mnt/snapshot .Snapshot wiederherstellen
# LV aushängen
umount /dev/vg0/lv_root
# Snapshot mergen (Original wiederherstellen)
lvconvert --merge /dev/vg0/lv_root_snap
# System neu starten (bei Root-Partition)
rebootSnapshot löschen
lvremove /dev/vg0/lv_root_snapThin Provisioning
Thin Pool erstellen
lvcreate -L 100G --thinpool thin_pool vg0Thin LV erstellen
# Virtuelle Größe kann Pool überschreiten
lvcreate -V 50G --thin -n thin_lv1 vg0/thin_pool
lvcreate -V 50G --thin -n thin_lv2 vg0/thin_pool
lvcreate -V 50G --thin -n thin_lv3 vg0/thin_poolPool-Status
lvs -aRAID mit LVM
RAID-1 (Mirror)
lvcreate --type raid1 -m 1 -L 50G -n lv_mirror vg0RAID-5
lvcreate --type raid5 -i 3 -L 50G -n lv_raid5 vg0RAID-Status
lvs -a -o +devicesFestplatte ersetzen
Daten verschieben
# Alte Festplatte: /dev/sdb1
# Neue Festplatte: /dev/sdd1
# Neue Festplatte hinzufügen
pvcreate /dev/sdd1
vgextend vg0 /dev/sdd1
# Daten von alter Festplatte verschieben
pvmove /dev/sdb1 /dev/sdd1
# Alte Festplatte entfernen
vgreduce vg0 /dev/sdb1
pvremove /dev/sdb1Backup und Restore
Konfiguration sichern
# Automatisch in /etc/lvm/backup/
vgcfgbackup vg0
# Manuelles Backup
vgcfgbackup -f /root/vg0_backup vg0Konfiguration wiederherstellen
vgcfgrestore -f /root/vg0_backup vg0Komplettes System klonen
# Snapshot erstellen
lvcreate -L 5G -s -n backup_snap /dev/vg0/lv_root
# Image erstellen
dd if=/dev/vg0/backup_snap of=/backup/root.img bs=4M
# Snapshot löschen
lvremove /dev/vg0/backup_snapTroubleshooting
VG nicht gefunden
# PVs scannen
pvscan
# VGs aktivieren
vgchange -ay
# Einzelne VG aktivieren
vgchange -ay vg0LV nicht aktiviert
# LV aktivieren
lvchange -ay /dev/vg0/lv_root
# Alle LVs aktivieren
vgchange -ayDefekte Metadaten
# Backup wiederherstellen
vgcfgrestore vg0
# Manuell reparieren
vgck vg0PV-UUID ändern
# Nach Klonen einer Festplatte
pvchange -u /dev/sdb1Best Practices
Empfehlungen
1. Root-Partition nicht zu klein (min. 20GB)
2. /home auf separatem LV
3. Etwas freien Platz in VG lassen (für Snapshots)
4. XFS für große Dateien, ext4 für allgemein
5. Regelmäßige Backups der LVM-KonfigurationTypische Aufteilung
# Beispiel für 500GB VG
lvcreate -L 30G -n lv_root vg0 # /
lvcreate -L 100G -n lv_home vg0 # /home
lvcreate -L 50G -n lv_var vg0 # /var
lvcreate -L 8G -n lv_swap vg0 # swap
# Rest frei für Snapshots/ErweiterungZusammenfassung
| Befehl | Funktion | |--------|----------| | pvcreate | Physical Volume erstellen | | vgcreate | Volume Group erstellen | | lvcreate | Logical Volume erstellen | | lvextend -r | LV + Dateisystem erweitern | | pvmove | Daten zwischen PVs verschieben | | lvs/vgs/pvs | Status anzeigen |
| Option | Bedeutung | |--------|-----------| | -L 50G | Feste Größe | | -l 100%FREE | Relativer freier Platz | | -s | Snapshot | | -m 1 | Mirror (RAID-1) | | -r | Dateisystem automatisch anpassen |
Fazit
LVM bietet flexible Speicherverwaltung für Linux-Server. Die Möglichkeit, Partitionen dynamisch zu vergrößern und Snapshots zu erstellen, ist besonders wertvoll. Für neue Installationen empfiehlt sich LVM, da spätere Änderungen ohne Neupartitionierung möglich sind. Thin Provisioning ermöglicht effiziente Speichernutzung, erfordert aber sorgfältige Überwachung.