Partitionen verwalten mit dem LVM

Linux: Partitionsverwaltung mit dem Logical Volume Manager

07.07.2005 von Michael Kofler
Der seit Version 2.4 in den Standard-Kernel von Linux integrierte Logical Volume Manager schiebt bei Bedarf eine logische Schicht zwischen das Dateisystem und die Partitionen der Festplatte. Dadurch kann er Partitionen beliebig vergrößern, verkleinern und vereinigen.

Unsere neue Linux-Serie beschreibt die verschiedenen Facetten der Administration des Dateisystems. Mit Ausnahme der ersten beiden Teile richtet sich die Serie explizit an Linux-Profis. Die achtteilige Artikelreihe behandelt dabei folgende Themen:

Die Artikelserie basiert auf dem Kapitel 25 des Standardwerks "Linux - Installation, Konfiguration, Anwendung" von Michael Kofler aus dem Verlag Addison-Wesley. Sie können dieses über 1200 Seiten starke Buch auch in unserem Buchshop versandkostenfrei bestellen oder als PDF-eBook herunterladen.

Serie: Administration des Linux-Dateisystems

Teil 1

Dateisystemtypen

Teil 2

mount und fstab

Teil 3

CD-ROMs, Disketten, externe Massenspeicher

Teil 4

ext3 und reiserfs

Teil 5

Partitionierung der Festplatte

Teil 6

RAID mit Linux

Teil 7

LVM, Logical Volume Manager

Teil 8

DMA mit IDE-Festplatten

Der LVM als logische Schicht

Die Beschreibung als logische Schicht klingt vielleicht abstrakt, die Vorteile in der Praxis sind jedoch sehr real und leicht verständlich:

Grundsätzlich bietet LVM so viele Vorteile, dass sich der Einsatz nicht nur für große Server-Systeme, sondern eigentlich auch für private Linux-PCs empfiehlt. Dennoch müssen zur richtigen Einschätzung des LVM gleich auch ein paar Einschränkungen genannt werden:

Mit anderen Worten: LVM bietet viele interessante Funktionen, ist aber für Linux-Einsteiger nicht optimal geeignet.

LVM-Versionen

Versionen: Es gibt momentan zwei LVM-Versionen: 1 und 2. In Kernel 2.4 ist LVM1 integriert, in Kernel 2.6 LVM2. Auch im aktuellen 2.4-Kernel ist zum Teil schon LVM2 verfügbar. Beispielsweise können Sie unter SUSE 9.0 sowohl LVM1 als auch LVM2 nutzen. Wenn Sie LVM2 nutzen möchten, müssen Sie lediglich darauf achten, dass Sie die LVM2-Tools verwenden (Paket lvm2).

Die internen Änderungen zwischen LVM1 und LVM2 betreffen einerseits ein Kernelmodul (lvm-mod bei LVM1, dm-mod bei LVM2), andererseits das Format der Konfigurationsdateien, die Metadaten über die durch LVM verwalteten Datenmengen enthalten. Für LVM-Anwender hat sich hingegen nur wenig geändert. Zur Konfiguration und Administration werden weiterhin diverse lv-, pv- und vg-Kommandos verwendet.

Laut Dokumentation ist LVM2 abwärtskompatibel zu LVM1, d. h., dass LVM1-Systeme weiter ohne Änderungen genutzt werden können. Für die umgekehrte Richtung gilt das aber nicht! Vorhandene LVM1-Datenmengen (volume groups, siehe das Glossar etwas weiter unten) können mit vgconvert -M2 vgname in das LVM2-Format konvertiert werden. Ich habe allerdings weder die Kompatibilität noch die Konversion von LVM1 nach LVM2 selbst getestet.

Ob Ihre Distribution LVM2 unterstützt, können Sie mit lvm version feststellen. Gegebenenfalls müssen Sie vorher die LVM2-Tools installieren und das Kernelmodul dmmod laden. Dieses Modul stellt den so genannten Device-Mapper zur Verfügung, auf dem LVM2 aufbaut.

root# modprobe dm-mod
root# lvm version
LVM version: 2.00.07 (2003-09-16)
Library version: 1.00.05-ioctl-cvs (2003-09-01)
Driver version: 4.0.1

