23.18Logical Volume Manager (LVM)
Der Logical Volume Manager setzt eine logische Schicht zwischen das Dateisystem und die Partitionen der Festplatte. Das Prinzip, die Vorzüge und die Nomenklatur von LVM wurden bereits in Abschnitt 2.7, »RAID, LVM und Verschlüsselung«, erläutert. Dieser Abschnitt konzentriert sich auf die LVM-Administration.
Manche Distributionen stellen grafische Werkzeuge zur Administration von LVM im laufenden Betrieb zur Verfügung. Bei Fedora und Red Hat hilft Ihnen system-config-lvm bei der Konfiguration, bei SUSE das YaST-Modul System • LVM.
Auch wenn die Programme die LVM-Konfiguration erleichtern, setzen sie doch voraus, dass Sie die LVM-Konzepte verstanden haben. Beachten Sie, dass bei Größenänderungen in der Regel nur die Logical Volumes (LVs) geändert werden, nicht aber die darauf enthaltenen Dateisysteme. Deren Größe müssen Sie bei Verkleinerungen vorher, bei Vergrößerungen nachher selbst verändern.
Linux-intern ist für LVM das Kernelmodul dm_mod zuständig. Bei manchen Distributionen sind die LVM-Funktionen direkt in den Kernel kompiliert und erscheinen daher nicht im lsmod-Ergebnis.
Sofern LVM bereits während der Installation eingerichtet wird, kann sich auch die Systempartition in einem LV befinden. GRUB 2 ist LVM-kompatibel. Nur Wenn Sie noch mit GRUB 0.97 arbeiten (z.B. in CentOS 6 oder RHEL 6), brauchen Sie eine eigene, LVM-freie Boot-Partition.
Sie können LVM und RAID kombinieren. Üblicherweise richten Sie dazu zuerst einen RAID-Verbund ein und nutzen dann das resultierende Device /dev/mdn als Physical Volume (PV).
Ein Sonderfall ist RAID-0. Diese RAID-Variante wird von LVM direkt unterstützt. Um diese Funktion nutzen zu können, müssen Sie auf zwei oder mehr Festplatten jeweils ein PV einrichten. Diese PVs werden zu einer Volume Group (VG) vereint. Nun können Sie mit lvcreate -i n ein LV einrichten, das die Daten auf mehrere PVs und damit auf n PVs verteilt.
Die LVM-Administration erfolgt durch eine ganze Palette von Kommandos. Die Namen der Kommandos beginnen mit pv, vg oder lv, je nachdem, ob sie zur Bearbeitung von Physical Volumes, Volume Groups oder Logical Volumes gedacht sind. Die wichtigsten Vertreter sind in Tabelle 23.8 aufgezählt. Die Kommandos sind Teil des Pakets lvm2, das möglicherweise erst installiert werden muss.
Kommando |
Funktion |
---|---|
lvcreate |
richtet ein neues LV in einer VG ein. |
lvdisplay |
liefert Detailinformationen zu einem LV. |
lvextend |
vergrößert ein LV. |
lvreduce |
verkleinert ein LV. |
lvremove |
löscht ein LV. |
lvrename |
gibt dem LV einen neuen Namen. |
lvscan |
listet alle LVs auf. |
pvcreate |
kennzeichnet eine Partition oder ein Device als PV. |
pvdisplay |
liefert Detailinformationen zu einem PV. |
pvremove |
entfernt die PV-Kennzeichnung eines ungenutzten PVs. |
pvscan |
listet alle PVs auf. |
vgchange |
ändert die Attribute einer VG. |
vgcreate |
erzeugt eine neue VG aus einem oder mehreren PVs. |
vgdisplay |
liefert Detailinformationen zu einer VG. |
vgextend |
vergrößert eine VG um ein PV. |
vgmerge |
vereint zwei VGs. |
vgreduce |
verkleinert eine VG um ein ungenutztes PV. |
vgrename |
gibt einer VG einen neuen Namen. |
vgscan |
listet alle VGs auf. |
Tabelle 23.8LVM-Kommandoübersicht
Anstelle der Einzelkommandos können Sie die gesamte LVM-Administration auch mit dem Kommando lvm ausführen, wobei Sie als ersten Parameter den gewünschten Befehl übergeben. Die Kommandos lvcreate und lvm lvcreate sind also gleichwertig.
Die folgenden Beispiele zeigen die Anwendung einiger LVM-Kommandos. Dabei gehe ich davon aus, dass während der Installation kein LVM eingerichtet wurde. Nun soll die zusätzliche Festplatte /dev/sdc via LVM genutzt werden. Die Partitionierung der Festplatte sieht so aus:
Um LVM zu initialisieren, führen Sie modprobe und vgscan aus. Sobald ein LVM-System eingerichtet ist, wird das LVM-Kernelmodul automatisch während des Rechnerstarts ausgeführt. Die manuelle Initialisierung ist also nur beim ersten Mal erforderlich:
Aus didaktischen Gründen richte ich LVM zuerst auf der Partition /dev/sdc1 ein und erweitere das LVM-System später um /dev/sdc2. Wenn ohnedies klar ist, dass Sie die gesamte Festplatte für LVM nutzen möchten, ist es natürlich einfacher, gleich eine Partition in Maximalgröße mit pvcreate für die LVM-Nutzung zu kennzeichnen:
Nun müssen alle PVs zu einer VG 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:
myvg1 stellt jetzt eine Art Datenpool dar, der aber noch ungenutzt ist. Zur Nutzung müssen Sie innerhalb von myvg1 ein LV einrichten, also eine Art virtueller Partition. Dazu müssen Sie an das Kommando lvcreate drei Informationen übergeben: die gewünschte Größe des LVs, den Namen des neuen LVs und den Namen der existierenden VG:
Durch das Kommando wird gleichzeitig auch die Datei /dev/myvg1/myvol1 erzeugt. Dabei handelt es sich um einen Link auf die Datei /dev/mapper/myvg1-myvol1. Das LV kann jetzt unter einem dieser beiden Device-Namen wie eine gewöhnliche Festplattenpartition verwendet werden.
Um in einem Logical Volume ein Dateisystem einzurichten, verwenden Sie beispielsweise mkfs.ext4 oder mkfs.xfs:
Mit mount können Sie sich davon überzeugen, dass alles geklappt hat:
Ein Grund dafür, LVM überhaupt zu verwenden, besteht darin, ein Dateisystem nachträglich vergrößern zu können, ohne die Festplatte neu partitionieren zu müssen. Im folgenden Beispiel wird das vorhin eingerichtete Dateisystem (/dev/myvg1/myvol1 via /test) von ursprünglich 2 GByte auf 3 GByte vergrößert. df zeigt die Kapazität von /test vor der Änderung:
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. Anschließend wird auch das ext4-Dateisystem entsprechend vergrößert.
df beweist, dass alles funktioniert hat:
Grundsätzlich ist auch eine Verkleinerung möglich. Allerdings müssen Sie dazu das betroffene Dateisystem zuerst aus dem Verzeichnisbaum lösen, mit fsck.ext4 überprüfen und schließlich mit resize2fs verkleinern. Erst jetzt dürfen Sie mit lvreduce das zugrunde liegende LV verkleinern.
Solange im Speicherpool (in der Volume Group) noch Platz ist, können 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 zur Volume Group hinzu.
Die beiden folgenden Kommandos demonstrieren dies für die Partition /dev/sdc2. myvg1 bekommt damit eine Gesamtkapazität von rund 19 GByte, wovon 16 GByte frei sind:
Mit LVM können Sie Snapshots anlegen. Ein Snapshot ist ein unveränderliches Abbild des Dateisystems zu einem bestimmten Zeitpunkt. Der Snapshot kann wie ein eigenes Dateisystem in den Verzeichnisbaum integriert werden. Wenn sich das zugrunde liegende Dateisystem ändert, werden die originalen Daten für den Snapshot archiviert. Sie müssen bereits beim Anlegen des Snapshots angeben, wie viel Speicherplatz LVM für diesen Zweck reservieren soll. Ist dieser Speicherplatz erschöpft, wird der Snapshot ungültig und kann nicht mehr verwendet werden.
LVM-Snaphots bieten wesentlich weniger Funktionen als btrfs-Snapshots. LVM-Snapshots werden in der Regel für Backups verwendet. Sie stellen sicher, dass sich die Dateien während des Backups nicht ändern, das Backup also konsistent ist.
Die folgenden Kommandos zeigen, wie Sie zuerst einen Snapshot des LV myvol1 erstellen, diesen im Verzeichnis /media/backup in den Verzeichnisbaum einbinden, ein Backup davon erstellen, den Snapshot wieder aus dem Verzeichnisbaum lösen und schließlich löschen. Während das Backup läuft, kann das LV myvol1 uneingeschränkt weiterbenutzt werden (z.B. als Speicherplatz für einen Datenbank-Server). Die während des Backups durchgeführten Änderungen dürfen allerdings 100 MByte nicht überschreiten. Während des Backups können Sie mit lvdisplay /dev/vg1/snap ermitteln, wie viel Prozent dieses Speicherplatzes bereits in Verwendung sind.
Beachten Sie, dass Sie den Device-Namen des zugrunde liegenden Logical Volumes in der Form /dev/vgname/lvname angeben müssen, nicht in der Form /dev/mapper/vgname-lvname!