LVM (Logical Volume Manager) ermöglicht flexible Speicherverwaltung unter Linux. Volumes können zur Laufzeit vergrößert, verkleinert und zwischen Festplatten verschoben werden.

LVM-Konzepte

Architektur

Physical Volumes (PV) → Volume Groups (VG) → Logical Volumes (LV)

+--------+  +--------+
|  /dev/ |  |  /dev/ |
|  sdb   |  |  sdc   |   Physical Volumes
+--------+  +--------+
     \          /
      \        /
    +------------+
    |    vg0     |        Volume Group
    +------------+
    /    |      \
   /     |       \
+----+ +----+ +----+
| lv | | lv | | lv |      Logical Volumes
|root| |home| |var |
+----+ +----+ +----+

Terminologie

| Begriff | Beschreibung | |---------|--------------| | PV | Physical Volume (Festplatte/Partition) | | VG | Volume Group (Pool aus PVs) | | LV | Logical Volume (virtuelle Partition) | | PE | Physical Extent (kleinste Einheit) |

Installation

apt install lvm2

Physical Volumes

PV erstellen

# Auf Partition
pvcreate /dev/sdb1

# Auf ganzer Disk
pvcreate /dev/sdc

PVs anzeigen

pvs
pvdisplay
pvdisplay /dev/sdb1

PV entfernen

pvremove /dev/sdb1

Volume Groups

VG erstellen

vgcreate vg0 /dev/sdb1 /dev/sdc1

VG erweitern

pvcreate /dev/sdd1
vgextend vg0 /dev/sdd1

VG verkleinern

# Erst Daten von PV verschieben
pvmove /dev/sdb1

# Dann PV entfernen
vgreduce vg0 /dev/sdb1

VGs anzeigen

vgs
vgdisplay
vgdisplay vg0

Logical Volumes

LV erstellen

# Mit fester Größe
lvcreate -L 10G -n lv_home vg0

# Mit Prozent des freien Platzes
lvcreate -l 100%FREE -n lv_data vg0

# Mit Anzahl Extents
lvcreate -l 2560 -n lv_var vg0

LVs anzeigen

lvs
lvdisplay
lvdisplay /dev/vg0/lv_home

LV-Pfade

# Äquivalent
/dev/vg0/lv_home
/dev/mapper/vg0-lv_home

Dateisystem erstellen und mounten

# Dateisystem erstellen
mkfs.ext4 /dev/vg0/lv_home

# Mounten
mount /dev/vg0/lv_home /home

# In fstab eintragen
echo "/dev/vg0/lv_home /home ext4 defaults 0 2" >> /etc/fstab

LV vergrößern

Volume vergrößern

# Um 5 GB
lvextend -L +5G /dev/vg0/lv_home

# Auf 20 GB
lvextend -L 20G /dev/vg0/lv_home

# Gesamter freier Platz
lvextend -l +100%FREE /dev/vg0/lv_home

Dateisystem vergrößern

# ext4 (online möglich)
resize2fs /dev/vg0/lv_home

# XFS (online möglich)
xfs_growfs /home

# In einem Schritt
lvextend -L +5G --resizefs /dev/vg0/lv_home

LV verkleinern

ext4 verkleinern

# VORSICHT: Backup vorher!

# Unmounten
umount /home

# Dateisystem prüfen
e2fsck -f /dev/vg0/lv_home

# Dateisystem verkleinern
resize2fs /dev/vg0/lv_home 15G

# LV verkleinern
lvreduce -L 15G /dev/vg0/lv_home

# Wieder mounten
mount /dev/vg0/lv_home /home

XFS kann nicht verkleinert werden

XFS unterstützt kein Verkleinern.
Workaround: Backup, neues LV erstellen, Restore.

Snapshots

Snapshot erstellen

lvcreate -L 5G -s -n lv_home_snap /dev/vg0/lv_home

Snapshot mounten

mount -o ro /dev/vg0/lv_home_snap /mnt/snapshot

Snapshot als Backup nutzen