Konfigurationshilfen: Dieser Abschnitt beschreibt die manuelle Konfiguration von LVM. Manche Distributionen erleichtern diese Arbeit mit eigenen Konfigurations-Tools. Deren Anwendung setzt aber voraus, dass Sie verstehen, was Sie tun. Insofern ist es durchaus eine gute Idee, zuerst einmal ein bisschen mit LVM zu experimentieren.

Red Hat/Fedora: LVM kann bereits während der Installation konfiguriert werden. Danach sind Sie allerdings auf sich selbst gestellt und müssen zur weiteren LVM-Administration die in diesem Abschnitt vorgestellten Kommandos verwenden.

SUSE: Auch hier kann ein LVM-System schon während der Installation eingerichtet werden. Im laufenden Betrieb sind Veränderungen mit dem YaST-Modul SYSTEM|LVM möglich. Beachten Sie, dass bei Größenänderungen nur die logicalvolumes geändert werden, nicht aber die darauf eventuell enthaltenen Dateisysteme. Deren Größe müssen Sie bei Verkleinerungen vor der Verwendung des YaST-Moduls, bei Vergrößerungen nachher selbst verändern.

Dieser Abschnitt gibt eine erste Einführung in die Funktion und Konfiguration von LVM2. Den entsprechenden LVM1-Abschnitt aus der sechsten Auflage dieses Buchs finden Sie auf meiner Website als PDF-Dokument:
http://www.kofler.cc/linux.html
Zahlreiche weitere Informationen finden Sie unter:
http://www.sistina.com/products_lvm.htm
http://tldp.org/HOWTO/LVM-HOWTO/
http://litefaden.com/lite00/lvm/lvm-howto-de.html

Eine interessante Alternative zu LVM ist EVMS (Enterprise Volume Management System), ein von IBM unterstütztes Open-Source-Projekt. EVMS geht über die Funktionen von LVM hinaus und bietet darüber hinaus eine ausgezeichnete Benutzeroberfläche zur Konfiguration und Administration. Zu EVMS gibt es ein LVMPlugin, das eine Kombination von LVM und EVMS ermöglicht. EVMS ist allerdings nicht in den Standardkernel integriert und setzt momentan voraus, dass Sie den Kernel selbst patchen und neu kompilieren. (Möglicherweise werden einzelne Distributionen in Zukunft mit einem EVMS-kompatiblen Kernel ausgeliefert oder EVMS wird in Kernel 2.7.n integriert.).
Weitere Informationen gibt es unter: http://evms.sourceforge.net/

LVM-Glossar

Das, was den Einstieg in die LVM-Welt so schwer macht, ist die Fülle ähnlich lautender Begriffe und Abkürzungen. Um die Konfusion nicht noch zu vergrößern, wird in diesem Abschnitt auf eine Übersetzung der Begriffe bewusst verzichtet. (Alle LVM-Kommandonamen enthalten die Abkürzungen der englischen Begriffe.)

Zwischen der Festplatte und dem Dateisystem stehen drei Ebenen: physical volumes, volume groups und logical volumes:

In der LVM-Dokumentation kommen oft zwei weitere Begriffe vor, die zwar nicht ganz so wichtig sind, aber beim Verständnis der Texte helfen:

Ein einfaches LVM-System einrichten

LVM kann wahlweise ganze Festplatten, einzelne Festplattenpartitionen oder /dev /mdn-Devices (also RAID-Devices) verwalten. Diese Anleitung geht davon aus, dass Sie vorerst nur eine Festplattenpartition für LVM nutzen möchten.

Partitions-ID einstellen: Richten Sie mit fdisk die Partition für LVM ein, und geben Sie als Partitions-ID-Nummer 8e an (fdisk-Kommando „T“ ). Dieses Beispiel geht davon aus, dass die Partition /dev/hdb11, die für LVM verwendet werden soll, bereits existiert.

