Inhaltsverzeichnis
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:
- Physical Volumes (PV)
- Volume Groups (VG)
- Logical Volumes (LV)
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
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
klingt nach RedHat 7.2? installier das mkinitrd von 7.3 und lass es nochmal laufen. die version aus der 7.2 hat keine LVM-Unterstützung. -- RonnyBuchmann 2002-11-20 16:04:58
nein, es sollte eher nach einer 8.0 klingen! Aber prizipiell kann es schon damit zusammenhängen weil ich einen XFS-Kernel von SGI benutze. (gibts da was besseres - vielleicht nur ein Modul?). Was meintest du mit lass es nochmal laufen? -- JanRoehrich 2002-11-20 16:31:36
das mkinitrd lädt normalerweise das "lvm-mod" modul mit, führ einfach mkinitrd nochmal aus: mkinitrd -fv /boot/initrd-2.4.18-....img 2.4.18-...
ok, das wars! War bloß etwas schwierig, weil ich zunächst die Sourcen des Kernels nicht hatte. Hab dann aber doch ein src.rpm gefunden - glücklicherweise! -- JanRoehrich 2002-11-22 23:30:15
3. Tools
UnixConf - Konfigurations-Frontend mit LVM&Raid-Support^
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
je nach Dateisystem (1)