# Snapshot erstellen
lvcreate -L 5G -s -n backup_snap /dev/vg0/lv_data

# Backup durchführen
mount -o ro /dev/vg0/backup_snap /mnt/snapshot
tar -czf backup.tar.gz /mnt/snapshot

# Aufräumen
umount /mnt/snapshot
lvremove /dev/vg0/backup_snap

Snapshot mergen (Rollback)

# System auf Snapshot-Stand zurücksetzen
umount /dev/vg0/lv_home
lvconvert --merge /dev/vg0/lv_home_snap
# Neustart oder erneutes Mounten

Thin Provisioning

Thin Pool erstellen

lvcreate -L 50G --thinpool thin_pool vg0

Thin Volume erstellen

# Kann größer als Pool sein (Over-Provisioning)
lvcreate -V 100G --thin -n thin_vol vg0/thin_pool

Thin Snapshot

lvcreate -s -n thin_snap vg0/thin_vol

Migration zwischen Disks

Daten verschieben

# Neue Disk hinzufügen
pvcreate /dev/sdd
vgextend vg0 /dev/sdd

# Daten von alter Disk verschieben
pvmove /dev/sdb /dev/sdd

# Alte Disk entfernen
vgreduce vg0 /dev/sdb
pvremove /dev/sdb

LVM + RAID

RAID1-LV erstellen

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

RAID5-LV erstellen

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

Cache (SSD + HDD)

SSD-Cache für HDD

# Cache-Pool erstellen (SSD)
lvcreate -L 20G -n cache_pool vg0 /dev/ssd

# Cache-Meta erstellen
lvcreate -L 100M -n cache_meta vg0 /dev/ssd

# Cache-Pool erstellen
lvconvert --type cache-pool --poolmetadata vg0/cache_meta vg0/cache_pool

# Cache auf LV anwenden
lvconvert --type cache --cachepool vg0/cache_pool vg0/lv_slow

Troubleshooting

LV wird nicht erkannt

# LVM-Scan
pvscan
vgscan
lvscan

# Volumes aktivieren
vgchange -ay vg0

VG inkonsistent

vgck vg0
vgreduce --removemissing vg0

Metadaten reparieren

# Backup wiederherstellen
vgcfgrestore vg0

# Oder aus /etc/lvm/backup/

Monitoring

Speicherplatz

# Übersicht
vgs
lvs

# Detailliert
pvdisplay
vgdisplay
lvdisplay

Thin Pool Nutzung

lvs -o+lv_metadata_size,metadata_percent,data_percent

Best Practices

Planung

- VG großzügig dimensionieren
- Nicht 100% allokieren (Reserve für Snapshots)
- Thin Provisioning für flexible Nutzung
- ext4 oder XFS je nach Anwendungsfall

Benennung

vg0, vg_data, vg_system
lv_root, lv_home, lv_var

Zusammenfassung

| Befehl | Funktion | |--------|----------| | pvcreate | Physical Volume erstellen | | vgcreate | Volume Group erstellen | | lvcreate | Logical Volume erstellen | | lvextend | LV vergrößern | | lvreduce | LV verkleinern | | pvmove | Daten zwischen PVs verschieben |

| Option | Beschreibung | |--------|--------------| | -L | Größe absolut (z.B. 10G) | | -l | Größe in Extents oder % | | -s | Snapshot erstellen | | -n | Name vergeben |

| Pfad | Beschreibung | |------|--------------| | /dev/vg0/lv_home | LV-Pfad | | /dev/mapper/vg0-lv_home | Mapper-Pfad | | /etc/lvm/backup/ | VG-Backups |

Fazit

LVM bietet maximale Flexibilität bei der Speicherverwaltung. Volumes können ohne Neupartitionierung angepasst werden. Snapshots ermöglichen konsistente Backups laufender Systeme. Thin Provisioning optimiert die Speichernutzung. Für Server-Umgebungen ist LVM quasi Standard. Die Kombination mit RAID auf Hardware- oder Software-Ebene bietet zusätzliche Sicherheit.