staging.inyokaproject.org

Logical Volume Manager

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

Artikel für fortgeschrittene Anwender

Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.

LVM steht für Logical Volume Manager und ist ein Verfahren, um Partitionen — auch über mehrere Festplatten hinweg — dynamisch zu verwalten. Es wird eine zusätzliche logische Schicht zwischen Partitionstabelle und den Dateisystemen hinzugefügt.

Mittels LVM kann im Gegensatz zur klassischen Partitionierung ein Speicherbereich nachträglich mit wenig Aufwand vergrößert oder verkleinert werden. Daneben bietet es die Möglichkeit, mehrere Partitionen oder Festplatten ("Physical Volumes") zu einer logischen Einheit zusammenzufassen und somit die physikalischen Größenbegrenzungen aufzuheben. Einem solchen Verbund ("Volume Group") können im laufenden Betrieb weitere Geräte hinzugefügt werden, wodurch sich der verfügbare Speicherplatz erhöht. Freier Speicherplatz kann ebenfalls dynamisch den Partitionen des Verbundes ("Logical Volumes") zugewiesen werden. Dadurch erreicht man eine höhere Flexibilität als beim klassischen Partitionierungsansatz. Dies ist vor allem für Server interessant, bei denen dynamisch auf das Wachsen der Datenbestände reagiert werden muss, hilft aber auch beim Verwalten des heimischen Rechners.

Zum Aufbau eines minimalen LVMs ist mindestens ein "Physical Volume" erforderlich, auf welchem eine "Volume Group" erstellt wird. In dieser "Volume Group" werden die einzelnen "Logical Volumes" angelegt. Es ist jedoch nicht erforderlich oder sinnvoll, diesen "Logical Volumes" den gesamten Platz einer "Volume Group" zuzuweisen, um leichter auf spätere Veränderungen reagieren zu können. Als Faustregel kann man den aktuellen bzw. geplanten Platzbedarf +25% nehmen.

Vorteile:

Nachteile:

Hinweis:

Bei einer Volume Group über mehrere Festplatten hinweg gilt: Wegen der erhöhten Gefahr des Datenverlustes beim Ausfall einer Festplatte sollte das LVM in einem RAID-Verbund installiert werden, der Datensicherheit bietet (mindestens RAID-Level 1).

Grundlagen

Die vier oben angesprochenen Begriffe sind beim LVM essentiell und werden hier beschrieben:

Zentrale Begriffe
Begriff Kürzel Beschreibung
Physical Extent PE Das Physical Extent ist die kleinste mögliche Speichergröße eines LVM. Das PE ist vergleichbar mit den Sektoren von normalen Festplatten bzw. Partitionen. Sie kann nachträglich mittels vgchange --physicalextentsize GRÖßE VOLUME geändert werden.
Physical Volume PV Ein Physical Volume ist der physikalische Datenspeicher eines LVMs, also eine Festplatte oder eine Partition auf einer Festplatte. Es ist auch möglich, sogenannte "Loop-Dateien" [1] zu verwenden.
Volume Group VG Eine Volume Group ist der Verbund einer oder mehrerer physikalischer Datenspeicher.
Logical Volume LV Ein Logical Volume entspricht der klassischen Partition, enthält das Dateisystem, ist immer Teil einer Volume Group und kann ein- und ausgehängt werden.
  • 1: Loop Devices sind Dateien, die wie eine Festplatte (ein Blockdevice) angesprochen werden können

Skalierbarkeit

Im LVM können alle Elemente außer der Größenzuweisung des "Physical Extent" im laufenden Betrieb vergrößert und verkleinert werden. Doch die Erweiterbarkeit des LVM allein hilft noch nicht weiter, auch das darin liegende Dateisystem muss verändert werden, um es tatsächlich an die neue Größe anpassen zu können. Nicht jedes Dateisystem beherrscht das Vergrößern oder Verkleinern. Weitere Informationen sind unter Dateisystemgrößen verändern verfügbar.

Installation

Hat man bei der Installation kein LVM aufgesetzt, muss folgendes Paket installiert werden [1]:

  • lvm2