root# fdisk /dev/hdb
Command (m for help): t
Partition number (1-11): 11
Hex code (type L to list codes): 8e
Changed system type of partition 11 to 8e (Linux LVM)
Command (m for help): p
Disk /dev/hdb: 255 heads, 63 sectors, 2055 cylinders
Units = cylinders of 16065 * 512 bytes
Device Boot Start End Blocks Id System
...
/dev/hdb11 1334 1525 1542208+ 8e Linux LVM

Command (m for help): w
The partition table has been altered!

Konfigurationsdateien: Die einzige LVM-Konfigurationsdatei, die Sie selbst ändern dürfen, hat den Namen /etc/lvm/lvm.conf. Sie enthält diverse Defaulteinstellungen, die nur selten geändert werden müssen.

Alle anderen LVM-Einstellungen werden direkt in den durch LVM verwalteten Datenmengen gespeichert. Diese Einstellungen sind nicht direkt zugänglich. Allerdings enthält /etc/lvm/backup für jede volume group eine Kopie der Einstellungen. Außerdem enthält /etc/lvm/archiv ein Protokoll aller Änderungen, die am LVM-System durchgeführt wurden.

Um es nochmals zu betonen: Mit der Ausnahme von lvm.conf werden die Konfigurationsdateien nicht wie sonst üblich durch einen Editor verändert! Vielmehr führen Sie die unten beschriebenen Kommandos (pvcreate, vgcreate etc.) aus, um das LVM-System einzurichten. Die Konfigurationsdateien (bzw. deren Backups) werden dadurch automatisch erzeugt.

LVM einrichten II

LVM-Initialisierung: Zur Initialisierung führen Sie die beiden folgenden Kommandos aus. Sobald ein LVM-System eingerichtet ist, werden diese Kommandos bei LVM2kompatiblen Distributionen automatisch während des Rechnerstarts ausgeführt. Die manuelle Ausführung ist also nur beim ersten Mal erforderlich:

root# modprobe dm-mod
root# vgscan
vgscan --reading all physical volumes (this may take a while...)
vgscan --no volume groups found

Physical volume einrichten: Bevor LVM die Partition /dev/hdb11 verwalten kann, muss die Partition als physical volume deklariert werden. (Beachten Sie, dass Sie damit alle Daten verlieren, die sich bisher auf dieser Partition befunden haben.)

root# pvcreate /dev/hdb11
pvcreate --physical volume "/dev/hdb11" successfully created

Volume group einrichten: Nun müssen alle physical volumes zu einer volume group zusammengefasst werden. In diesem Beispiel gibt es zwar vorerst nur ein einziges PV, der Schritt ist aber dennoch erforderlich. An das Kommando vgcreate muss auch der gewünschte Name der VG übergeben werden. In diesem Beispiel bekommt die VG den Namen myvg1:

root# vgcreate myvg1 /dev/hdb11
vgcreate --volume group "myvg1" successfully created and activated

Sie können nun einen Blick in die Datei /etc/lvm/backup/myvg1 werfen: Sie enthält eine Menge Informationen über die neu eingerichtete VG.

Logical volume einrichten: myvg1 stellt jetzt eine Art Datenpool dar, der aber noch ungenutzt ist. Zur Nutzung müssen Sie innerhalb von myvg1 ein logical volume einrichten, also eine Art virtuelle Partition. Dazu müssen Sie an das Kommando lvcreate drei Informationen übergeben: die gewünschte Größe des logical volume, den Namen des neuen logical volume und den Namen der existierenden volume group.(lvcreate kennt unzählige weitere Parameter - siehe die man-Seite.)

root# lvcreate -L 100M -n myvol1 myvg1
Logical volume "lvol0" created

Durch das Kommando wird gleichzeitig auch die Datei /dev/myvg1/myvol1 erzeugt. Dabei handelt es sich wiederum um einen Link auf die Datei /dev/mapper/myvg1-myvol1.Das logical volume kann jetzt unter einem dieser beiden Device-Namen wie eine gewöhnliche Festplattenpartition verwendet werden.

LVM einrichten III

Dateisystem im logical volume einrichten: Um in einem logical volume ein Dateisystem einzurichten, verwenden Sie beispielsweise mke2fs (ext2) oder mkreiserfs:

root# mke2fs -j /dev/myvg1/myvol1
...
Writing superblocks and filesystem accounting information: done

Mit mount können Sie sich davon überzeugen, dass alles geklappt hat:

root# mkdir /test
root# mount -t ext3 /dev/myvg1/myvol1 /test

Jetzt können Sie im neuen Dateisystem, das über das Verzeichnis /test angesprochen wird, Dateien speichern.

LVM beenden: LVM wird beim Herunterfahren des Rechners selbstständig beendet. Sie können diese Operation aber auch manuell mit vgchange durchführen:

root# umount /test
root# vgchange -a n
0 logical volume(s) in volume group "myvg1" now active

Wenn Sie LVM wieder verwenden möchten, müssen Sie abermals vgchange ausführen, diesmal mit der Option -a y:

root# vgchange -a y
vgchange --volume group "myvg1" successfully activated

Falls aus irgendeinem Grund die LVM-Konfigurationsdateien nicht mehr zur Verfügung stehen, müssen Sie diese vorher mit vgscan neu erstellen.

Dateisysteme vergrößern und verkleinern

Dateisystem vergrößern: Der Hauptgrund, LVM überhaupt zu verwenden, besteht darin, ein Dateisystem nachträglich vergrößern zu können, ohne die Festplatte anzurühren:

root# df -T /test
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/mapper/myvg1-myvol1
ext3 99150 7998 86032 9% /test

Im folgenden Beispiel wird das im vorigen Abschnitt eingerichtete Dateisystem (/dev /myvg1/myvol1 via /test) von ursprünglich 100 MByte auf 200 MByte vergrößert. Dazu muss zuerst das logical volume vergrößert werden. Zu diesem Zweck müssen Sie den Device-Namen und die neue Größe an lvextend übergeben:

root# lvextend -L 200M /dev/myvg1/myvol1
Extending logical volume myvol1 to 200.00 MB
Logical volume myvol1 successfully resized

Damit ist erst die virtuelle Partition des Dateisystems verändert. Um auch das Dateisystem selbst zu vergrößern, wird es mit umount aus dem Verzeichnisbaum entfernt, mit e2fsck überprüft, mit resize2fs vergrößert und dann wieder eingebunden:

root# umount /test
root# e2fsck -f /dev/myvg1/myvol1
e2fsck 1.34 (25-Jul-2003)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/myvg1/myvol1: 72/25688 files (2.8% non-contiguous),
11248/102400 blocks
root# resize2fs /dev/myvg1/myvol1
resize2fs 1.34 (25-Jul-2003)
Resizing the filesystem on /dev/myvg1/myvol1 to 204800 (1k) blocks.
The filesystem on /dev/myvg1/myvol1 is now 204800 blocks long.
root# mount /dev/myvg1/myvol1 /test

df beweist, dass alles funktioniert hat:

root# df -T /test
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/mapper/myvg1-myvol1
ext3 198562 7998 180324 5% /test

Dateisystem verkleinern

Wenn Sie ein Dateisystem verkleinern möchten, müssen Sie es zuerst mit resize2fs oder resizereiserfs verkleinern. Bei resize2fs müssen Sie dabei die neue Größe in Blöcken angeben. (Wie groß ein Datenblock im Dateisystem ist, können Sie bei ext2 mit tune2fs -l feststellen.) Erst dann dürfen Sie auch das logical volume mit lvreduce verkleinern. Achten Sie darauf, dass Sie die korrekte Größe angeben. (Bei diesem Beispiel ist die Blockgröße des Dateisystems genau 1 KByte, sodass keine Umrechnung erforderlich ist. Das ist aber nicht immer so.)

root# resize2fs /dev/myvg1/myvol1 150000
resize2fs 1.34 (25-Jul-2003)
Resizing the filesystem on /dev/myvg1/myvol1 to 150000 (1k) blocks.
The filesystem on /dev/myvg1/myvol1 is now 150000 blocks long.
root# lvreduce --size 150000k /dev/myvg1/myvol1
Rounding up size to full physical extent 148.00 MB
WARNING: Reducing active logical volume to 148.00 MB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce myvol1? [y/n]: y
Logical volume myvol1 successfully resized

