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 lvm2Physical Volumes
PV erstellen
# Auf Partition
pvcreate /dev/sdb1
# Auf ganzer Disk
pvcreate /dev/sdcPVs anzeigen
pvs
pvdisplay
pvdisplay /dev/sdb1PV entfernen
pvremove /dev/sdb1Volume Groups
VG erstellen
vgcreate vg0 /dev/sdb1 /dev/sdc1VG erweitern
pvcreate /dev/sdd1
vgextend vg0 /dev/sdd1VG verkleinern
# Erst Daten von PV verschieben
pvmove /dev/sdb1
# Dann PV entfernen
vgreduce vg0 /dev/sdb1VGs anzeigen
vgs
vgdisplay
vgdisplay vg0Logical 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 vg0LVs anzeigen
lvs
lvdisplay
lvdisplay /dev/vg0/lv_homeLV-Pfade
# Äquivalent
/dev/vg0/lv_home
/dev/mapper/vg0-lv_homeDateisystem 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/fstabLV 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_homeDateisystem 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_homeLV 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 /homeXFS 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_homeSnapshot mounten
mount -o ro /dev/vg0/lv_home_snap /mnt/snapshotSnapshot 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_snapSnapshot mergen (Rollback)
# System auf Snapshot-Stand zurücksetzen
umount /dev/vg0/lv_home
lvconvert --merge /dev/vg0/lv_home_snap
# Neustart oder erneutes MountenThin Provisioning
Thin Pool erstellen
lvcreate -L 50G --thinpool thin_pool vg0Thin Volume erstellen
# Kann größer als Pool sein (Over-Provisioning)
lvcreate -V 100G --thin -n thin_vol vg0/thin_poolThin Snapshot
lvcreate -s -n thin_snap vg0/thin_volMigration 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/sdbLVM + RAID
RAID1-LV erstellen
lvcreate --type raid1 -m 1 -L 10G -n lv_mirror vg0RAID5-LV erstellen
lvcreate --type raid5 -i 3 -L 10G -n lv_raid5 vg0Cache (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_slowTroubleshooting
LV wird nicht erkannt
# LVM-Scan
pvscan
vgscan
lvscan
# Volumes aktivieren
vgchange -ay vg0VG inkonsistent
vgck vg0
vgreduce --removemissing vg0Metadaten reparieren
# Backup wiederherstellen
vgcfgrestore vg0
# Oder aus /etc/lvm/backup/Monitoring
Speicherplatz
# Übersicht
vgs
lvs
# Detailliert
pvdisplay
vgdisplay
lvdisplayThin Pool Nutzung
lvs -o+lv_metadata_size,metadata_percent,data_percentBest 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 AnwendungsfallBenennung
vg0, vg_data, vg_system
lv_root, lv_home, lv_varZusammenfassung
| 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.