Befehl zum Installieren der Pakete:

sudo apt-get install lvm2 

Oder mit apturl installieren, Link: apt://lvm2

Die nötigen Einstellungen werden von der Installationsroutine vorgenommen, so dass LVM ab sofort nutzbar ist.

Einrichten eines LVM

Da die heutigen grafischen Partitionierungswerkzeuge LVM beherrschen, beschränkt sich dieser Artikel auf die Kommandozeile. Wer grafische Werkzeuge bevorzugt, wird unter Partitionierung (Abschnitt „Grafisch“) fündig.

Kurz-Übersicht:

  • Die zu verwendenden Partitionen / Festplatten müssen zunächst mittels pvcreate als "Physical Volume" initialisiert werden, wenn sie bereits über eine Partitionierung verfügen. Geräte ohne Partitionstabelle können direkt mit vgcreate einer "Volume Group" zugeordnet werden. Diese werden in ihrer Gesamtgröße verwendet.

  • Die "Physical Volumes" werden mittels vgcreate zu einer "Volume Group" zusammengefasst.

  • lvcreate dient dazu, die "Logical Volumes" zu erstellen.

Hinweis:

Es wird empfohlen zunächst eine Partitionstabelle wie gpt zu erstellen (siehe fdisk) und diese dem LVM zuzuordnen, da andere Systeme ggf. ungefragt in den Tabellen-Bereich schreiben und damit das LVM zerstören könnten.

Allgemein:

pvcreate /dev/PARTITION /dev/PARTITION2 # PARTITION und PARTITION2 als Physical Volume initialisieren
vgcreate GROUP /dev/PARTITION /dev/PARTITION2 # Erstellt Volume Group GROUP, bestehend aus /dev/PARTITION und /dev/PARTITION2
lvcreate -L 2G -n VOL GROUP # Erzeugt ein 2 GB großes Logical Volume mit dem Namen VOL in der Volume Group GROUP 

Beispiel

pvcreate /dev/sdb1 /dev/sdb2 /dev/sdc /dev/sdd
vgcreate grp /dev/sdb1 /dev/sdb2 /dev/sdc /dev/sdd
lvcreate -L 3G -n gross grp
lvcreate -L 500MB -n mittel grp
lvcreate -L 100MB -n klein grp
for f in klein mittel gross; do mkfs.ext4 /dev/grp/$f; done 

Im Beispiel werden die vorhandenen Partitionen als LVM initialisiert und zu einer einzelnen Volume Group verbunden. Anschliessend werden drei Logical Volumes erstellt und jeweils mit ext4 formatiert.

Anmerkung: Es wäre sinnvoller die gesamten Laufwerke zu verwenden und nicht dieses Beispiel nachzubauen. Dazu kann mit einem Partitionierungswerkzeug die vorhandene Partitionierung gelöscht und das Gerät als "Linux LVM" angelegt werden. In jedem Fall kann der verbleibende Speicherplatz nach Bedarf den bestehenden LVs zugewiesen oder in weiteren LVs verwendet werden.

Hinweis:

Eine mit pvcreate initialisierte Partition sollte vom Typ 0x8e bzw. "Linux LVM" sein, da es sonst zu Problemen mit der Erkennung der PVs kommt. Wenn das LVM auf einem RAID liegt, ist dies natürlich nicht nötig, genauso als ob das LVM direkt auf eine Festplatte ohne Partitionstabelle aufgesetzt wird.

Dies kann man z.B. via parted mit "set x lvm on" erreichen, wobei x die Partitionsnummer ist.

Verwendung

Für jedes Logical Volume wird jeweils ein symbolischer Link /dev/GROUP/VOL und /dev/mapper/GROUP-VOL angelegt. Diese zeigen auf die durchnummerierten Block Devices /dev/dmX. Das Logical Volume kann verwendet werden wie jedes andere Block-Device. So kann ein Dateisystem darauf erzeugt werden, und das Dateisystem kann eingebunden werden.

Beispiel:

