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 Pool

Beispiel

┌──────────────────────────────────────────────┐
│              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 lvm2

Physical Volumes (PV)

PV erstellen

# Auf Partition
pvcreate /dev/sdb1

# Auf ganzer Festplatte
pvcreate /dev/sdc

# Mehrere gleichzeitig
pvcreate /dev/sdb1 /dev/sdc1 /dev/sdd1

PV anzeigen

# Übersicht
pvs

# Details
pvdisplay
pvdisplay /dev/sdb1

PV entfernen

pvremove /dev/sdb1

Volume Groups (VG)

VG erstellen

# Mit einem PV
vgcreate vg0 /dev/sdb1

# Mit mehreren PVs
vgcreate vg0 /dev/sdb1 /dev/sdc1

VG anzeigen

# Übersicht
vgs

# Details
vgdisplay
vgdisplay vg0

VG erweitern

# Neue Festplatte hinzufügen
pvcreate /dev/sdd1
vgextend vg0 /dev/sdd1

VG verkleinern

# PV entfernen (Daten vorher verschieben!)
pvmove /dev/sdb1
vgreduce vg0 /dev/sdb1

VG umbenennen

vgrename vg0 new_vg_name

VG entfernen

vgremove vg0

Logical 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 vg0

LV anzeigen

# Übersicht
lvs

# Details
lvdisplay
lvdisplay /dev/vg0/lv_root

LV 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_root

Dateisystem erweitern

# ext4
resize2fs /dev/vg0/lv_root

# XFS (nur vergrößern!)
xfs_growfs /dev/vg0/lv_root

LV 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 /home

LV umbenennen

lvrename vg0 old_name new_name

LV entfernen

# Aushängen
umount /dev/vg0/lv_data

# Entfernen
lvremove /dev/vg0/lv_data

Dateisystem erstellen

# ext4
mkfs.ext4 /dev/vg0/lv_root

# XFS
mkfs.xfs /dev/vg0/lv_data

Mounten

Manuell

mount /dev/vg0/lv_root /mnt

fstab

# /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 0

Snapshots

Snapshot erstellen

# Snapshot mit 5GB für Änderungen
lvcreate -L 5G -s -n lv_root_snap /dev/vg0/lv_root

Snapshot 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)
reboot

Snapshot löschen

lvremove /dev/vg0/lv_root_snap

Thin Provisioning

Thin Pool erstellen

lvcreate -L 100G --thinpool thin_pool vg0

Thin 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_pool

Pool-Status

lvs -a

RAID mit LVM

RAID-1 (Mirror)

lvcreate --type raid1 -m 1 -L 50G -n lv_mirror vg0

RAID-5

lvcreate --type raid5 -i 3 -L 50G -n lv_raid5 vg0

RAID-Status

lvs -a -o +devices

Festplatte 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/sdb1

Backup und Restore

Konfiguration sichern

# Automatisch in /etc/lvm/backup/
vgcfgbackup vg0

# Manuelles Backup
vgcfgbackup -f /root/vg0_backup vg0

Konfiguration wiederherstellen

vgcfgrestore -f /root/vg0_backup vg0

Komplettes 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_snap

Troubleshooting

VG nicht gefunden

# PVs scannen
pvscan

# VGs aktivieren
vgchange -ay

# Einzelne VG aktivieren
vgchange -ay vg0

LV nicht aktiviert

# LV aktivieren
lvchange -ay /dev/vg0/lv_root

# Alle LVs aktivieren
vgchange -ay

Defekte Metadaten

# Backup wiederherstellen
vgcfgrestore vg0

# Manuell reparieren
vgck vg0

PV-UUID ändern

# Nach Klonen einer Festplatte
pvchange -u /dev/sdb1

Best 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-Konfiguration

Typische 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/Erweiterung

Zusammenfassung

| 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.