Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.
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 Speicherplatz auf mehreren Festplatten dynamisch zu verwalten. Es wird sozusagen eine zusätzliche logische Schicht zwischen Dateisystem und Partitionen der Festplatten eingezogen.
LVM bietet die Möglichkeit, mehrere Partitionen logisch zusammenzufassen (Volume Group) und in diesem logischen Verbund neue "logische Partitionen" (Logical Volume) anzulegen. Der Volume Group können dynamisch weitere Geräte hinzugefügt werden, wodurch sich der verfügbare Speicherplatz erhöht. Freier Speicherplatz kann ebenfalls dynamisch den Logical Volumes zugewiesen werden. Dadurch erreicht man eine höhere Flexibilität als mit einem klassischen Partitionierungsansatz. Dies ist vor allem interessant für Server, bei denen dynamisch auf das Wachsen der Datenbestände reagiert werden muss.
Volumes können im laufenden Betrieb vergrößert, angelegt und verkleinert werden
Probleme durch falsche Partitionierung können vermieden werden
Höhere Flexibilität
Die Kapazität mehrerer Festplatten kann zu einem Volume zusammengefasst werden
Verschiedene Versionen von Daten sind durch sogenannte "Snapshots" möglich
Die Datensicherung ("backup") wird durch diese "Snapshots" vereinfacht
LVM hat einen hohen Datendurchsatz ("performance") und beeinträchtigt das System nur unwesentlich
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, ähnlich wie bei RAID0
Zugriff auf LVM-Partitionen ist nur mit Linux möglich
Um auf Logical Volumes zugreifen zu können, benötigen sog. Rescue CDs auch LVM Unterstützung
Es ist eine zusätzliche /boot-Partition außerhalb des LVM-Verbundes erforderlich (gilt nicht für GRUB 2)
Vier Begriffe sind beim LVM essentiell und sollen zunächst erklärt werden: Physical Extent, Physical Volume, Volume Group und Logical Volume.
Das sog. Physical Extent (PE) ist die kleinste mögliche Speichergröße in einem LVM. Das PE ist vergleichbar mit den Sektoren von normalen Festplatten bzw. Partitionen. Es ist nicht möglich, die Größe der PEs nachträglich zu verändern. Dies ist aber auch nicht nötig, da die Anzahl der PEs seit LVM2 unbegrenzt ist, die Standardgröße beträgt 4 MByte.
Ein Physical Volume (PV) ist der eigentliche Datenspeicher eines LVMs. Ein PV kann eine Partition oder ein ganzes Laufwerk sein. Es ist auch möglich, sogenannte "Loop-Dateien" zu verwenden.
Eine Volume Group (VG) ist eine Art Container für mindestens ein PV.
Ein Logical Volume (LV oder auch Volume) ist im LVM Kontext für den Anwender eine Art Partition innerhalb einer Volume Group. Es ist nicht möglich Logical Volumes außerhalb einer VG zu erstellen. Das LV kann wie eine normale Partition verwendet werden, d.h. es können Dateisysteme darauf angelegt werden und es kann gemounted werden.
Im LVM können alle Elemente (PV, VG, LV), außer der PE, 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.
Normale Partitionierungsprogramme wie z.B. GParted oder Partition Magic können mit LVM Partitionen nichts anfangen, mit diesen Programmen ist also ein Vergrößern oder Verkleinern der LVM-Partition nicht möglich.
Zusammengefasst lässt sich also sagen, dass zum Aufbau eines minimalen LVMs mindestens ein Physical Volume erforderlich ist, aus dem eine Volume Group erstellt wird. In dieser Volume Group können jetzt die einzelnen Logical Volumes angelegt werden. Es ist jedoch nicht erforderlich und sinnvoll, mit diesen Logical Volumes den gesamten Platz einer Volume Group auszunutzen, da man so leichter auf spätere Veränderungen reagieren kann. Als Faustregel kann man den aktuellen bzw. geplanten Platzbedarf + 25% nehmen.
Um LVM unter Ubuntu verwenden zu können, müssen folgende Pakete installiert sein [1]:
lvm2
mit apturl
Paketliste zum Kopieren:
sudo apt-get install lvm2
sudo aptitude install lvm2
Neben der Möglichkeit, ein LVM im Terminal einzurichten, gibt es auch grafische Lösungen für KDE und GNOME.
Für GNOME ist das "Verwaltung für logische Medien", das durch folgendes Paket installiert werden kann [1]:
system-config-lvm (universe)
mit apturl
Paketliste zum Kopieren:
sudo apt-get install system-config-lvm
sudo aptitude install system-config-lvm
Für das Programm gibt es eine Dokumentation .
Für KDE ist das "KVPM - KDE-Manager für Laufwerkspartitionen", das durch folgendes Paket installiert werden kann [1]:
kvpm (universe)
mit apturl
Paketliste zum Kopieren:
sudo apt-get install kvpm
sudo aptitude install kvpm
Im folgenden wird die Einrichtung eines LVM im Terminal erläutert. Um ein LVM einzurichten, muss zuerst jede zu verwendende Partition mittels pvcreate als Physical Volume initialisiert werden. Alle Physical Volumes müssen nun mittels vgcreate zu einer Volume Group zusammengefasst werden. In dieser Gruppe können nun mittels lvcreate die Logical Volumes erzeugt werden. Folgende Befehle zeigen das Vorgehen zum Einrichten eines LVM:
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>
Für jedes Logical Volume wird eine Datei der Art /dev/<group>/<vol> angelegt. Das Logical Volume kann verwendet werden wie jedes andere Block-Device. So kann ein Dateisystem darauf erzeugt werden, und das Dateisystem kann eingebunden werden.
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.
Um Informationen über vorhandene Physical Volumes abzufragen, gibt es den Befehl pvs
:
sudo pvs
Die Ausgabe sieht dann ungefähr so aus:
PV VG Fmt Attr PSize PFree /dev/sda2 main lvm2 a- 465,57G 311,57G
Für jedes Physical Volume gibt es eine Zeile. Wenn das Physical Volume einer Volume Group zugeordnet ist, wird diese unter VG angezeigt. Die aktuelle Größe eines Physical Volumes steht unter PSize, der freie Platz innerhalb des Physical Volumes steht unter PFree.
Alternativ gibt es auch den Befehl pvdisplay
:
sudo pvdisplay
Dieser liefert Informationen in folgendem Format:
--- Physical volume --- PV Name /dev/sda6 VG Name osvg PV Size 68.27 GiB / not usable 1.00 MiB Allocatable yes PE Size 4.00 MiB Total PE 17477 Free PE 5821 Allocated PE 11656 PV UUID qb8pns-Zj94-JFWl-HpQ6-BRBQ-V2RO-WPCeD9
sudo vgs
Das sieht aus wie z.B.:
VG #PV #LV #SN Attr VSize VFree main 1 6 0 wz--n- 465,57G 311,57G
Für jede Volume Group gibt es eine Zeile. Unter #PV steht die Anzahl der Physical Volumes, unter #LV die Anzahl der Logcial Volumes und unter dem Feld #SN die Anzahl der "Snapshots", die es in dieser Volume Group gibt. VSize bezeichnet die gesamte Größe der VG, wohingegen VFree für den noch nicht zugeordneten Platz in der VG steht.
Die Alternative vgdisplay
:
sudo vgdisplay
listet die Volume-Group auf, z.B.:
--- Volume group --- VG Name osvg System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 7 VG Access read/write VG Status resizable MAX LV 0 Cur LV 3 Open LV 3 Max PV 0 Cur PV 1 Act PV 1 VG Size 68.27 GiB PE Size 4.00 MiB Total PE 17477 Alloc PE / Size 11656 / 45.53 GiB Free PE / Size 5821 / 22.74 GiB VG UUID GY8Uou-MFzC-JkWf-ZP1g-JATj-9NUd-mlHcqK
sudo lvs
Die Ausgabe sieht z.B. so aus:
LV VG Attr LSize Origin Snap% Move Log Copy% home main -wi-ao 70,00G music main -wi-ao 20,00G root main -wi-ao 20,00G swap main -wi-ao 2,00G tmp main -wi-ao 2,00G virtualbox main -wi-ao 40,00G
Für jedes Logical Volume (LV) gibt es eine Zeile, unter LV selbst steht der Name des Volumes, VG steht für die Volume Group und LSize für die Größe des Volumes.
Auch hier gibt es die Alternative lvdisplay
:
sudo lvdisplay
Die Ausgabe sieht in etwa so aus:
--- Logical volume --- LV Name /dev/osvg/lvroot VG Name osvg LV UUID F9hXgF-gj8B-Rdgh-efVD-p1Er-SkKN-qWx18U LV Write Access read/write LV Status available # open 1 LV Size 18.62 GiB Current LE 4768 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:1
sudo pvcreate /dev/<Partition>
Dies erstellt ein Physical Volume auf der Partition /dev/<Partition>
. Diese kann dann einer Volume Group zugewiesen werden.
Dieser Befehl löscht die Daten auf dem angegebenen Gerät ohne Nachfrage!
sudo modprobe dm-mirror # Lädt den "mirror"-Treiber welcher für pvmove notwendig ist 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.
Um ein Physical Volume mit pvmove
zu leeren, muss genügend Platz auf den restlichen Physical Volumes vorhanden sein!
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.
sudo vgextend <group> /dev/<Partition>
Das Physical Volume <Partition>
wird der Volume Group <group>
hinzugefügt.
sudo modprobe dm-mirror sudo pvmove /dev/<Partition> sudo vgreduce <group> /dev/<Partition>
Lädt den Mirror-Treiber, verschiebt alle Daten von dem Physical Volume <Partition>
und entfernt das Volume aus der Volume Group.
Um ein Physical Volume mit pvmove
zu leeren, muss genügend Platz auf den restlichen Physical Volumes vorhanden sein!
sudo vgremove <group>
Hier wird eine Volume Group mit dem Namen <group>
gelöscht.
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>
.
Es muss noch ein Dateisystem auf dem Volume erstellt werden (siehe Partitionierung).
sudo lvextend -L 5G /dev/<group>/<volume>
Vergrößert das Logical Volume <volume>
der Volume Group <group>
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 (relative Vergrößerung des Volumes, ausgehend von der aktuellen Größe).
Das Dateisystem wird von diesem Befehl nicht angepasst, siehe hierzu Dateisystemgröße ändern!
sudo lvreduce -L 5G /dev/<group>/<volume>
Verkleinert das Logical Volume <volume>
der Volume Group <group>
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 verkleinert (relative Verkleinerung des Volumes, ausgehend von der aktuellen Größe).
Das Dateisystem muss vor diesem Befehl schon verkleinert sein, da es sonst zu Datenverlust kommt. Siehe hierzu Dateisystemgröße ändern
sudo lvcreate --size 100M --snapshot --name <name> /dev/<group>/<volume>
Dies legt einen Snapshot <name> an, welcher auf <volume> der Volume Group <group> basiert. Der Snapshot ist so lange gültig, wie sich das Original um nicht mehr als den hinter --size angegebenen Wert verändert (hier 100 MByte). Snapshots sind z.B. nützlich, wenn man einfach mal was ausprobieren will; aber auch zur Datensicherung ("backup") können Snapshots sehr nützlich sein, denn ein Snapshot verändert sich nicht mehr!
sudo lvremove /dev/<group>/<volume>
Hier wird ein Logical Volume mit dem Namen <volume>
in der Gruppe <group>
gelöscht.
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
Mit
vgchange -a n
können die Logical Volumes wieder deaktiviert werden. Dies geschieht bei Ubuntu automatisch während des Herunterfahrens des Rechners.
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
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