mkfs.ext4 /dev/dm-4              # oder
mkfs.ext4 /dev/grp/klein         # oder
mkfs.ext4 /dev/mapper/grp-klein
mount /dev/grp/klein /mnt 

Administration eines LVM

Informationen abfragen

Es gibt für jede relevante Einheit zwei Methoden, Informationen abzufragen. Die Kurzbefehle sind das Einheitenkürzel mit angehängtem s, also pvs, vgs und lvs; die Detailausgaben erhält man mit dem Kürzel und angehängtem display: pvdisplay, vgdisplay und lvdisplay. Als Beispiel dient hier die Ausgabe des oben genannten Beispiel-LVM:

sudo pvs 
  PV         VG             Fmt  Attr PSize   PFree
  /dev/vda1  ubuntu-mate-vg lvm2 a--  <20,00g  40,00m
  /dev/vdb1  grp            lvm2 a--   <1,07g  64,00m
  /dev/vdb2  grp            lvm2 a--  952,00m 352,00m
  /dev/vdc   grp            lvm2 a--   <2,00g      0
  /dev/vdd   grp            lvm2 a--   <2,00g  <2,00g
sudo vgs 
  VG             #PV #LV #SN Attr   VSize   VFree
  grp              4   3   0 wz--n-  <5,99g  2,40g
  ubuntu-mate-vg   1   3   0 wz--n- <20,00g 40,00m
sudo lvs 
  LV     VG             Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  gross  grp            -wi-a-----   3,00g
  klein  grp            -wi-a----- 100,00m
  mittel grp            -wi-a----- 500,00m
  lfs    ubuntu-mate-vg -wi-a-----   9,00g
  root   ubuntu-mate-vg -wi-ao----  10,00g
  swap_1 ubuntu-mate-vg -wi-ao---- 980,00m

Mit Hilfe der Kurzbefehle kann man sich schnell einen Überblick über ein bestehendes LVM verschaffen und sowohl den freien Speicher auf den physikalischen Geräten, als auch in den Volume Groups erkennen. Die Anzahl "#SN" in der Ausgabe von vgs steht dabei für die Anzahl der Snapshots.

Ausgabe von lvdisplay /dev/grp/klein:

  --- Logical volume ---
  LV Path                /dev/grp/klein
  LV Name                klein
  VG Name                grp
  LV UUID                csr1mA-J2Sl-mN2x-enBH-TQ5W-oSNh-YVoIjB
  LV Write Access        read/write
  LV Creation host, time mate-kvm, 2020-10-01 11:14:01 +0200
  LV Status              available
  # open                 0
  LV Size                100,00 MiB
  Current LE             25
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:5

Die Detailausgaben zeigen deutlich mehr Informationen, daher ist hier nur stellvertretend die Ausgabe eines logischen Speichers dargestellt. Der Aufruf von sudo lvdisplay zeigt diese Struktur für alle bekannten LVs.

Verwaltung von Physical Volumes

Physical Volume initialisieren

sudo pvcreate /dev/PARTITION 

Dies erstellt ein Physical Volume auf der Partition /dev/PARTITION. Diese kann dann einer Volume Group zugewiesen werden. Dieser Schritt kann bei einem folgenden pvcreate ggf. übersprungen werden.

Physical Volume leeren, verschieben oder entfernen

Hinweis:

Um ein Physical Volume mit pvmove zu leeren, muss genügend Platz auf den restlichen Physical Volumes vorhanden sein!

sudo pvmove /dev/PARTITION 

Mit pvmove /dev/PARTITION wird der Inhalt des Physical Volumes auf die restlichen Volumes verschoben. Dies ist nötig, um z.B. das Physical Volume aus einer Volume Group zu entfernen.

sudo pvmove /dev/PARTITION
sudo vgreduce GROUP /dev/PARTITION
sudo pvremove /dev/PARTITION 

Verschiebt alle Daten von dem Physical Volume PARTITION und entfernt das Volume aus der Volume Group und anschliessend aus dem LVM.

Verwaltung von Volume Groups

Volume Groups erstellen

