Logical Volume Manager
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 20.04 Focal Fossa
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.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
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:
Höhere Flexibilität
Volumes können im laufenden Betrieb vergrößert, angelegt und verkleinert werden
Probleme durch falsche Partitionierung können vermieden werden
Die Kapazität mehrerer Festplatten kann zusammengefasst werden
Verschiedene Versionen von Daten sind durch sogenannte "Snapshots" möglich
Die Datensicherung ("Backup") wird durch diese "Snapshots" vereinfacht, die Downtime verringert
LVM hat einen hohen Datendurchsatz ("performance") und beeinträchtigt das System nur unwesentlich
Nachteile:
Liegen die Logical Volumes auf mehreren Festplatten, so wird das Risiko des "Single-Point-of-Failure" größer, da beim Ausfall einer Platte alle Daten verloren sind, vergleichbar mit einem RAID0.
Um auf Logical Volumes zugreifen zu können, benötigen Live-Systeme LVM-Unterstützung, welche teilweise über Kernelmodule manuell nachgeladen werden muss.
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 mitvgcreate
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
Links¶
intern¶
extern¶
Linux optimal partitionieren 🇩🇪 - Pro-Linux, 04/2012
LVM Vortrag von Stefan Betz 🇩🇪 - Ubucon, 10/2014
- 1: Loop Devices sind Dateien, die wie eine Festplatte (ein Blockdevice) angesprochen werden können