Logical Volume Manager (LVM)
LVM (Logical Volume Manager) erlaubt im Grunde die flexiblere Verwaltung von "Partitionen" einer Festplatte. Anstatt die Partitionen beim Einrichten eines Datenträgers (z.B. mittels fdisk
) einmal - mehr oder weniger - fix festzulegen, erzeugt man mit LVM sog. Volume Groups
(VG). Eine solche Volume Group
kann mehrere physikalische Datenträger umfassen1. Innerhalb der Volume Groups
werden dann die eigentlichen Logical Volumes
(LV) erzeugt. Diese können dann wie physikalische Datenträger behandelt und mit beliebigen Dateisystemen versehen werden.
Ein weiteres Feature von LVM sind sog. Snapshots
. Ein Snapshot
friert den Zustand des Dateisystems zum Zeitpunkt der Erstellung des Snapshots quasi ein. Die Daten im Snapshot verändern sich nicht mehr. Technisch funktioniert dies über das sog. Copy on write
2. Dies ist sehr hilfreich um konsistente Backups erstellen zu können.
Einrichtung
Die VG(s) und ersten LVs richtet man bestenfalls bereits bei der Installation von Debian mittels debian-installer
ein. Nachträglich ist es eigentlich nur bei neuen, zusätzlichen Datenträgern sinnvoll, diese können entweder einer bestehenden VG hinzugefügt oder für eine ganz neue VG genutzt werden.
Da LVM unterhalb des Dateisystems agiert, müssen die Datenträger neu formatiert werden. Hierbei gehen alle Daten auf den jeweiligen Datenträgern verloren.
Physical Volumes
Bevor man Datenträger mit LVM verwalten kann, müssen sie mit dem Befehl pvcreate
3 für die Verwendung vorbereitet werden:
pvcreate /dev/sd[X]
Volume Groups
Um eine Volume-Group zu erzeugen wird der Befehl vgcreate
4 genutzt:
vgcreate -n <VGNAME> /dev/sd[X] [/dev/sd[X], /dev/sd[X]]
<VGNAME>
wird durch den gewünschten Namen der Volume Group ersetzt (z.B. vg1
). Mittels vgdisplay
kann man sich die vorhandenen VGs anzeigen lassen:
--- Volume group ---
VG Name vg1
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 143
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size <450.24 GiB
PE Size 4.00 MiB
Total PE 115261
Alloc PE / Size 109195 / 426.54 GiB
Free PE / Size 6066 / <23.70 GiB
VG UUID Wpoj93-0L3O-CMHW-c5oQ-g37D-zy1c-WCyIbH
[!TIP] Es sollte immer ein gewisser freier Speicherplatz vorhanden bleiben. Zum einen ist man so flexibel, wenn sich Anforderungen an das System ändern und z.B. eine neue "Partition" für bestimmte Daten sinnvoll würde. Aber auch für die Nutzung von Snapshots wird freier Speicherplatz in der VG benötigt.
Logical Volumes
Innerhalb der VGs können LVs angelegt werden. Dies erfolgt mit dem Befehl lvcreate
5:
lvcreate -L <X>G vg1
<X>G
gibt die Größe des Volumes in Gigabyte an. Mit dem Befehl lvdisplay
können die vorhandenen Volumes angezeigt werden:
--- Logical volume ---
LV Path /dev/vg1/data
LV Name data
VG Name vg1
LV UUID 1LgNPe-J1ge-K5Kv-e81W-tP8Z-8utM-f13nLF
LV Write Access read/write
LV Creation host, time (none), 2023-06-08 02:49:42 +0200
LV Status available
# open 1
LV Size <922.01 GiB
Current LE 236034
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:4
Snapshots
Wie bereits erwähnt sind Snapshots u.a. bei der Erzeugung von Backups sehr praktisch. Normalerweise müsste man für ein konsistentes Backup z.B. einer Datenbank spezielle Tools nutzen, die sicherstellen, dass während des Backups keine Änderungen an den gerade zu kopierenden Daten vorgenommen werden. Eine Datei deren Anfang nicht um Ende passt, hat schließlich wenig Wert. Ein Snapshot macht die Nutzung spezieller Tools überflüssig und kann so das Backup erheblich vereinfachen.
Ein Snapshot wird mit dem Befehl lvcreate
erzeugt:
lvcreate -l100%FREE -s -n backup-snapshot /dev/<VG>/<LV>
Der Parameter -l100%FREE
sorgt dafür, dass 100% des freien Speicherplatzes in der angegebenen <VG>
für den Snapshot genutzt werden. Alternativ kann auch eine feste Größe angegeben werden:
lvcreate -L 1G -s -n backup-snapshot /dev/<VG>/<LV>
In diesem Beispiel wird ein Snapshot mit einer Größe von einem Gigabyte erzeugt. In beiden Beispielen trägt der Snapshot den Namen backup-snapshot
. Er kann mit folgenden Befehl eingebunden werden:
mkdir -p /mnt/snapshot/<LV>
mount /dev/<VG>/backup-snapshot /mnt/snapshot/<LV>
Der Inhalt von /mnt/snapshot/<LV>
kann dann mit einen beliebigen Backuptool gesichert werden. Nach Abschluss des Backups kann (und sollte) der Snapshot wieder entfernt werden:
umount /mnt/snapshot/<LV>
lvremove -f /dev/<VG>/backup-snapshot
Die Größe des Snapshots sollte so gewählt werden, dass genügend Speicherplatz für alle Daten vorhanden ist, die ggf. während der gesamten Backupdauer beschrieben werden. Läuft der Snapshot über, kann er gemäß der Einstellungen in /etc/lvm/lvm.conf
6 7 automatisch vergrößert werden, bis kein weiterer Speicherplatz in seiner VG verfügbar ist. Ist kein Speicherplatz mehr vorhanden, wird er "gedropped" und kann nicht weiter genutzt werden.