Arbeiten mit LVM | INTROSERV
EUR
european

EUR

usa

USD

German De
Ex. VAT Ex. VAT 0%

Arbeiten mit LVM

LVM (Logical Volume Manager) ist ein Festplattenverwaltungssystem, das eine Abstraktionsschicht über dem physischen Speicher bereitstellt. Es ermöglicht eine flexible Zuweisung von Speicherplatz, die Größenänderung im laufenden Betrieb und snapshot-basierte Backups und wird häufig als Speicherschicht für die Virtualisierung eingesetzt. Auf verschlüsselten Systemen wird LVM häufig auf einem mit LUKS verschlüsselten Gerät eingerichtet, sodass durch eine einzige Entsperrung die gesamte Volume Group verfügbar wird.

Dieser Artikel behandelt die Installation von LVM unter Linux, die Erstellung von Physical Volumes, Volume Groups und Logical Volumes, deren Größenänderung, die Arbeit mit Snapshots sowie die Verwendung von Thin Provisioning.

LVM installieren

LVM ist standardmäßig in den meisten Linux-Distributionen enthalten. Falls es fehlt, installieren Sie das Paket lvm2 mit dem Paketmanager des Systems.

Unter Debian und Ubuntu:

sudo apt-get install lvm2

Unter RHEL, CentOS Stream, AlmaLinux und Rocky Linux:

sudo dnf install lvm2

Physical Volume erstellen

Ein Physical Volume (PV) ist der grundlegende Baustein von LVM auf der untersten Ebene. Es kann sich um eine vollständige Festplatte (zum Beispiel /dev/sdb) oder um eine einzelne Partition (zum Beispiel /dev/sdb1) handeln.

Info

Die Verwendung einer vollständigen Festplatte als PV vereinfacht spätere Größenänderungen, da zunächst keine zugrunde liegende Partition vergrößert werden muss. Die Verwendung einer Partition ist vorzuziehen, wenn die Festplatte auch Daten außerhalb von LVM aufnehmen muss oder wenn andere Werkzeuge auf dem System eine Partitionstabelle erwarten.

Erstellen Sie ein Physical Volume mit pvcreate:

sudo pvcreate /dev/sdb

Ersetzen Sie /dev/sdb durch den Pfad zu Ihrem Blockgerät.

Überprüfen Sie das Ergebnis mit pvdisplay:

sudo pvdisplay

Die Ausgabe listet die Physical Volumes auf, die LVM derzeit verwaltet, einschließlich ihrer Größe und Informationen zur jeweiligen Volume Group.

Volume Group erstellen

Eine Volume Group (VG) kombiniert ein oder mehrere Physical Volumes zu einem gemeinsamen Speicherpool. Aus diesem Pool werden Logical Volumes erstellt.

Erstellen Sie eine Volume Group mit dem Namen vg0 aus einem einzelnen Physical Volume:

sudo vgcreate vg0 /dev/sdb

Oder aus mehreren Physical Volumes gleichzeitig:

sudo vgcreate vg0 /dev/sdb /dev/sdc

Überprüfen Sie das Ergebnis mit vgdisplay:

sudo vgdisplay

Logical Volume erstellen

Ein Logical Volume (LV) erscheint im System als normales Blockgerät. Sie können darauf ein Dateisystem erstellen und es einhängen.

Erstellen Sie ein Logical Volume lv0 mit einer Größe von 10 GB innerhalb der Volume Group vg0:

sudo lvcreate -n lv0 -L 10G vg0

Das Flag -n legt den Namen des Logical Volumes fest, während -L seine Größe festlegt.

Überprüfen Sie das Ergebnis mit lvdisplay:

sudo lvdisplay

Erstellen Sie ein Dateisystem auf dem Logical Volume:

sudo mkfs.ext4 /dev/vg0/lv0

Erstellen Sie einen Mount-Punkt und hängen Sie das Dateisystem ein:

sudo mkdir -p /mnt/lv0 sudo mount /dev/vg0/lv0 /mnt/lv0

Das neue Dateisystem ist nun unter /mnt/lv0 verfügbar. Um es beim Systemstart automatisch einzuhängen, fügen Sie einen passenden Eintrag in /etc/fstab hinzu.

