|
LVM ist die Abkürzung für "Logical Volume Manager" und bezeichnet
eine Funktion, die seit der Version 2.4 im Standard-Kernel integriert
ist. Für Windows-Anhänger entspricht dies in etwa den "Dynamischen
Datenträgern" bei Microsoft Windows 2000 oder XP Pro. Mittels LVM
lässt sich eine logische Schicht zwischen Dateisystem und der
Partition einer physikalischen Festplatte schieben. So ist es
möglich, ein Dateisystem über mehrere Partitionen und Festplatten zu
strecken, wohlgemerkt auch nach dem Anlegen eines Dateisystems,
sogar wenn schon Daten darin abgespeichert wurden. Dazu wird
das Dateisystem auf einer virtuellen Partition, einem so genannten
Logical Volume, angelegt. Dies ist auch der eigentliche Clou von LVM:
Man kann einer zu kleinen Partition oder Festplatte, die mit LVM
verwaltet wird, nachträglich freien Speicherplatz hinzufügen.
Voraussetzung ist allerdings, dass die betreffenden Partitionen im
Voraus von LVM verwaltet wurden. LVM kann nicht auf bestehende
Datenpartitionen angewandt werden. Eine zusätzliche und praktische
Eigenschaft von LVM ist dessen Backup-Funktion. Mittels so
genannten Snapshots kann man sehr einfach eine identische Kopie
seiner von LVM verwalteten Partition erstellen. Ein weiterer Vorteil
besteht darin, dass LVM die Geschwindigkeit bei Schreib- und
Lesezugriffen nicht merklich beeinträchtigt, und auch die CPU-Belastung
steigt kaum. Jedoch steigt analog zu RAID 0 die
Ausfallwahrscheinlichkeit, wenn sich das Dateisystem und die darunter
befindliche virtuelle Partition über mehrere Festplatten erstreckt,
da nur eine Festplatte ausfallen muss, um die ganzen
Daten zu verlieren.
|
Der Autor übernimmt keine Garantie auf die hier beschriebenen Verfahren
und übernimmt keine Haftung für eventuelle Hardwareschäden und/oder
Datenverluste oder sonstige Schäden. LVM ist zwar inzwischen sehr
stabil und ausgereift, dennoch sollte man Arbeiten am Dateisystem
nie ohne Backup vornehmen. Sichern Sie bevor Sie fortfahren Ihre Daten
auf einen gesonderten Datenträger, um Datenverluste zu vermeiden.
|
Dieses Dokument ist urheberrechtlich geschützt. Das Copyright für
dieses Dokument liegt bei Markus Hoffmann ( mar.hoff@gmx.net).
Das Dokument darf gemäß der GNU General Public License verbreitet
werden. Insbesondere bedeutet dieses, dass der Text sowohl über
elektronische wie auch physikalische Medien ohne die Zahlung von
Lizenzgebühren verbreitet werden darf, solange dieser Copyright-Hinweis
nicht entfernt wird. Eine kommerzielle Verbreitung ist erlaubt und
ausdrücklich erwünscht. Bei einer Publikation in Papierform ist das
Deutsche Linux HOWTO Projekt hierüber zu informieren.
|
|
Um LVM nutzen zu können müssen Sie feststellen, ob Ihr Kernel diese
Funktion unterstützt, was gewöhnlich ab dem Standard-Kernel 2.4 der
Fall ist. Dazu dient das Modul lvm-mod. Führen Sie als Benutzer root
den Befehl lsmod aus, um zu überprüfen, ob es in der Liste der geladenen
Module schon enthalten ist, gegebenenfalls führen Sie vorher noch
modprobe lvm-mod aus. Zusätzlich dazu können Sie auch überprüfen,
ob das Verzeichnis /proc/lvm existiert, welches nur bei einem aktivem
LVM-System vorhanden ist. Ist das Modul nicht vorhanden, müssen Sie den
Kernel mit der LVM-Funktion neu kompilieren. Sehen Sie auch dazu das
Kapitel über die Neukompilierung eines Kernels von SelfLinux. Zusätzlich
zur Kernel-Funktion ist noch das Programmpaket lvm für die LVM-Kommandos
notwendig, das sich, falls es nicht installiert sein sollte, meistens
auf einer der CDs Ihrer Linux-Distribution befindet.
|
Um die LVM-Funktion des Kernels nutzen zu können, ist es notwendig,
das Modul lvm-mod zu laden. Dies geschieht mit folgendem Befehl.
root@linux ~#
modprobe lvm-mod
|
Die LVM-Kommandos setzen die Datei /etc/lvmtab und das Verzeichnis
/etc/lvmtab.d voraus, die man vorher mit dem Befehl vgscan
erstellen kann. Die beiden Dateien beinhalten Informationen über die
vorhandene LVM-Konfiguration. Mit dem Befehl vgchange werden
eventuelle Volume Groups aktiviert. Bei vielen Distributionen werden die beiden
folgenden Befehle während des Systemstarts ausgeführt und sind damit
nicht unbedingt notwendig. Sehen Sie dazu auch den Abschnitt
"LVM beim Booten und Shutdown".
root@linux ~#
vgscan -v
root@linux ~#
vgchange -a y
|
|
Das LVM-System basiert auf drei Stufen: dem Physical Volume, der
Volume Group und dem Logical Volume. Genauere Beschreibungen dieser und
anderer Begriffe finden sie im Anhang unter "Fachbegriffe" erläutert.
Als erstes müssen Sie eine bestehende Partition mit der Partitions-ID 8e
für LVM kennzeichnen. Dazu führen Sie als Benutzer root cfdisk gefolgt
mit der Angabe der betreffenden Festplatte aus. cfdisk ist eine
komfortablere Variante von fdisk.
root@linux ~#
cfdisk /dev/hdb
|
Danach wählt man mit den Cursortasten vertikal die gewünschte Partition
(zum Beispiel /dev/hdb5) und danach horizontal die Option "Type" um die
Partitions-ID 8e festzulegen. Mit der Option "Write" werden die
Änderungen in der Partitionstabelle eingetragen.
Danach kann man auf dieser Partition ein Physical Volume einrichten.
Die LVM-Kommandos setzen die Dateien /etc/lvmtab und /etc/lvmtab.d
voraus, die man gegebenenfalls mit dem Befehl
erstellen kann. Mit dem Befehl
root@linux ~#
pvcreate /dev/hdb5
|
kann dann das Physical Volume erstellt werden. Theoretisch wäre eine
Volume Group auch mit nur einem Physical Volume möglich, hier erstellen
wir jedoch noch eine zweite, die wir später in der Volume Group
zusammenfügen.
root@linux ~#
pvcreate /dev/hdb6
|
Voraussetzung ist natürlich wieder, dass diese Partition die ID 8e hat.
|
Die Volume Group stellt eine Art Speicherpool dar, aus der man eine oder
mehrere Logical Volumes, also virtuelle Partitionen, erstellen kann.
Zusätzlich zum Kommando vgcreate und den Physical Volumes muss der
gewünschte Name, hier volg1, der Volume Group angegeben werden.
root@linux ~#
vgcreate volg1 /dev/hdb5 /dev/hdb6
|
Danach befindet sich im Verzeichnis /dev das neue Unterverzeichnis volg1
für die betreffende Volume Group.
|
Nun kann man mit der gesamten Volume Group volg1, oder auch nur mit einem
Teil davon ein Logical Volume erstellen. Zum Kommando lvcreate muss man
die gewünschte Größe, den Namen des Logical Volume und die
Volume Group angeben. Hier wird der Name logv1 und die Größe
1000 Megabyte verwendet.
root@linux ~#
lvcreate -n logv1 -L 1000M volg1
|
Damit wird die neue Device-Datei /dev/volg1/logv1 erstellt, über diese
man auf die virtuelle Partition zugreifen kann. Genau nach dem gleichen
Verfahren wie etwa auf die gewöhnliche Partition /dev/hda1.
Um auf dieser Partition auch Daten abspeichern zu können, ist auch
hier ein Dateisystem wie ext2 oder reiserfs erforderlich.
root@linux ~#
mkfs -t ext2 /dev/volg1/logv1
|
Das Dateisystem wird dann über ein Verzeichnis in den Verzeichnisbaum
eingehängt.
root@linux ~#
mkdir /lvm-test
root@linux ~#
mount -t ext2 /dev/volg1/logv1 /lvm-test
|
Nun können Sie im neu erstellten Verzeichnis /lvm-test Daten abspeichern.
Bei Bedarf können sie mit umount die Partition auch wieder aus dem
Verzeichnisbaum aushängen.
root@linux ~#
umount /lvm-test
|
|
|
Wie schon gesagt lässt sich mit LVM eine Partition nachträglich
vergrößern und auch verkleinern. Möchte man das zuvor angelegte
Logical Volume mit der Größe von 1000 Megabyte vergrößern, kann
man dies mit lvextend erledigen. Dazu gibt man einfach die neue
Größe mit der Option -L direkt an. Alternativ könnte man auch mit
-L+300M die neue Größe relativ zur bestehenden Größe angeben.
Aufgrund der Größe von 4 Megabyte der Physical Extents, können
die tatsächlisch erzeugten Größen der Logical Volumes etwas
abweichen, da die erzeugten Logical Volumes damit immer nur ein
Vielfaches von 4 MB groß sein können. Um diese Abweichung zu
umgehen, können Sie beim Anlegen einer Volume Group die Größe
der Physical Extents explizit kleiner angeben. Sehen Sie dazu
auch den Abschnitt "Volume Group mit spezieller PE-Größe".
root@linux ~#
lvextend -L 1300M /dev/volg1/logv1
|
Jetzt wurde erst die virtuelle Partition, also das Logical Volume
vergrößert. Zusätzlich muss man nun auch das darin enthaltene
Dateisystem vergrößern. Zuvor muss es allerdings mit umount aus dem
Verzeichnisbaum entfernt und noch mit e2fsck auf Fehler überprüft
werden.
root@linux ~#
umount /lvm-test
root@linux ~#
e2fsck -f /dev/volg1/logv1
root@linux ~#
resize2fs /dev/volg1/logv1
root@linux ~#
mount -t ext2 /dev/volg1/logv1 /lvm-test
|
Umgekehrt können Sie mit resize2fs das Dateisystem auch verkleinern,
indem Sie die neue Größe in Blöcken (per Default 1024 Byte) angeben. Im
Beispiel wird das Logical Volume auf 500 Megabyte verkleinert. Beachten
Sie unbedingt, dass Sie erst das Dateisystem und danach das Logical Volume
mit lvreduce verkleinern. Würden Sie erst das Logical Volume mit lvreduce
verkleinern, gehen die darin enthaltenen Daten verloren!
root@linux ~#
umount /lvm-test
root@linux ~#
e2fsck -f /dev/volg1/logv1
root@linux ~#
resize2fs /dev/volg1/logv1 512000
root@linux ~#
lvreduce -L-800M /dev/volg1/logv1
root@linux ~#
mount -t ext2 /dev/volg1/logv1 /lvm-test
|
Um komfortabler zu arbeiten, gibt es das Kommando e2fsadm, das alle vorher
beschriebenen Schritte wie lvextend, lvreduce, e2fsck und resize2fs zusammen
ausführt. Wie der Name schon andeutet, funktioniert das Programm nur bei
dem Dateisystem ext2. Falls das Programm nicht in Ihrer Distribution
enthalten ist, können Sie es unter http://e2fsprogs.sourceforge.net/
downloaden. Das folgende Kommando vergrößert zum Beispiel das Logical
Volume auf 800 Megabyte. Zuvor muss es allerdings wieder mit umount
ausgehängt werden.
root@linux ~#
umount /lvm-test
root@linux ~#
e2fsadm -L 800M /dev/volg1/logv1
root@linux ~#
mount -t ext2 /dev/volg1/logv1 /lvm-test
|
Bei der Verkleinerung verfährt man in gleicher Weise.
root@linux ~#
umount /lvm-test
root@linux ~#
e2fsadm -L 500M /dev/volg1/logv1
root@linux ~#
mount -t ext2 /dev/volg1/logv1 /lvm-test
|
|
Da auch der Speicherplatz der Volume Group irgendwann belegt ist und man
damit kein Logical Volume mehr anlegen oder vergrößern kann, ist es möglich,
auch eine Volume Group mit dem Befehl vgextend zu vergrößern. Man muss nur
eine beliebige freie Partition wie in Abschnitt
"Physical Volume einrichten" als Physical Volume einrichten und es der
Volume Group zufügen.
root@linux ~#
pvcreate /dev/hdb7
root@linux ~#
vgextend volg1 /dev/hdb7
|
Mit vgdisplay kann man sich dann die neue Größe ansehen.
root@linux ~#
vgdisplay /dev/volg1
|
Möchte man eine Volume Group verkleinern, kann man mit dem Befehl
root@linux ~#
vgreduce -a volg1
|
alle freien Physical Volumes aus der Volume Group entfernen. Um ein
bestimmtes Physical Volume zu entfernen, muss man den genauen Pfad dessen
angeben. Vorher kann man, falls erwünscht, mit dem Befehl pvdisplay -v
überprüfen, ob das betreffende Physical Volume Daten enthält oder nicht.
root@linux ~#
pvdisplay -v /dev/hdb7
root@linux ~#
vgreduce volg1 /dev/hdb7
|
Voraussetzung ist immer, dass auf dem betreffenden Physical Volume keine
Daten enthalten sind. Mit dem Kommando pvmove kann man vorher gegebenenfalls
die Daten auf ein anderes Physical Volume verschieben. Sehen Sie dazu
auch den Abschnitt "Daten von einem PV zum anderen PV verschieben".
|
|
Um das LVM-System ordungsgemäß zu beenden, müssen Sie alle Logical Volumes
mit umount aus dem Verzeichnisbaum aushängen und danach vgchange ausführen.
root@linux ~#
umount /lvm-test
root@linux ~#
vgchange -a n
|
Am komfortabelsten ist es, die Befehle für das Starten und Beenden des
LVM-Systems innerhalb des Init-V-Prozesses einzubinden, um nicht immer
manuell nach dem Systemstart das LVM-System zu aktivieren. Sehen Sie dazu
auch den Abschnitt "LVM beim Booten und Shutdown".
|
|
|