Bezeichnung

lvm – Linux Logical Volume Manager

Beschreibung

LVM ist ein Logical Volume Manager für Linux. Er erlaubt es, verschiedene physikalische Volumes (Festplatten, Partitionen, …) zu einer sogenannte Volume Group (VG siehe pvcreate(8) und vgcreate(8) ) zusammenzufassen und so einen Storage Pool, eine Art virtuelle Platte zu schaffen. Sowohl IDE, SCSI, als auch Multible Devices (MD, RAID) wird unterstützt. Die Speicherkapazität einer Volume Group kann in Logische Volumes (LVs) aufgeteilt werden, als wären es virtuelle Partitionen. Die Größe eines Logischen Volumes ist ein Vielfaches von sogenannten Physical Extends (PEs siehe lvcreate(8) ). Dabei handelt es sich um Speichereinheiten (chunks, Blöcke), in die die physikalischen Medien aufgeteilt wurden.

Die Größe der Physical Extends kann beim Anlegen der Volume Group angegeben werden. Voreingestellt ist der Wert 4 Megabyte, der fast für alle Anwendungen optimal ist. Wenn ein Logisches Volume zu klein oder zu groß ist, kann seine Größe im laufenden Betrieb geändert werden (siehe lvextend(8) und lvreduce(8) ). lvcreate(8) kann auch Schnappschüsse (Momentaufnahmen) von existierenden Logischen Volumes (in diesem Kontext sogenannte Original Logical Volumes) erstellen.

Durch das Anlegen eines solchen Schnappschusses eines Logical Volumes wird Zugriff auf die Inhalte des Original Logical Volumes ermöglicht, mit dem es verbunden ist und es legt die ReadOnly Inhalte währen der Erstellung des Schnappschusses dar. Das ist nützlich für Backups oder um mehrere Versionen eines Dateisystems online zu halten.

Wenn einer Volume Group der Platz ausgeht ist es möglich, eine oder mehrere mit pvcreate vorbereitete Platten dem System zuzufügen und sie in eine schon existierende Volume Group aufzunehmen (siehe vgextend(8) ). Der Speicherplatz dieser neu aufgenommenen Platten kan dynamisch den Logischen Volumes dieser Volume Group zugewiesen werden. (siehe lvextend(8) ).

Um eine physikalische Platte (Physical Volume-PV) aus dem System zu entfernen, können die Locical Extends dieser Platte auf verschiedene andere Physical Volumes verschoben werden (siehe pvmove(8) ). Danach kann die Platte mit vgreduce(8) aus der Volume Group entfernt werden.

Inaktive Volume Groups müssen mit vgchange(8) aktiviert werden, bevor sie nutzbar sind. vgcreate(8) aktiviert neu angelegte Volume Groups automatisch.

Abkürzungen

PV für Physical Volume (Physikalische Platte)
PE für Physical Extend (Physikalischer Speicherblock)
VG für Volume Group
LV für Logical Volume (Logische Platte)
LE für Logical Extend (Logischer Speicherblock)

Befehlsnamenskonvention

Alle Befehle, die mit Physical Volumes zu tun haben beginnen mit den Buchstaben pv, alle, die sich um den Umgang mit Volume Groups drehen beginnen mit vg und alle, für Logical Volumes beginnen mit lv. Kommandos, die sich grundsätzlich um die Verwaltung des LVM Systems drehen beginnen mit lvm.

VGDA

Die Volume Group Descriptor Area (oder kurz VGDA) beinhaltet die notwendigen Metadaten, um die LVM Funktionalität zu gewährleisten. Sie wird am Anfang jeder mit pvcreate(8) erstellten Platte gespeichert. Es enthält vier Teile: Einen PV-Decriptor, einen VG Descriptor, die LV Descriptors und einige PE Descriptors. LE Descriptoren werden beim Aufruf von vgchange von den PE Descriptoren abgeleitet. Automatische Backups der VGDA werden unter /etc/lvmconf/ abgelegt (siehe auch vgcfgbackup(8)/vgcfgrestore(8) ). Diese Dateien sollten in regelmäßige (Bandlaufwerk) Backups mit aufgenommen werden.

Beschränkungen

Im Augenblick können bis zu 99 Volume Groups mit zusammen 256 Logical Volumes erstellt werden. Die Beschränkung für die Logical Volumes liegt nicht am LVM, sondern an den 8-Bit Minor-Nummern von Linux.

Das bedeutet, Sie könnten 99 Volume Groups anlegen, in denen jeweils 1 bis 3 Logical Volumes existieren oder – auf der anderen Seite 1 Volume Group mit bis zu 256 Logical Volums darin. Natürlich geht auch jeder Wert zwischen diesen beiden Extrembeispielen.

Abhängig von der Größe der Physical Extends die beim Anlegen der Volume Group angegeben wurde können Logical Volumes mit Maximalgrößen von 512 Megabyte bzw. 1 Petabyte angelegt werden. Aktuelle Linux Kernel beschränken diesen Wert auf Intel 32 Bit Systemen auf 2 Terrabyte pro Logical Volume (und auch pro Physical Volume). Das erlaubt es Ihnen bis zu 256 Terrabytes mit allen 128 logischen SCSI Subsystemen zu verwalten. Auf IA32 Systemen können bis zu 65534 Logical Extends pro Logical Volume verwalten, Physical Volumes können bis zu 65534 Physical Extends besitzen.

Unterstützung des /proc Dateisystems

Der operative Status aktiver Volume Groups und ihrer physikalischen und logischen Volumes kann im Verzeichnis /proc/lvm beobachtet werden. /proc/lvm/global enthält eine Zusammenfassung aller verfügbarer Informationen über VGs, LVs und PVs. Die zwei Flags für den PV Status in Klammern bedeuten A/I für aktiv/inaktiv und A/N für zuweisbar (allocatable) oder nicht zuweisbar (non-allocatable). Die vier Flags des LV Status in Klammern bedeuten A/I für aktiv/inaktiv, R/W für ReadOnly/ReadWrite, D/C für nichtzusammenhängend (discontiguous) oder zusammenhängend (contiguous) und L/S für linear oder striped (RAID). Dem S kann optional noch die Anzahl der Stripes der Menge beigefügt sein. Unter /proc/lvm/VGs beginnt eine Unterverzeichnis-Hierarchie, die in einem Verzeichnis namens /proc/lvm/VGs/VolumeGroupName Informationen über jede VG zur Verfügung stellt. VolumeGroupName steht dabei für einen beliebigen VG Namen. Die Datei group in diesem Verzeichnis stellt zusammenfassende Informationen über die VG zur Verfügung. /proc/lvm/VGs/VolumeGroupName/LVs/LogicalVolumeName beinhaltet Informationen über ein beliebiges LV (mit dem Namen LogicalVolumeName) und /proc/lvm/VGs/VolumeGroupName/PVs/PhysicalVolumeName enthält Informationen über ein beliebiges PV mit Namen PhysicalVolumeName.

Beispiele

Wir haben die Plattenpartitionen /dev/sda3, /dev/sdb1 und /dev/hda2 zur Verfügung und wollen eine Volume Group mit Namen „test_vg“ erstellen. Die notwendigen Schritte sind:

  1. Wechseln Sie mit fdisk den Partitionstyp für die drei Partitionen auf 0x8E. (Siehe pvcreate(8): 0x8E identifiziert LVM Partitionen)
  2. pvcreate /dev/sda3 /dev/sdb1 /dev/hda2
  3. vgcreate test_vg /dev/sda3 /dev/sdb1 /dev/hda2

Nachdem wir unsere Volume Group „test_vg“ jetzt erstellt haben, können wir jetzt logische Volumes anlegen. Zum Beispiel ein Logiches Volume der Größe 100 MB und Standard-Namen (/dev/test_vg/lvol1) und ein anderes mit Namen „my_test_lv“, 200 MB groß und über alle drei physikalischen Platten verteilt (striped – RAID). Die notwendigen Schritte sind:

  1. lvcreate -L 100 test_vg
  2. lvcreate -L 200 -n my_test_lv -i 3 test_vg

OK, let’s rock and roll. Zum Beispiel erstellen Sie ein Dateisystem mit

mkfs -t ext2 /dev/test_vg/my_test_lv

und mounten es mit

mount /dev/test_vg/my_test_lv /usr1

.

Autor

Heinz Mauelshagen <Linux-LVM@Sistina.com>