Info

LVM stellt jedes Logical Volume über zwei gleichwertige Pfade bereit: /dev/<vg>/<lv> und /dev/mapper/<vg>-<lv>. Im obigen Beispiel sind dies /dev/vg0/lv0 und /dev/mapper/vg0-lv0. Beide Pfade verweisen auf dasselbe Gerät; Werkzeuge und Konfigurationsdateien können einen der beiden Pfade verwenden.

Um die vollständige PV/VG/LV-Hierarchie zusammen mit den normalen Blockgeräten anzuzeigen, führen Sie Folgendes aus:

lsblk

Größe von Volumes ändern

LVM unterstützt die Größenänderung im laufenden Betrieb auf jeder Ebene: Physical Volumes, Volume Groups und Logical Volumes.

pvresize aktualisiert die LVM-Ansicht eines Physical Volumes, nachdem die Größe des zugrunde liegenden Blockgeräts geändert wurde (zum Beispiel nachdem eine virtuelle Festplatte im Hypervisor vergrößert wurde):

sudo pvresize /dev/sdb

vgextend fügt einer vorhandenen Volume Group ein Physical Volume hinzu und vergrößert dadurch die Volume Group:

sudo vgextend vg0 /dev/sdc

vgreduce entfernt ein Physical Volume aus einer Volume Group:

sudo vgreduce vg0 /dev/sdc

lvresize ändert die Größe eines Logical Volumes. Um beispielsweise 5 GB zu lv0 hinzuzufügen:

sudo lvresize -L +5G /dev/vg0/lv0

Oder um das Logical Volume auf den gesamten freien Speicherplatz in der Volume Group zu erweitern:

sudo lvresize -l +100%FREE /dev/vg0/lv0

Info

Beachten Sie den Unterschied zwischen -L (Großbuchstabe) und -l (Kleinbuchstabe). Die Großbuchstaben-Variante erwartet eine Größe mit einem Einheitensuffix wie M, G oder T. Die Kleinbuchstaben-Variante erwartet eine Anzahl von Extents oder einen Prozentsatz.

Das Ändern der Größe eines Logical Volumes ändert nicht automatisch die Größe des darauf befindlichen Dateisystems. Verwenden Sie das passende Werkzeug für das jeweilige Dateisystem. Für ext2, ext3 und ext4:

sudo resize2fs /dev/vg0/lv0

Für XFS führen Sie xfs_growfs für den Mount-Punkt des Dateisystems aus.

Bei unterstützten Dateisystemen, einschließlich ext4 und XFS, ändert lvextend mit dem Flag -r die Größe des Logical Volumes und des Dateisystems in einem einzigen Schritt:

sudo lvextend -r -L +5G /dev/vg0/lv0

Dies ist die gebräuchlichste Methode zur Online-Vergrößerung.

Warning

Das Verkleinern eines Logical Volumes erfolgt in umgekehrter Reihenfolge: Zuerst muss das Dateisystem verkleinert werden und erst danach das Logical Volume. Wird die Reihenfolge umgekehrt, wird das zugrunde liegende Gerät verkürzt, während das Dateisystem weiterhin davon ausgeht, dass es seine ursprüngliche Größe besitzt. Dadurch werden Daten zerstört. Bei ext4 muss dieser Vorgang offline durchgeführt werden. Hängen Sie das Dateisystem aus, führen Sie sudo e2fsck -f /dev/vg0/lv0 aus, verkleinern Sie das Dateisystem mit sudo resize2fs /dev/vg0/lv0 <new_size>, verkleinern Sie das Logical Volume mit sudo lvresize -L <new_size> /dev/vg0/lv0 auf dieselbe Größe und hängen Sie das Dateisystem anschließend wieder ein. XFS unterstützt das Verkleinern überhaupt nicht. Die einzige Möglichkeit, ein XFS-Dateisystem zu verkleinern, besteht darin, es zu sichern, ein kleineres Dateisystem zu erstellen und die Daten wiederherzustellen.

