Benutzer-Werkzeuge

Webseiten-Werkzeuge


it:linux:lvm

Dynamische Dateisysteme mit LVM

!!! Zielgruppe: Experten !!!

Bereits während der Installation eines Linux-Systems muss man sich auf eine feste Partitionierung der Festplatte festlegen.
Stellt man nach einigen Monaten/Jahren fest, dass die gewählten Partitionen falsch dimensioniert sind, kommt man schnell ins Grübeln.
Soll ein Backup angefertigt und das aufwändig eingerichtete Linux-System neuinstalliert werden oder kauft man eine zusätzliche Festplatte?
Wurde bereits bei der Installation der Logical Volume Manager (LVM) eingesetzt, kann man dieser Situation etwas entspannter entgegensehen.
So funktioniert der Logical Volume Manager:
Nachdem eine Festplattenpartition für den LVM vorbereitet wurde, wird eine Volume Gruppe (VG) erzeugt.
Innerhalb dieser Volume Gruppe können ein oder mehrere Logical Volumes (LV) erzeugt werden, die mit dem Dateisystem ReiserFS formatiert werden. Die Logical Volumes können mitsamt Dateisystem im laufenden Betrieb vergrößert werden.
1. Kernel konfigurieren und compilieren

Im Kernel „2.4.18-bf2.4“ (von Debian) ist bereits der Logical Volume Manager (Modul „lvm-mod“) und das Dateisystem ReiserFS (Modul „reiserfs“) enthalten. Möchte man hingegen einen neueren Kernel verwenden (z. B. 2.4.23), so müssen bei der Kernel-Konfiguration die folgenden Parameter aktiviert werden:
Multi-device support (RAID and LVM) —> [*] Multiple devices driver support (RAID and LVM) <M> Logical volume manager (LVM) supportFile systems —> <M> Reiserfs support
Danach muss der Kernel compiliert und installiert werden.
2. Software installieren
Zur Administration müssen mit dem folgenden Kommando zwei Debian-Pakete installiert werden:

apt-get install lvm10 reiserfsprogs
yast -i lvm
yum install lvm 


3. Festplatte partitionieren
Der Logical Volume Manager benötigt eine eigene große Festplattenpartition vom Typ „8e“. Diese muss ggf. noch mit fdisk erzeugt werden (hier: /dev/hda3).