sudo vgcreate GROUP /dev/PARTITION1 /dev/PARTITION2 

Hier wird eine Volume Group mit dem Namen GROUP erstellt. Diese bekommt die Physical Volumes PARTITION1 und PARTITION2 zugewiesen.

Volume Groups vergrößern

sudo vgextend GROUP /dev/PARTITION 

Das Physical Volume PARTITION wird der Volume Group GROUP hinzugefügt.

Volume Groups verkleinern

sudo pvmove /dev/PARTITION
sudo vgreduce GROUP /dev/PARTITION 

Verschiebt alle Daten von dem Physical Volume PARTITION und entfernt das Volume aus der Gruppe GROUP.

Volume Groups löschen

sudo vgremove GROUP 

Hier wird eine Volume Group mit dem Namen GROUP gelöscht.

Verwaltung von Logical Volumes

Logical Volumes erstellen

sudo lvcreate -L 2G -n VOLUME GROUP 

Erstellt ein Logical Volume der Größe 2 Gigabyte mit dem Namen VOLUME in der Volume Group GROUP. Im Anschluss daran kann mit z.B.

sudo mkfs.ext4 /dev/GROUP/VOLUME 

ein Dateisystem auf dem Volume erstellt werden (siehe Formatieren).

Logical Volumes vergrößern

sudo lvextend --resizefs -L 5G /dev/GROUP/VOLUME # Größe von insgesamt 5G festlegen
sudo lvextend -r -L +3G /dev/GROUP/VOLUME        # um 3G vergrößern 

Vergrößert das Logical Volume VOLUME der Volume Group GROUP und das Dateisystem auf 5 Gigabyte. Als Alternative kann auch ein + vor den Wert hinter -L gestellt werden; in diesem Fall wird die Partition dann um diesen Wert vergrößert.

sudo lvextend --resizefs -l +100%FREE /dev/GROUP/VOLUME 

Vergrößert das Logical Volume VOLUME der Volume Group GROUP und das Dateisystem auf die maximal mögliche Größe. Die Volume Group hat im Anschluss keinen freien Speicher mehr!

Logical Volumes verkleinern

Hinweis:

Das Verkleinern von Volumes kann u.U. zu Datenverlust führen! Daher sollte vorher der verfügbare und verwendete Platz geprüft werden!

sudo lvreduce --resizefs -L 5G /dev/GROUP/VOLUME 

Verkleinert das Logical Volume VOLUME der Volume Group GROUP und das Dateisystem auf 5 Gigabyte. Als Alternative kann auch ein - vor den Wert hinter -L gestellt werden, siehe lvextend.

Snapshots

Snapshots sind Logical Volumes, die an ein bestehendes Logical Volume gebunden sind. Wird im Original-LV eine Datei verändert, so wird zunächst die bestehende Version auf den Snapshot kopiert, bevor die Änderungen im LV angewendet werden. Dadurch ist es leicht Änderungen rückgängig zu machen. Möchte man die Änderungen behalten, kann der Snapshot einfach gelöscht werden. Wird die angegebene Größe eines Snapshot erreicht oder überschritten, werden die Änderungen wieder direkt auf das Original-LV angewendet!

sudo lvcreate --size 100M --snapshot --name NAME /dev/GROUP/VOLUME 

Dies legt einen Snapshot NAME an, welcher auf VOLUME der Volume Group GROUP basiert. Finden Schreibvorgänge auf das originale LV VOLUME statt, so werden die betroffenen Blöcke vorher physisch auf das LV NAME kopiert, erst danach werden die Änderungen auf VOLUME durchgeführt. Deshalb ist der Snapshot so lange gültig, wie sich das Original um nicht mehr als den hinter --size angegebenen Wert verändert (hier 100 MB). Daraus resultiert auch, dass die Schreibrate auf VOLUME geringer ist, solange ein Snapshot davon existiert.

Um das LV wieder auf den Stand bei der Erstellung des Snapshots zurückzusetzen, wird mit dem Befehl

sudo lvconvert --merge /dev/GROUP/NAME 

