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 über mehrere Festplatten dynamisch zu verwalten. Es wird sozusagen eine zusätzliche logische Schicht zwischen Partitionen und Dateisystemen eingefügt.
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 beim klassischen Partitionierungsansatz. Dies ist vor allem für Server interessant, bei denen dynamisch auf das Wachsen der Datenbestände reagiert werden muss.
Vorteile:
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
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, ä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-Verbunds erforderlich (gilt für GRUB, 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.
GParted kann erst ab Version 0.14 und neuer - d.h. auf Ubuntu bezogen ab Ubuntu 14.04 Trusty - mit LVM Partitionen umgehen. Andere Programme wie z.B. Partition Magic können mit LVM Partitionen nichts anfangen, mit diesem Programm 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>
. Im Anschluss daran kann mit z.B.
sudo mkfs.ext4 /dev/<group>/<volume>
ein Dateisystem auf dem Volume erstellt werden (siehe Formatieren).
sudo lvextend --resizefs -L 5G /dev/<group>/<volume>
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 (relative Vergrößerung des Volumes, ausgehend von der aktuellen Größe).
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.
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; in diesem Fall wird die Partition dann um diesen Wert verkleinert (relative Verkleinerung des Volumes, ausgehend von der aktuellen Größe).
Ein Snapshot eines Logical Volumes <volume>
hält die Daten zum Zeitpunkt der Erstellung in einem neuen Logical Volume <name>
fest:
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 etwas ausprobieren will mit der Möglichkeit, ohne größeren Aufwand zum vorherigen Stand eines Dateisystems zurückkehren zu können. 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.
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 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.
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
Howto/LVM nachträglich einrichten - für fortgeschrittene Nutzer: nachträglich einen LVM einrichten
Linux optimal partitionieren - Pro-Linux, 04/2012
LVM Vortrag von Stefan Betz - Ubucon, 10/2014
Diese Revision wurde am 29. Oktober 2016 15:02 von Scarabol erstellt.