$ fdisk -l /dev/hdaDisk /dev/hda: 255 heads, 63 sectors, 9729 cylindersUnits = cylinders of 16065 * 512 bytes Device Boot Start End Blocks Id System/dev/hda1 1 122 979933+ 82 Linux swap/dev/hda2 * 123 244 979965 83 Linux/dev/hda3 245 9729 76188262+ 8e Linux LVM </code>
4. LVM initialisieren
Mit dem folgenden Kommando werden die Dateien /etc/lvmtab und /etc/lvmtab.d/* erzeugt:

vgscan


5. Partition vorbereiten
Wurde der LVM initialisiert, kann die bei Schritt 3 erzeugte Partition als Physical Volume initialisiert werden:

pvcreate /dev/hda3


6. Volume Gruppe „vg0“ erzeugen
In diesem Beispiel wird auf die Spiegelung der Daten verzichtet und nur eine Partition der Volume Gruppe hinzugefügt.

vgcreate vg0 /dev/hda3 # So wird die Gruppe vg0 in 4MB PE's geteilt
vgcreate -s 32M vg0 /dev/hda3 # So wird die Gruppe vg0 in 32MB PE's geteilt

PE Aufteilung hängt mit performance zusammen.
Bei größeren und kleineren Anzahl von Dateien ist es besser eine Höhere PE einzurichten.
7. Logical Volume erzeugen
Für diese Anleitung habe ich in der Volume Gruppe „vg0“ ein Logical Volume namens „lvopt“ erzeugt. Den Namen des Logical Volumes kann man zwar frei wählen, allerdings sollte er die spätere Verwendung widerspiegeln. Das folgende Kommando erzeugt ein 1000 MByte großes Logical Volume „lvopt“:

lvcreate --size 1000M --name lvopt vg0

Als Ausgabe erscheinen folgende Zeilen:

lvcreate -- doing automatic backup of "vg0"lvcreate -- logical volume "/dev/vg0/lvopt" successfully created


8. Dateisystem auf logischem Volume „lvopt“ anlegen
Nun existiert ein neues Logical Volume, welches mit dem Dateisystem ext3 formatiert wird:

mkfs.ext3 /dev/vg0/lvopt


9. Eintrag in /etc/fstab
Damit das Logical Volume /dev/vg0/lvopt bei jedem Neustart automatisch als /opt eingebunden wird, muss die folgende Zeile an die Datei /etc/fstab gehängt werden:

/dev/vg0/lvopt /opt ext3 defaults 1 2


10. Logical Volume einbinden
Mit dem folgenden Befehl kann das Logical Volume „lvopt“ als „/opt“ eingebunden werden.

mount /opt

Und wie gehts weiter?
Die Schritte 7 bis 10 können für alle weiteren Dateisysteme wiederholt werden. Im Folgenden möchte ich demonstrieren, wie einfach das Dateisystem „/opt“ vergrößert werden kann. Das Vergrößern besteht immer aus zwei Schritten: Zunächst muss das Logical Volume vergrößert werden, anschließend das Dateisystem.
DiskFree aufrufen (vorher)

$ df /optFilesystem 1k-blocks Used Available Use% Mounted on/dev/vg0/lvopt 1023964 32840 991124 4% /opt

Logical Volume vergrößern:
Stellt man fest, dass die Größe von „/opt“ nicht ausreicht und deshalb um 1 GByte vergrößert werden muss, so erweitert man das Logical Volume „lvopt“ mit dem Befehl:

lvextend --size +1G /dev/vg0/lvopt

Ausgabe des Programms:

lvextend – extending logical volume „/dev/vg0/lvopt“ to 1.98 GBlvextend – doing automatic backup of volume group „vg0“ lvextend – logical volume „/dev/vg0/lvopt“ successfully extended
Dateisystem vergrößern:
Wie bereits angedeutet muss nun noch das Dateisystem /dev/vg0/lvopt vergrößert werden:

resize2fs /dev/vg0/lvopt

Je nach OS und Kernel Stand kann die FS Erweiterung online oder offline (gemountet oder umountet) durchgeführt werden.
Bis jetzt wurden die bestene Erfahreungen mit FS Type xfs gemacht.
mit

xfs_growfs /dev/vg0/lvopt

wird xfs FS auch online erweitert.

DiskFree aufrufen (nachher)

$ df /optFilesystem 1k-blocks Used Available Use% Mounted on/dev/vg0/lvopt 2072508 32840 2039668 2% /opt

Hier sieht man sofort die Änderung: Vorher war knapp 1 GByte verfügbar, hinterher etwa 2 GByte.
Weitere Kommandos
Hier möchte ich noch schnell zwei weitere nützliche Kommandos vorstellen.
Mit vgdisplay kann man sich allgemeine Informationen zur Volume Group vg0 anzeigen lassen:

 vgdisplay vg0

Ausgabe des Programms:

--- Volume group ---VG Name vg0VG Access read/writeVG Status available/resizableVG # 0MAX LV 256Cur LV 6Open LV 6MAX LV Size 255.99 GBMax PV 256Cur PV 1Act PV 1VG Size 72.65 GBPE Size 4 MBTotal PE 18599Alloc PE / Size 7626 / 29.79 GBFree PE / Size 10973 / 42.86 GBVG UUID UGJaHg-zJl0-1CK3-KSJK-yI9Q-5XWC-4TIFL2

Die vorletzte Zeile „Free PE / SIZE“ gibt Aufschluss über den verfügbaren Speicherplatz (hier 42,86 GByte).
Das zweite Kommando lvdisplay zeigt einige Informationen zum angegebenen Logical Volume an:

lvdisplay /dev/vg0/lvopt

Ausgabe des Programms:

--- Logical volume ---LV Name /dev/vg0/lvoptVG Name vg0LV Write Access read/writeLV Status availableLV # 6# open 1LV Size 1.98 GBCurrent LE 506Allocated LE 506Allocation next freeRead ahead sectors 1024Block device 58:5

Logical Volume verkleinern:
Zum Schluss möchte ich noch anmerken, dass man zurzeit Logical Volumes vergrößern, aber (noch) nicht sicher verkleinern kann.
Wer es trotzdem ausprobieren möchte, kann wie folgt verfahren:
Zunächst müsste man das Dateisystem unmounten, das Dateisystem verkleinern (Größe A), anschließend das Logical Volume um etwas weniger als A verkleinern (Größe B), dann das Dateisystem an die tatsächliche Größe (B) anpassen und schließlich das Dateisystem wieder einbinden. Achtung: Datenverlust nicht ausgeschlossen !!!

umount /opt
lvreduce --size -950M /dev/vg0/lvopt
resize2fs /dev/vg0/lvopt
mount /opt


Weitere Überblick über LVM Befehle:
Commands und Beschreibungen:

LVM == Logical Volume Manager
PV == Reale Festplatte oder Partition (Physical Volume)
PE == Physical Extend: Belegungseinheit des PV
VG == Volume Group (Pool des gesamten Speicherplatzes)
LV == Logical Volume (virtuelle Partition) innerhalb der VG, z.B. /dev/VGName/LVName
LE == Logical Extend: Belegung des LV
VGDA == Volume Group Descriptor Area. Reservierter Bereich auf dem PV
für die DB mit den PE <==> LE Zuordnungen

Folgende Commands sind unerlässlich für den täglichen Umgang mit LVs:

pvcreate: Anlegen eines PV
vgcreate: Anlegen einer VG
lvcreate: Anlegen eines LV
pvdisplay: Anzeige einer PV, Option -v
vgdisplay: Anzeige einer VG, Option -v
lvdisplay: Anzeige einer LV, Option -v
pvmove: Verschieben der PE von einer PV zu einer anderen innerhalb einer VG
lvextend: eine LV in der Größe ändern (macht beim Filesystem noch keinen Sinn)
vgchange -a y: Aktivieren von VG's
vgchange -a n: Deaktivieren von VG's
vgscan: Suche alle potentiellen Devices nach VG's ab
vgexport: Eine VG aus dem System entfernen (ohne Löschen)
vgimport: Eine exportierte VG im System einbinden

Von LVM benutzte Partitionen mit fdisk anlegen. Der Typ der Partitionen muss 8e sein (0x8e = Linux LVM) Danach vgscan ausführen. Dieser Befehl aktiviert die LVM-Funktionalität im Kernel, das heisst die LVM-DB wird angelegt. vgscan ermittelt alle LVM-PVs und legt das File /etc/lvmtab sowie das Verzeichnis /etc/lvmtab.d an - oder aktualisiert diese, falls sie bereits vorhanden sind.

vgscan

pvcreate legt den VGDA Block auf dem PV an. Falls bereits einmal ein Block angelegt wurde, muss dies geforced werden, indem dem Command das Attribut -f oder -ff mitgegeben wird.

pvcreate /dev/hdb1

Mit vgcreate kann eine Volumegroup, in diesem Beispiel mit dem Namen vg01 aus zwei PVs, angelegt werden.

vgcreate vg01 /dev/hdb1 /dev/hdc1

vgchange ändert die Attribute einer VG. Mit -a y werden alle bekannten VGs auf einem System aktiviert. Dies sollte nach einem vgscan ausgeführt werden. Deaktiviert wird eine VG mit vgchange -a n. Sollte immer vor dem Shutdown durchgeführt werden, damit die Konsistenz der Partition erhalten bleibt.

 vgchange -a [y|n]

lvcreate erstellt im nächsten Beispiel das logische Volume lvol1 in der VG vg01 mit einer Grösse von 1500MB.

lvcreate -L 1500M -n lvol1 vg01

Die LVs können wie statische Partitionen über ihre Device Files angesprochen werden. Mit mke2fs werden ext2- Filesysteme auf dem LV angelegt, für ext3 kann mkfs -t ext3 verwendet werden.

mke2fs /dev/<VG>/<LVName>
mkfs -t ext3 /dev/<VG>/<LVName>

Eine so erstellte Partition müsste danach natürlich auch noch in der /etc/fstab eingetragen werden.
Der Eintrag sähe etwa so aus:

/dev/<VGName>/<LVName> /Mountpoint ext3 defaults 1 2


Daneben gibt es noch die Befehle zum ändern bestehender Volume Groups und Logival Volumes:

vgrename vg01 NeuerVGName

Umbenennen einer VG. Dazu zuerst mit vgchange -a n <VGName> die umzubenennende VG deaktivieren.

vgextend vg01 /dev/hdc1

Fügt der vg01 das Device hdc1 hinzu (Nachdem dieses mit pvcreate /dev/hdc1 erstellt wurde, natürlich)

vgremove vg01

Entfernt die Volumegroup mit dem Namen vg01. Bevor dies getan werden kann, muss die VG mit dem Kommando vgchange -a n vg01 deaktiviert werden.

vgreduce vg01 /dev/hdc5

Entfernt hdc5 aus der VG vg01.
Davor unbedingt mit pvdisplay /dev/hdc1 sicherstellen, dass die physische Disk nicht mehr von logischen Laufwerken belegt wird.

lvextend -L+100M /dev/<VG>/<LVName>

Vergrössert <LVName> um 100MB

lvextend -L2000M /dev/<VG>/<LVName>

Vergrössert <LVName> auf 2000MB
Nach dem ändern der Grösse der Partition muss auch das Filesystem angepasst werden.
Dazu je nach benutztem FS-Typ eine der folgenden Befehlssequenzen verwenden:

umount /dev/vg01/optlv
resize2fs /dev/vg01/optlv
mount /dev/vg01/optlv /opt

Verkleinern lässt sich eine ext3 Partition folgendermassen:

umount /opt
e2fsadm -L-1G /dev/vg01/optlv
mount /opt


Zum Schluss noch zwei kleine Beispiele:
Nummer Eins zeigt den Vorgang, um ein Logical Volume umzubenennen:

lvchange -an /dev/<VG>/<LV>
lvrename /dev/<VG>/<LV> /dev/<VG>/<LVNeuerName>
lvchange -ay /dev/<VG>/<LVNeuerName>

…und Beispiel Zwei zeigt den Vorgang, um eine SWAP-Partition auf einer LV anzulegen:

lvcreate -L512M -n swap vg01
mkswap /dev/vg01/swap
swapon /dev/vg01/swap

~~UP~~

it/linux/lvm.txt · Zuletzt geändert: 2019/05/14 21:16 von 127.0.0.1