Jeder der oben aufgeführten Befehle unterstützt --help für eine vollständige Liste der Optionen.

LVM-Snapshots

Ein Snapshot erfasst den Zustand eines Logical Volumes zu einem bestimmten Zeitpunkt. Er arbeitet nach dem Copy-on-Write-Prinzip: Wenn sich das ursprüngliche Logical Volume ändert, werden die geänderten Blöcke im reservierten Speicher des Snapshots gespeichert, sodass der Snapshot weiterhin den ursprünglichen Zustand anzeigt.

Snapshots sind nützlich, um konsistente Absturzsicherungen eines laufenden Dateisystems zu erstellen und Änderungen zu testen, die durch das Verwerfen des Snapshots zurückgesetzt werden können. Anwendungskonsistente Backups erfordern zusätzliche Koordination, beispielsweise das Einfrieren des Dateisystems oder das Anhalten der Anwendung in einem konsistenten Zustand, bevor der Snapshot erstellt wird.

Snapshot erstellen

Erstellen Sie einen Snapshot mit lvcreate und dem Flag -s:

sudo lvcreate -L 1G -s -n myvolume_snap /dev/myvg/myvolume

Dadurch wird ein Snapshot mit dem Namen myvolume_snap des Logical Volumes myvolume in der Volume Group myvg erstellt, wobei 1 GB für Änderungen reserviert werden. Wählen Sie die reservierte Größe entsprechend der Datenmenge, die sich während der Lebensdauer des Snapshots voraussichtlich ändern wird: Snapshots weitgehend inaktiver Volumes benötigen wenig Speicherplatz, während stark beschriebene Volumes einen erheblichen Teil der ursprünglichen Größe benötigen können.

Für langlebige Snapshots und Einsatzszenarien mit vielen Snapshots sollten Sie Thin Snapshots innerhalb eines Thin Pools in Betracht ziehen. Diese beziehen ihren Speicher bei Bedarf aus dem gemeinsamen Pool, anstatt im Voraus eine feste Menge zu reservieren, was in der Regel effizienter mit dem Speicherplatz umgeht.

Warning

Wenn sich das ursprüngliche Logical Volume stärker verändert, als der Snapshot aufnehmen kann, wird der Snapshot ungültig und die darin erfassten Daten gehen verloren. Dimensionieren Sie den Snapshot so, dass er die erwartete Änderungsmenge während seiner Lebensdauer aufnehmen kann.

Snapshot verwenden

Ein Snapshot kann wie jedes andere Logical Volume eingehängt werden. Für Backup- und Prüfzwecke sollten Sie ihn schreibgeschützt einhängen, sofern Schreibzugriff nicht tatsächlich erforderlich ist:

sudo mkdir -p /mnt/snapshot sudo mount -o ro /dev/myvg/myvolume_snap /mnt/snapshot

Nach dem Einhängen kann der Snapshot für Backups oder Prüfungen gelesen werden.

Snapshot entfernen

Wenn der Snapshot nicht mehr benötigt wird, entfernen Sie ihn mit lvremove:

sudo lvremove /dev/myvg/myvolume_snap

Durch das Entfernen eines Snapshots wird der von ihm reservierte Speicherplatz freigegeben. Alle Daten, die direkt in den Snapshot und nicht in das ursprüngliche Volume geschrieben wurden, gehen verloren.

Um das ursprüngliche Volume auf den im Snapshot erfassten Zustand zurückzusetzen, verwenden Sie lvconvert --merge anstelle von lvremove:

sudo lvconvert --merge /dev/myvg/myvolume_snap

Nach dem Zusammenführen wird der Snapshot aufgebraucht und automatisch entfernt. Wenn das ursprüngliche Volume derzeit verwendet wird, wird das Zusammenführen bis zur nächsten Aktivierung des Volumes zurückgestellt.

Thin Provisioning

Ein Thin Pool ist eine spezielle Art von Logical Volume, das Speicherplatz bei Bedarf zuweist. Logical Volumes, die daraus erstellt werden (Thin Volumes), können mit einer deklarierten Größe angelegt werden, die den tatsächlich freien Speicherplatz im Pool übersteigt. Nur die tatsächlich geschriebenen Blöcke verbrauchen realen Speicherplatz.

