LVM steht für Logical Volume Manager und ist ein Werkzeug zur Verwaltung von Partitionen. Es fügt eine Abstraktionsebene zwischen Festplatten, Partitionen und Dateisystemen hinzu und ermöglicht es außerdem, dass sich Partitionen über mehrere Laufwerke erstrecken können.
Neben den traditionellen Partitionen führt LVM eine neue logische Schicht zwischen der Partitionstabelle und dem Dateisystem ein. Diese neue Schicht ermöglicht einfache nachträgliche Änderungen an den Partitionen.
Die LVM-Architektur
Physische Datenträger
Physische Datenträger in LVM stellen ein physisches Speichermedium dar, das mit dem Rechner verbunden ist. Bevor du Festplatten im LVM verwenden kannst, musst du sie zuerst als physische Volumes im LVM registrieren.
Volume-Gruppen
Eine Volume-Gruppe fasst ein oder mehrere physische Volumes zusammen. Volume Groups sind ein zentraler Bestandteil der LVM-Architektur, da sie die physischen Volumes mit den logischen Volumes verbinden.
Logische Datenträger
Logische Datenträger sind Teil einer Datenträgergruppe und können mit normalen Partitionen verglichen werden. Sie enthalten das Dateisystem und sind über Volume Groups mit den physischen Volumes verbunden.
Aufgrund dieser Architektur ist es möglich, dass ein logisches Volume größer ist als die physischen Festplatten. In Kombination mit der Möglichkeit, physische Volumes nachträglich hinzuzufügen und zu entfernen, lässt sich ein Dateisystem bei Bedarf erweitern, indem einfach weitere Festplatten hinzugefügt und die LVM-Konfiguration aktualisiert wird.
Sicherheitshinweis
Wenn du eine Volume Group hast, die sich über mehrere Laufwerke erstreckt, ist es sehr empfehlenswert, die Laufwerke in einem RAID-Verbund (mindestens RAID-Level 1) zu verbinden. Andernfalls sind bei einem Ausfall eines Laufwerks alle Daten in dieser Volume-Gruppe gefährdet.
Erste Schritte mit LVM
LVM installieren
Falls noch nicht geschehen, beginne zunäsht mit der Installation von LVM:
sudo apt-get install lvm2
Um LVM einzurichten, benötigen wir zunächst eine Übersicht über alle an den Rechner angeschlossenen Laufwerke. Diese kannst du mit lsblk auflisten:
sudo lsblk
Der Output sieht in etwa so aus:
NAME | MAJ:MIN | RM | SIZE | RO | TYPE | MOUNTPOINT |
sda | 8:0 | 0 | 400G | 0 | disk | |
| -sda1 | 8:1 | 0 | 399.9G | 0 | part | / |
| -sda14 | 8:14 | 0 | 3M | 0 | part | |
`-sda15 | 8:15 | 0 | 124M | 0 | part | /boot/efi |
Wie du in der Spalte “ Type “ sehen kannst, haben wir eine Festplatte, die an den Server angeschlossen ist, mit einer Größe von 400 GB und ein paar Partitionen. Die Partition, auf die wir uns konzentrieren wollen, ist die Partition sda1 mit einer Größe von 399,9 GB.
Initialisieren eines physischen Datenträgers
WICHTIG: Bevor du fortfährst, solltest du ein Backup aller wichtigen Daten machen! Änderungen an der Partitionstabelle bringen immer das Risiko eines kompletten Datenverlustes mit sich!
Um Partitionen im LVM verwenden zu können, müssen wir sie zunächst beim LVM „registrieren“, indem wir physische Volumes erstellen. Dies kann mit dem Befehl pvcreate gemacht werden:
pvcreate PARTITION
In unserem Fall ist PARTITION /dev/sda1:
pvcreate /dev/sda1
Mit diesem Befehl wird die Partition sda1 als physisches Volume bei LVM registriert.
Der folgende Befehl kann verwendet werden, um alle derzeit registrierten physischen Volumes anzuzeigen:
sudo pvs
Erstellen einer Volume Group
Als nächstes benötigen wir eine Volume Group. Volume Groups können viele physische Volumes enthalten, aber im Moment haben wir nur eines. Erstellen wir also eine Volume-Gruppe namens „group1“, welches die das physische Volume „/dev/sda1“ enthält:
lgcreate group1 /dev/sda1
Wenn du mehr physische Volumes hast, kannst du sie einfach zu dem Befehl hinzufügen, wie folgt:
lgcreate group1 /dev/sda1 /dev/sdb1 /dev/sdc1
Auch hier können wir den folgenden Befehl verwenden, um alle Volume Groups anzuzeigen:
sudo pvs
Logische Volumes einrichten
Nachdem mindestens eine Volume-Gruppe erstellt wurde, können wir nun mit dem Befehl lvcreate logische Volumes erstellen:
lvcreate -L 40G -n vol1 group1
In dem obigen Befehl gibt „-L“ die Größe (40 GB) und „-n“ den Namen („vol1“) an. Das neue logische Volume wird der Volume-Gruppe „group1“ hinzugefügt.
Tipp: Anstelle von „-L 40G“ kannst du auch „-l 100%FREE“ verwenden, um den gesamten verfügbaren Speicherplatz in der Volume-Gruppe zu nutzen.
Nach der Erstellung können wir mit dem folgenden Befehl einen Blick auf alle logischen Volumes werfen:
sudo lvs
Jetzt kannst du dein logisches Volume in der Liste der Block-Devices finden:
sudo lsblk
Gespeichert ist das ganze hier:
/dev/VOLUME_GROUP/VOLUME_NAME
In unserem Fall wäre der exakte Pfad:
/dev/group1/vol1
Hinzufügen eines Dateisystems
Um Dateien auf diesem neuen logischen Volume zu speichern, müssen wir zunächst ein Dateisystem hinzufügen. Dies können wir tun, indem wir mit dem folgenden Befehl ein neues Dateisystem erstellen:
mkfs.ext4 /dev/group1/vol1
Dadurch wird ein neues ext4-Dateisystem eingerichtet und wir können nun Daten auf dieser Partition speichern.
Erweitern einer bestehenden LVM-Partition
Um eine bestehende Partition zu erweitern, musst du zuerst sicherstellen, dass der Speicherplatz, den du hinzufügen möchtest, in deiner Volume Group verfügbar ist. Wenn du ein bereits angeschlossenes Laufwerk erweitert hast (zum Beispiel wegen einer Speichererweiterung auf einem VPS), folge dieser Anleitung. Wenn du ein neues Speichermedium an den Rechner angeschlossen hast, musst du zuerst ein physisches Volume erstellen:
pvcreate PARTITION
Zum Beispiel:
pvcreate /dev/sdb1
Als nächstes fügst Du das neue physische Volume zu deiner bestehenden Volume-Gruppe hinzu:
vgextend GROUP_NAME PHYSICAL_VOLUME
In diesem Fall:
vgextend group1 /dev/sdb1
Sobald der neue Speicherplatz in der Volume-Gruppe verfügbar ist, können wir die Größe der logischen Volumes erhöhen. Hierfür gibt es mehrere Möglichkeiten:
Entweder:
lvextend -L +10G group1/vol1 # Hinzufügen von 10 G zum Volume "vol1" in der Gruppe "group1"
oder:
lvextend -l 100%FREE group1/vol1 # Erweitern Sie das Volume "vol1" in der Gruppe "group1", um den gesamten verfügbaren Platz in der Volume-Gruppe zu nutzen
Im letzten Schritt muss die Größe des Dateisystems angepasst werden, um den gesamten neu verfügbaren Speicherplatz zu nutzen:
resize2fs /dev/VOLUME_GROUP/VOLUME_NAME
In unserem Fall:
resize2fs /dev/group1/vol1
Hinweis: Abhängig von deinem Dateisystem musst du dein Dateisystem eventuell erst unmounten, bevor du es erweitern kannst. Ext4 kann im gemounteten Zustand erweitert werden, aber überprüfe das nochmal für dein Dateisystem.
Vorhandene LVM-Partition verkleinern
Wenn du deine LVM-Partition verkleinerst, ist es wichtig, dies in der richtigen Reihenfolge zu tun – das Dateisystem muss vor dem logischen Volume verkleinert werden, da du sonst Daten verlierst oder sogar das gesamte Dateisystem zerstören könntest. Ext4 muss während des Verkleinerns unmounted werden. Dies können wir mit diesem Befehl tun:
umount /dev/group1/vol1
Anschließend kann die Größe des Dateisystems geändert werden:
resize2fs /dev/group1/vol1 29G
Hinweis: Wenn Du Deine Partition auf z.B. 30 G verkleinern möchtest, ist es empfehlenswert, das Dateisystem vor dem Verkleinerungsprozess zu verkleinern und dann wieder zu vergrößern, sobald die Partitionen aktualisiert wurden.
Möglicherweise wirst du aufgefordert, dein Dateisystem zuerst zu überprüfen, bevor du es verkleinerst; in diesem Fall führe den angezeigten Befehl aus und dann erneut den Befehl resize.
Nachdem das Dateisystem verkleinert wurde, können wir mit dem Verkleinern des logischen Volumes fortfahren:
lvreduce -L 30G /dev/group1/vol1
Dadurch wird die Größe des logischen Volumes „vol1“ in der Volume-Gruppe „group1“ auf eine Gesamtgröße von 30 GB reduziert.
Als letzten Schritt erweitern wir das Dateisystem erneut, um den gesamten verfügbaren Platz im logischen Volume zu nutzen:
resize2fs /dev/group1/vol1
Auch hier kannst du den Befehl lsblk verwenden, um die Änderungen zu überprüfen.
Entfernen eines physischen Volumes aus einer Volume-Gruppe
Wenn Du ein physisches Volume aus Deiner LVM-Konfiguration entfernen möchtest, musst Du zunächst sicherstellen, dass keine Daten auf dem zu entfernenden physischen Volume gespeichert sind. Nehmen wir an, wir wollen das physische Volume „/dev/sdb1“ entfernen, das Teil der Volume-Gruppe „group1“ ist:
pvmove /dev/sdb1
Hinweis: Dieser Befehl verschiebt alle Daten vom Volume /dev/sdb1 auf andere verfügbare Volumes in der Gruppe. Stelle also sicher, dass genug Speicherplatz auf anderen Volumes verfügbar ist.
Anschließend kann das physische Volume aus der Volume-Gruppe entfernt werden:
vgreduce group1 /dev/sdb1
Nun kannst du den physischen Datenträger zu einer anderen Datenträgergruppe hinzufügen oder ihn vollständig aus LVM entfernen:
pvremove /dev/sdb1