Volume group vergrößern

Solange im Speicherpool (in der volume group) noch Platz ist, können virtuelle Partitionen (also logical volumes) leicht vergrößert werden. Aber was tun Sie, wenn auch die VG voll ist? In diesem Fall legen Sie auf einer beliebigen Festplatte Ihres Rechners eine neue Partition an, richten diese Partition als physical volume ein und fügen sie mit vgextend der volume group hinzu.

Die beiden folgenden Kommandos demonstrieren dies für die 500 MByte große Partition /dev/hdb12. myvg1 bekommt damit eine Gesamtkapazität von beinahe 2 GByte, wovon 568 MByte frei sind:

root# pvcreate /dev/hdb12
root# vgextend myvg1 /dev/hdb12
root# vgdisplay myvg1
...
VG Size 1.96 GB
Alloc PE / Size 359 / 1.4 GB
Free PE / Size 142 / 568 MB

Administration

/etc/fstab: Damit die via LVM verwalteten Dateisysteme automatisch in den Verzeichnisbaum eingebunden werden, müssen sie in /etc/fstab eingetragen werden. Das erfolgt auf dieselbe Weise wie bei gewöhnlichen Linux-Partitionen. Einzig die Device-Namen sehen anders aus.

# /etc/fstab: Linux-Dateisysteme (LVM)
/dev/myvg1/myvol1 /test ext3 defaults 0 1

LVM-Scans: Um den Überblick über die definierten und genutzten volumes und groups zu behalten, gibt es vier Scan-Kommandos:

root# lvscan
ACTIVE '/dev/myvg1/myvol1' [148.00 MB] next free (default)

Wenn Sie genauere Informationen zu einem PV, einer VG oder einem LV benötigen, setzen Sie die Kommandos pvdisplay, vgdisplay bzw. lvdisplay ein:

root# vgdisplay myvg1
--- Volume group ---
VG Name myvg1
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 7
VG Access read/write
VG Status resizable
MAX LV 256
Cur LV 1
Open LV 0
Max PV 256
Cur PV 2
Act PV 2
VG Size 11.18 GB
PE Size 4.00 MB
Total PE 2862
Alloc PE / Size 37 / 148.00 MB
Free PE / Size 2825 / 11.04 GB
VG UUID 6z40g0-4jxx-A5B9-hXtZ-83ck-K3n8-LNL0vU

Weitere LVM-Kommandos: Neben den hier beschriebenen LVM-Kommandos gibt es noch ca. zwei Dutzend weitere. Damit können Sie PVs, VGs und LVs anlegen, verschieben, umbenennen, vereinen, zerlegen, löschen, Backups der internen Strukturen (nicht der eigentlichen Daten!) durchführen, Snapshots für Daten-Backups erstellen etc. Eine genaue Beschreibung finden Sie in den man-Seiten oder auf der LVM-Website.

LVM-Sonderfälle (root, SWAP, RAID etc.)

LVM für die Systempartition (Root-Partition): Häufig wird LVM (wie übrigens auch RAID) nur für die Datenpartitionen verwendet, nicht aber für die Root-Partition. Dafür gibt es mehrere Gründe:

Grundsätzlich ist LVM aber durchaus in der Lage, auch die Systempartition zu verwalten. Die einzige Einschränkung besteht darin, dass der Kernel bereits unmittelbar nach dem Booten auf diese Partition zugreifen muss, also noch bevor das LVM-Kernelmodul vom Dateisystem gelesen werden kann (und das Dateisystem ist ja nur via LVM zugänglich!). Dazu müssen Sie mit GRUB oder LILO eine Initial-RAM-Disk an den Kernel übergeben, die das Device-Mapper-Modul dm-mod enthält.

LVM für Swap-Partitionen: Generell ist es keine gute Idee, LVM für Swap-Partitionen zu verwenden - aber grundsätzlich ist es möglich. Dazu formatieren Sie ein logical volume mit mkswap und aktivieren die neue Swap-Partition mit swapon.

Diese Vorgehensweise hat zwei Nachteile: Erstens ist die Geschwindigkeit möglicherweise nicht optimal. (Bei einer normalen Swap-Partition liegen alle Daten nahe nebeneinander auf der Festplatte. Bei einer LVM-Swap-Partition kann es sein, dass die Daten über unterschiedliche Bereiche der Festplatte verteilt sind, was den Zugriff verlangsamt.) Zweitens treten dieselben Probleme wie bei einer Root-Partition auf: Die Swap-Partition wird während des Systemstarts zu einem frühen Zeitpunkt im Init-V-Prozess aktiviert. Zu diesem Zeitpunkt muss LVM aber bereits laufen.

LVM und RAID

LVM und RAID-0: LVM unterstützt selbst den RAID-Level 0. Um diese Funktion nutzen zu können, müssen Sie auf zwei oder mehr Festplatten jeweils ein physical volume einrichten. Diese PVs werden zu einer volume group vereint. Nun können Sie mit lvcreate ein logical volume einrichten, das die Daten auf mehrere PVs (und damit auf mehrere Festplatten) verteilt.

Das folgende Beispiel erzeugt ein zwei GByte großes logical volume in der volume group myvg1. Die Daten werden über drei physical volumes verteilt (-i 3). Das Kommando kann nur ausgeführt werden, wenn myvg1 aus mindestens drei physical volumes zusammengesetzt ist.

root# lvcreate -L 2G -i 3 myvg1

Mit der Option -I können Sie die Blockgröße für die Verteilung der Daten einstellen. Der Defaultwert beträgt 4 kByte. Damit werden große Dateien also in 4-kByte-Segmenten über die Festplatten verteilt.

lvcreate verwendet für das Striping einfach mehrere physical volumes, ohne dabei zu berücksichtigen, auf welcher Festplatte sich die PVs befinden. Theoretisch können Sie auch drei PVs auf nur einer Festplatte einrichten – lvcreate wird sich darüber nicht beklagen. Statt des erwarteten Geschwindigkeitsgewinns werden Dateioperationen dann aber allerdings wesentlich langsamer!
Wenn Sie RAID-0 sinnvoll nutzen möchten, müssen Sie darauf achten, dass Sie in einer volume group nur physical volumes unterschiedlicher Festplatten zusammenfassen!

LVM und andere RAID-Level: LVM unterstützt von sich aus keine anderen RAID-Level. LVM kann aber auch für RAID-Devices /dev/mdn verwendet werden. Wenn Sie also beispielsweise RAID-5 und LVM kombinieren möchten, dann richten Sie zuerst RAID-5 ein und definieren dann das resultierende /dev/mdn-Device als physical volume.

Eine normale Datenpartition in eine LVM-Partition umwandeln: Der Wunsch nach LVM entsteht meistens dann zum ersten Mal, wenn sich eine Datenpartition als zu klein erweist. Leider ist dann eine Umwandlung in ein LVM-System nicht ohne weiteres möglich. Sie müssen eine neue LVM-Partition erzeugen und Ihre Dateien dann kopieren.

Ausblick

Nachdem wir in diesem Teil die dynamische Verwaltung von Festplatten mit LVM besprochen haben, geht es im letzten Teil der Festplattenserie um die richtige Konfiguration des DMA-Betriebs. Zwar sollte dieser schnelle Übertragungsmodus inzwischen Standard sein, doch mitunter ist Handarbeit angesagt, bis die Daten mit Höchstgeschwindigkeit zur Platte übertragen werden.

Diese Artikelserie basiert auf dem Kapitel 25 des Standardwerks "Linux - Installation, Konfiguration, Anwendung" von Michael Kofler aus dem Verlag Addison-Wesley. Sie können dieses über 1200 Seiten starke Buch auch in unserem Buchshop versandkostenfrei bestellen oder als eBook herunterladen. (ala)

Serie: Administration des Linux-Dateisystems

Teil 1

Dateisystemtypen

Teil 2

mount und fstab

Teil 3

CD-ROMs, Disketten, externe Massenspeicher

Teil 4

ext3 und reiserfs

Teil 5

Partitionierung der Festplatte

Teil 6

RAID mit Linux

Teil 7

LVM, Logical Volume Manager

Teil 8

DMA mit IDE-Festplatten