Dies wird häufig in der Virtualisierung eingesetzt, bei der viele virtuelle Festplatten einen gemeinsamen Speicherpool verwenden, aber nur selten alle gleichzeitig ihre angegebene Kapazität erreichen.

Thin Pool erstellen

Erstellen Sie einen Thin Pool mythinpool mit einer Größe von 50 GB in der Volume Group myvg:

sudo lvcreate -L 50G -T -n mythinpool myvg

Das Flag -L legt die Größe des Pools fest, -T weist lvcreate an, einen Thin Pool zu erstellen, und -n legt den Pool-Namen fest. LVM weist dem Pool Speicherplatz aus dem freien Speicher der Volume Group zu; bestimmte Physical Volumes können am Ende des Befehls angegeben werden, wenn der Pool auf bestimmten Geräten platziert werden soll.

Thin Volume erstellen

Erstellen Sie ein Thin Volume mythinvolume mit einer Größe von 10 GB innerhalb von mythinpool:

sudo lvcreate -V 10G -T myvg/mythinpool -n mythinvolume

Das Flag -V legt die virtuelle Größe des Thin Volumes fest, -T verweist auf den Thin Pool und -n legt den Namen des neuen Volumes fest.

Thin Volume verwenden

Ein Thin Volume wird wie jedes andere Logical Volume verwendet. Erstellen Sie darauf ein Dateisystem:

sudo mkfs.ext4 /dev/myvg/mythinvolume

Danach kann das Thin Volume eingehängt und wie ein normales Blockgerät verwendet werden.

Warning

Da Thin Pools überbucht werden können, müssen Sie die tatsächliche Auslastung des Pools überwachen. Sowohl der Datenbereich als auch der Metadatenbereich können unabhängig voneinander vollständig belegt werden, und beide sind kritisch: Wenn einem Thin Pool während des Schreibens in ein Thin Volume entweder der Daten- oder der Metadatenspeicher ausgeht, beginnen Schreibvorgänge für dieses Volume fehlzuschlagen.

Die aktuelle Nutzung von Daten- und Metadatenspeicher aller Logical Volumes, einschließlich Thin Pools, kann mit lvs überprüft werden:

sudo lvs -o +data_percent,metadata_percent

Wenn sich data_percent oder metadata_percent dem Wert 100 nähert, erweitern Sie den Thin Pool mit lvextend, bevor er vollständig gefüllt ist.

Befehlsreferenz

Häufig verwendete LVM-Befehle, nach Ebenen gruppiert.

Physical Volumes:

  • pvcreate initialisiert ein Blockgerät als Physical Volume.
  • pvdisplay zeigt detaillierte Informationen zu Physical Volumes an.
  • pvs zeigt eine kompakte Übersichtstabelle der Physical Volumes.
  • pvresize aktualisiert ein Physical Volume, nachdem das zugrunde liegende Gerät vergrößert wurde.

Volume Groups:

  • vgcreate erstellt eine Volume Group aus einem oder mehreren Physical Volumes.
  • vgextend fügt einer Volume Group ein Physical Volume hinzu.
  • vgreduce entfernt ein Physical Volume aus einer Volume Group.
  • vgdisplay zeigt detaillierte Informationen zu Volume Groups an.
  • vgs zeigt eine kompakte Übersichtstabelle der Volume Groups.

Logical Volumes:

  • lvcreate erstellt ein Logical Volume.
  • lvextend und lvresize ändern die Größe eines Logical Volumes.
  • lvremove entfernt ein Logical Volume.
  • lvconvert --merge führt einen Snapshot wieder mit seinem ursprünglichen Volume zusammen.
  • lvdisplay zeigt detaillierte Informationen zu Logical Volumes an.
  • lvs zeigt eine kompakte Übersichtstabelle der Logical Volumes.

Für die tägliche Verwendung sind die kurzen Übersichtsbefehle pvs, vgs und lvs in der Regel praktischer als die ausführlichen Varianten *display. Jeder Befehl unterstützt --help für eine vollständige Liste der Optionen.

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA