1. Logical Volume Manager

LVM setzt sich quasi als Zwischenschicht zwischen Partitionen und Filesysteme und flexibilisiert dadurch die Speicherplatzverwaltung. Das Prinzip kommt ursprünglich aus dem kommerziellen UNIX, z.B. AIX und HP-UX. Die Bedienung des Linux-LVM ist an HP-UX angelehnt.

Im LVM gibt es drei Arten von "Objekten", mit denen gearbeitet wird:

Siehe auch das http://www.linuxhaven.de/dlhp/HOWTO/DE-LVM-HOWTO-4.html und natürlich LVM-HowTo.

Mittlerweile gibt es die Version 2 von LVM, siehe http://linuxwiki.de/LVM2

1.1. Physical Volume (PV)

Im klassischen LVM (also unter kommerziellen UNIX-Systemen) handelt es sich beim Physical Volume i.d.R. um genau ein Festplattenlaufwerk. Da wir unter Linux noch ein gewisses Maß an Kompatibilität zur Welt von "Windows" wahren müssen, besteht hier ein PV aus einer Partition vom Typ 8e. Dabei kann es sich um eine von mehreren Partitionen, oder auch um die einzige Partition auf einer Festplatte handeln. Man kann aber auch die gesamte Festplatte ohne Partitionen als PV einrichten (das sollt man aber vermeiden, wenn man noch andere Betriebssysteme auf dem Rechner hat).

1.2. Volume Group (VG)

In einer Volume Group werden ein oder mehrere Physical Volumes zu einer großen, virtuellen "Festplatte" zusammengefaßt. Wenn der Speicherplatz der VG erschöpft ist, kann sie um weitere PVs erweitert werden.

1.3. Logical Volume (LV)

http://www.networkcomputing.de/index.php?p=workshop/workshop_04/ws_0304_42.html Wenn die Volume Group eine virtuelle "Festplatte" ist, ist das Logical Volume eine "Partition" auf dieser "Festplatte". Der Unterschied besteht jedoch darin, dass LVs beliebig vergrößert werden können, solange in der VG noch Platz vorhanden ist, verkleinern geht natürlich auch. Ein Logical Volume ist nicht an eine bestimmte Festplatte gebunden, und damit auch nicht an die Größe einer Festplatte. Es kann über mehrere Festplatten verteilt sein.

1.3.1. Physical Extent (PE)

Physical Extents sind die kleinste Einheit in einem PV, ähnlich wie die Blockgröße bei einem Dateisystem. Wenn man eine VG in LVs aufteilt, kann die Größe immer nur ein Vielfaches der PE-Größe sein.

Die Standard-PE-Größe sind 4MiB.

1.4. LVM Partition mit RettungsSystem z.B. Knoppix mounten

Hinweis: Z.Z. (Mai 2005) keine LVM Unterstützung in Knoppix

Rettungs-System booten.

vgscan
vgchange -a y
mount /dev/vg_system/lv_usr /mnt/test

1.5. Diskussion

Frage des Einsteigers: Wenn ein LV beliebig auf mehrere Festplatten verteilt sein kann, woher weiß ich dann, wo meine Daten gespeichert sind?

Antwort: Das mußt Du nicht wissen. Mach Dich frei von der Vorstellung, immer genauestens hinter der Partitionierung Deiner Festplatte Herr sein zu müssen. Das ist der Sinn des LVM. Du weißt bei einer einzelnen Festplatte ja auch nicht, wo genau auf der Oberfläche der Platte die Daten gespeichert sind.

Frage: Wenn aber eine der Platten defekt ist, ist es aber doch bestimmt von Vorteil, wenn man weiß, was wo gespeichert ist. Oder etwa nicht?

Antwort: Man könnte aber auch behaupten, dass, wenn eine der Platten defekt ist, die ganze Volume Group hinüber ist. Um das dadurch erhöhte Ausfallrisiko abzufedern, müssen die Festplatten redundant ausgelegt sein.

Aber...

Antwort: Okay, ich gebe auf. Du hast natürlich recht. Man kann sehr wohl den Überblick behalten, was auf welcher Platte abgelegt ist, und in der Praxis wird es auch so gemacht. Welche Teile des LV auf welchem PV liegen kann man sich mittels lvdisplay -v anzeigen lassen, und mittels pvmove kann man die Daten von einem PV aufs ein anderes verlagern und/oder zusammenfassen. Das kann z.B. interessant sein, wenn ein neues großes PV hinzukommt, auf dem man die Daten eines LV, das über zwei kleinere PVs verteilt ist, zusammenfassen kann.

2. Mini How-To

2.1. Einrichtung

Zuerst mal alle Platten und Partitionen (Typ: 8e) die vom LVM benutzt werden sollen, dem LVM bekannt machen.

pvcreate /dev/hda5 /dev/hdc /dev/sda2

diese nennt man dann Physical Volumes (= PV)

Dann wird eine Volume group (VG) aus diesen PVs erstellt.

vgcreate rootvg /dev/hda5 /dev/hdc /dev/sda2

rootvg ist hier der Name der VG. Später kann man mit vgadd weitere PVs zu dieser VG hinzufügen.

Dann kann man in dieser VG neue Logical Volumes (LV) erstellen (das sind dann die nutzbaren "Laufwerke").

lvcreate -n homelv -L 3G rootvg

Hiermit wird ein LV mit dem Namen homelv und der Größe von 3 GiB erstellt. Dieses LV ist dann über /dev/rootvg/homelv ansprechbar (formatieren, mounten etc.).

2.2. Und nun?

Mit lvextend und lvreduce kann man die Größe der LVs während des Betriebs verändern (ohne booten, unmounten1).

2.2.1. Vergrößern

lvextend -L 4G /dev/rootvg/homelv

oder

lvextend -L +1G /dev/rootvg/homelv

Hiermit wird die Größe von homelv auf 4 GiB geändert. Diese Änderung betrifft vorerst nur das Device, nicht das Dateisystem.

Anschließend muss noch die Größe des Dateisystems angepasst werden. Bei einigen Dateisystemen geht das im laufenden Betrieb:

Dateisystem ReiserFS:

resize_reiserfs /dev/rootvg/homelv

Dateisystem ext3/ext4:

resize2fs /dev/rootvg/homelv

Bei XFS und jfs ist das ebenfalls möglich. Bei XFS gibt es dafür "xfs_grow". Bei JFS kann man "mount -o remount,resize" verwenden.

Bei älteren Kernels musste man da noch einiges von Hand erledigen.


Dazu muss man die Anzahl der Blöcke berechnen, die verwendet werden (sollte mit einem aktuellen Kernel auch automatisch gehen, aber sicher ist sicher...)

Die Anzahl der Blöcke ergibt sich aus der Größe des Device in KiB durch 4 (das ist die einzige Blockgröße, die reiserfs derzeit kennt, kann man sich mit debugreiserfs anzeigen lassen). In unserem Beispiel also:

4 * 1024 * 1024 / 4 = 1048576

mount /home -o remount,resize=1048576

mal vorausgesetzt, dass /dev/rootvg/homelv unter /home gemountet ist.


2.2.2. Verkleinern

Das Verkleinern von LVs (mit Dateisystemen) ist etwas komplizierter, da zuerst das Dateisystem verkleinert werden muss.

ReiserFS kann nur im ungemounteten Zustand verkleinert werden, deshalb also zuerst unmounten:

umount /dev/rootvg/homelv

Bei einer Verkleinerung um 1GiB, muss folgendermaßen vorgegangen werden:

resize_reiserfs -s -1G /dev/rootvg/homelv

/!\ Immer um ein Vielfaches der PE-Größe (siehe vgdisplay) verkleinern, sonst erleidert man Schiffbruch!

Danach am besten nochmal prüfen ob das funktioniert hat:

reiserfsck /dev/rootvg/homelv

Wenn das Ergebis zufriedenstellend ist, kann man das LV AUF 2GB verkleinern:

lvreduce -L 2G /dev/rootvg/homelv

oder verkleinern UM 1GB

lvreduce -L -1G /dev/rootvg/homelv

Toll, nicht?


Frage: Ich habe mit vgcreate eine Volume Gruppe angelegt. Alles funktioniert wunderbar ... bis zum Neustart des Rechners! Nach jedem Neustart sagt vgdisplay, dass die Gruppe NOT active ist. Deshalb kann ich natürlich auch nichts damit anfangen, ohne vgchange auszuführen. Was muss ich tun, damit die Gruppe gleich beim booten aktiviert wird? -- JanRoehrich 2002-11-20 13:54:27

3. Tools

4. Weblinks

Root on LVM on software RAID {en}

The Linux Document Project - LVM HOWTO {en}

ubuntuusers.de - WIKI - LVM {de}

4.1. Fragen + Antworten

Frage: Kann man LVs auch verschlüsseln? Wie am besten?

Antwort: Eine LV verhält sich vom Prinzip her genau so wie eine Partition (also wie jedes andere Blockdevice). Daher kann man sie entweder mit dm-crypt (Device Mapper Crypt, das Programm heißt cryptsetup zumindest unter Debian) oder cryptoloop verschlüsseln. Ich selbst setzte dm-crypt mit aes auf einer LV ein und es funktioniert bisher problemlos. -- HelmutGrohne 2005-11-14 21:34:09

Frage: Wie importiere ich am besten eine komplette LVM-Festplatte (Altes Ubuntu->Neues Ubuntu)? Grafische Tools?

Antwort: "vgscan && vgchange -a y && vgdisplay " danach mounten -- MarcusWolschon 2006-04-10 18:09:09

  1. je nach Dateisystem (1)

LVM (zuletzt geändert am 2010-09-01 15:06:50 durch hippo64)