ubuntuusers.de

Logical Volume Manager

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

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

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 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.

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-Verbundes erforderlich (gilt nicht für GRUB 2)

Hinweis:

Wegen der höheren Fehleranfälligkeit sollte das LVM in einem RAID-Verbund installiert werden, der Datensicherheit bietet (mindestens RAID-Level 1). Weiterhin sollten die Volumes über Backups regelmäßig gesichert werden, um so Datenverlust durch den Ausfall einer Platte vorzubeugen!

Grundlagen

Vier Begriffe sind beim LVM essentiell und sollen zunächst erklärt werden: Physical Extent, Physical Volume, Volume Group und Logical Volume.

Physical Extent

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.

Physical Volume

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.

Volume Group

Eine Volume Group (VG) ist eine Art Container für mindestens ein PV.

Logical Volume

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.

Skalierbarkeit

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.

Hinweis:

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.

Mindestanforderungen

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.

Installation

Um LVM unter Ubuntu verwenden zu können, müssen folgende Pakete installiert sein [1]:

  • lvm2

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install lvm2 

sudo aptitude install lvm2 

Einrichten eines LVM

Neben der Möglichkeit, ein LVM im Terminal einzurichten, gibt es auch grafische Lösungen für KDE und GNOME.

GNOME

Für GNOME ist das "Verwaltung für logische Medien", das durch folgendes Paket installiert werden kann [1]:

  • system-config-lvm (universe)

Wiki/Vorlagen/Installbutton/button.png 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 {en}.

KDE

Für KDE ist das "KVPM - KDE-Manager für Laufwerkspartitionen", das durch folgendes Paket installiert werden kann [1]:

  • kvpm (universe)

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install kvpm 

sudo aptitude install kvpm 

Manuell

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.

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.

Administration eines LVM

Informationen abfragen

Informationen über Physical Volumes abfragen

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

Informationen über Volume Groups abfragen

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

Informationen über Logical Volumes abfragen

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

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.

Achtung!

Dieser Befehl löscht die Daten auf dem angegebenen Gerät ohne Nachfrage!

Physical Volume leeren oder verschieben

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.

Hinweis:

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

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 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.

Hinweis:

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

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>.

Hinweis:

Es muss noch ein Dateisystem auf dem Volume erstellt werden (siehe Partitionierung).

Logical Volumes vergrößern

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).

Hinweis:

Das Dateisystem wird von diesem Befehl nicht angepasst, siehe hierzu Dateisystemgröße ändern!

Logical Volumes verkleinern

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).

Achtung!

Das Dateisystem muss vor diesem Befehl schon verkleinert sein, da es sonst zu Datenverlust kommt. Siehe hierzu Dateisystemgröße ändern

Snapshot eines Logical Volumes anlegen

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.

Der Snapshot kann auch manuell verworfen werden:

sudo lvremove /dev/<group>/<name> 

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.

Logical Volumes löschen

sudo lvremove /dev/<group>/<volume> 

Hier wird ein Logical Volume mit dem Namen <volume> in der Gruppe <group> gelöscht.

Problembehebung

Logical Volume Management manuell starten

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.

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 

Diese Revision wurde am 7. März 2014 19:13 von V for Vortex erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Installation, Partitionierung, System