das originale LV und der Snapshot zusammengeführt. Gegebenenfalls erfolgt die Zusammenführung erst beim Neustarten des Computers (z.B. bei root). Nachdem der Vorgang erfolgreich abgeschlossen wurde, wird der Snapshot gelöscht.

Snapshots sind z.B. nützlich, wenn man mit der Möglichkeit, ohne größeren Aufwand zum vorherigen Stand eines Dateisystems zurückkehren zu können, etwas ausprobieren will. Aber auch als Hilfsmittel zur Datensicherung dienen Snapshots, denn nachdem ein Snapshot erstellt wurde, kann ein Backuptool den eingehängten Snapshot in aller Ruhe klonen, ohne dass man sich um während des Sicherungsvorgangs stattfindende Dateiänderungen sorgen muss. Gerade hierfür ist ein read-only Snapshot geeignet, welches man über die Option -p r oder -permission r erstellt, wobei r für "read-only" und rw für "read-write" steht, die Standardeinstellung ist rw. Nach der Datensicherung auf eine externe Festplatte kann das Snapshot wieder verworfen werden.

Logical Volumes löschen

sudo lvremove /dev/GROUP/VOLUME 

Hier wird ein Logical Volume mit dem Namen VOLUME in der Gruppe GROUP gelöscht.

Kernelmodule

Standardmäßig sind bei aktivem LVM die Kernelmodule striped, linear und error aktiv. Weitere Module können mit modprobe NAME geladen werden. Eine Übersicht der aktuell aktiven Kernelmodule im Zusammenhang mit LVM erhält man mit

dmsetup targets 

Weitere Hinweise finden sich unter Kernelmodule[4].

Problembehebung

Logical Volume Management manuell starten und öffnen

Unter Ubuntu werden nach Installation der benötigten Pakete normalerweise alle Logical Volumes beim Systemstart mitgestartet. Dies ist jedoch bei vielen Live- bzw. Rescue-CDs nicht der Fall. Mit den nachfolgenden Befehlen können Logical Volumes manuell gestartet werden.

modprobe dm_mod
pvscan
vgscan
lvscan
vgchange -a y 

Öffnen kann man das Logical Volume jetzt z.B. mit

mount /dev/GROUP/VOLUME/ /mnt 

Mit

vgchange -a n 

können die Logical Volumes wieder deaktiviert werden. Dies geschieht bei Ubuntu automatisch während des Herunterfahrens des Rechners.

LVs anzulegen oder zu vergrößern bricht wegen zu weniger Extents ab

Sollte beim Versuch, Logical Volumes mit lvcreate anzulegen oder mit lvextend zu vergrößern, die Fehlermeldung xxxx extents needed, but only 0 available erscheinen (xxxx = Anzahl), obwohl pvdisplay genügend freie Extents hinter Free PE meldet, kann es an der Option Allocatable NO liegen, welche ebenfalls von pvdisplay angezeigt wird. Um die PV für Änderungen freizuschalten, dient folgender Befehl:

pvchange -x y /dev/PARTITION 

Nach Durchführung der Änderungen wird die PV wieder auf unveränderlich geschaltet:

pvchange -x n /dev/PARTITION 

Die betreffende PARTITION wird mittels pvdisplay hinter PV Name angezeigt.

Verschieben einer PV mit pvmove funktioniert nicht

Sollte beim Verschieben von Daten mit pvmove eine Fehlermeldung kommen, dass ein Kernel-Modul nicht vorhanden sei, so kann dies so behoben werden:

sudo modprobe dm_mirror 

⚓︎

Snapshot lässt sich nicht anlegen

Beim Anlegen eine Snapshots kann es passieren, dass dies wegen eines nicht geladenen Kernel-Moduls nicht möglich ist. Das notwendige Modul kann wie folgt nachgeladen werden:

sudo modprobe dm_snapshot 

intern

extern

  • 1: Loop Devices sind Dateien, die wie eine Festplatte (ein Blockdevice) angesprochen werden können

Diese Revision wurde am 19. Januar 2022 18:47 von noisefloor erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Installation, Partitionierung, System