Einführung
LVM, oder Logical Volume Management, ist eine Technologie zur Verwaltung von Speichergeräten, die dem Benutzer die Möglichkeit gibt, das physische Layout von Speicherkomponenten zusammenzufassen und zu abstrahieren, um eine einfachere und flexible Verwaltung zu ermöglichen. Die aktuelle Iteration, LVM2, nutzt das Device-Mapper-Framework des Linux-Kernels, um vorhandene Speichergeräte in Gruppen zusammenzufassen und logische Einheiten aus dem kombinierten Speicherplatz nach Bedarf zuzuweisen.
Die Hauptvorteile von LVM sind erhöhte Abstraktion, Flexibilität und Kontrolle. Logische Volumes können sinnvolle Namen wie „Datenbanken“ oder „Root-Backup“ haben. Volumes können dynamisch in ihrer Größe verändert werden, wenn sich der Platzbedarf ändert, und sie können zwischen physischen Geräten innerhalb des Pools auf einem laufenden System migriert oder einfach exportiert werden. LVM bietet auch fortgeschrittene Funktionen wie Snapshotting, Striping und Mirroring.
In dieser Anleitung werden wir kurz besprechen, wie LVM funktioniert, und dann die grundlegenden Befehle demonstrieren, die für eine schnelle Inbetriebnahme erforderlich sind.
LVM-Architektur und Terminologie
Bevor wir uns mit den eigentlichen LVM-Verwaltungsbefehlen befassen, ist es wichtig, ein grundlegendes Verständnis dafür zu haben, wie LVM Speichergeräte organisiert und welche Terminologie er verwendet.
LVM-Speicherverwaltungsstrukturen
LVM funktioniert, indem er Abstraktionen über die physischen Speichergeräte legt. Die grundlegenden Schichten, die LVM verwendet, beginnend mit der primitivsten, sind:
- Physikalische Volumes:
- LVM-Dienstprogramm-Präfix:
pv...
- Beschreibung: Physikalische Blockgeräte oder andere plattenähnliche Geräte (z. B. andere Geräte, die von Device Mapper erstellt werden, wie RAID-Arrays) werden von LVM als Rohbaustoff für höhere Abstraktionsebenen verwendet. Physikalische Volumes sind reguläre Speichergeräte. LVM schreibt einen Header in das Gerät, um es für die Verwaltung zuzuordnen.
- LVM-Dienstprogramm-Präfix:
- Volume Groups:
- LVM Utility Präfix:
vg...
- Beschreibung: LVM fasst physische Volumes zu Speicherpools zusammen, die als Volume Groups bezeichnet werden. Volume-Gruppen abstrahieren die Eigenschaften der zugrunde liegenden Geräte und fungieren als einheitliches logisches Gerät mit kombinierter Speicherkapazität der einzelnen physischen Volumes.
- LVM Utility Präfix:
- Logische Volumes:
- LVM Utility-Präfix:
lv...
(generische LVM-Dienstprogramme können mitlvm...
beginnen) - Beschreibung: Eine Volume-Gruppe kann in eine beliebige Anzahl von logischen Volumes aufgeteilt werden. Logische Volumes sind funktional äquivalent zu Partitionen auf einer physischen Festplatte, aber mit viel mehr Flexibilität. Logische Volumes sind die primäre Komponente, mit der Benutzer und Anwendungen interagieren.
- LVM Utility-Präfix:
Zusammenfassend lässt sich sagen, dass LVM verwendet werden kann, um physische Volumes in Volume-Gruppen zusammenzufassen, um den auf einem System verfügbaren Speicherplatz zu vereinheitlichen. Anschließend können Administratoren die Volume-Gruppe in beliebige logische Volumes segmentieren, die als flexible Partitionen fungieren.
Was sind Extents?
Jedes Volume innerhalb einer Volume-Gruppe wird in kleine Teile fester Größe, sogenannte Extents, segmentiert. Die Größe der Extents wird durch die Volume-Gruppe bestimmt (alle Volumes innerhalb der Gruppe entsprechen der gleichen Extent-Größe).
Die Extents auf einem physischen Volume werden physische Extents genannt, während die Extents eines logischen Volumes logische Extents genannt werden. Ein logisches Volume ist einfach eine Abbildung, die LVM zwischen logischen und physischen Extents unterhält. Aufgrund dieser Beziehung stellt die Extent-Größe die kleinste Menge an Speicherplatz dar, die von LVM zugewiesen werden kann.
Extents stecken hinter einem Großteil der Flexibilität und Leistungsfähigkeit von LVM. Die logischen Extents, die von LVM als einheitliches Gerät dargestellt werden, müssen nicht auf kontinuierliche physische Extents abgebildet werden. LVM kann die physischen Extents, aus denen ein logisches Volume besteht, ohne Unterbrechung für die Benutzer kopieren und reorganisieren. Logische Volumes können auch leicht vergrößert oder verkleinert werden, indem man einfach Extents zum Volume hinzufügt oder von ihm entfernt.
Der einfache Anwendungsfall
Nachdem Sie nun mit einigen der von LVM verwendeten Begriffe und Strukturen vertraut sind, können wir einige gängige Möglichkeiten zur Verwendung von LVM erkunden. Wir beginnen mit einer einfachen Prozedur, bei der zwei physische Festplatten verwendet werden, um vier logische Volumes zu bilden.
Markieren Sie die physischen Geräte als physische Volumes
Unser erster Schritt ist das Scannen des Systems nach Blockgeräten, die LVM sehen und verwalten kann. Dies können Sie tun, indem Sie Folgendes eingeben:
- sudo lvmdiskscan
Die Ausgabe zeigt alle verfügbaren Blockgeräte an, mit denen LVM interagieren kann:
Output /dev/ram0 /dev/sda /dev/ram1 . . . /dev/ram15 /dev/sdb 2 disks 17 partitions 0 LVM physical volume whole disks 0 LVM physical volumes
Aus der obigen Ausgabe können wir sehen, dass es derzeit zwei Festplatten und 17 Partitionen gibt. Bei den Partitionen handelt es sich größtenteils um /dev/ram*
Partitionen, die das System als Ram-Platte für Leistungssteigerungen nutzt. Die Festplatten in diesem Beispiel sind /dev/sda
, die 200G Platz hat, und /dev/sdb
, die 100G hat.
Warnung: Vergewissern Sie sich, dass auf den Geräten, die Sie mit LVM verwenden wollen, nicht bereits wichtige Daten gespeichert sind. Wenn Sie diese Geräte innerhalb von LVM verwenden, werden die aktuellen Inhalte überschrieben. Wenn Sie bereits wichtige Daten auf Ihrem Server haben, machen Sie Backups, bevor Sie fortfahren.
Nun, da wir die physikalischen Geräte kennen, die wir verwenden wollen, können wir sie mit dem Befehl pvcreate
als physikalische Volumes im LVM markieren:
- sudo pvcreate /dev/sda /dev/sdb
Output Physical volume "/dev/sda" successfully created Physical volume "/dev/sdb" successfully created
Damit wird ein LVM-Header in die Geräte geschrieben, um anzuzeigen, dass sie bereit sind, zu einer Volume-Gruppe hinzugefügt zu werden.
Sie können schnell überprüfen, dass LVM die physischen Volumes registriert hat, indem Sie Folgendes eingeben:
- sudo pvs
Output PV VG Fmt Attr PSize PFree /dev/sda lvm2 --- 200.00g 200.00g /dev/sdb lvm2 --- 100.00g 100.00g
Wie Sie sehen, sind beide Geräte unter der Spalte PV
vorhanden, die für physisches Volume steht.
Hinzufügen der physischen Volumes zu einer Volume-Gruppe
Nun, da wir physische Volumes von unseren Geräten erstellt haben, können wir eine Volume-Gruppe erstellen. Wir müssen einen Namen für die Volume-Gruppe wählen, den wir generisch halten werden. In den meisten Fällen werden Sie nur eine einzige Volume-Gruppe pro System haben, um maximale Flexibilität bei der Zuordnung zu erreichen. Wir werden unsere Volume-Gruppe der Einfachheit halber LVMVolGroup
nennen.
Um die Volume-Gruppe zu erstellen und unsere beiden physischen Volumes in einem einzigen Befehl hinzuzufügen, geben Sie ein:
- sudo vgcreate LVMVolGroup /dev/sda /dev/sdb
Output Volume group "LVMVolGroup" successfully created
Wenn wir uns die pvs
-Ausgabe noch einmal ansehen, können wir sehen, dass unsere physischen Volumes jetzt mit der neuen Volume-Gruppe verbunden sind:
- sudo pvs
Output PV VG Fmt Attr PSize PFree /dev/sda LVMVolGroup lvm2 a-- 200.00g 200.00g /dev/sdb LVMVolGroup lvm2 a-- 100.00g 100.00g
Wir können eine kurze Zusammenfassung der Volume-Gruppe selbst sehen, indem wir eingeben:
- sudo vgs
Output VG #PV #LV #SN Attr VSize VFree LVMVolGroup 2 0 0 wz--n- 299.99g 299.99g
Wie Sie sehen, hat unsere Volume-Gruppe derzeit zwei physische Volumes, null logische Volumes und verfügt über die kombinierte Kapazität der zugrunde liegenden Geräte.
Erstellen von logischen Volumes aus dem Volume-Gruppen-Pool
Nun, da wir eine Volume-Gruppe zur Verfügung haben, können wir sie als Pool verwenden, aus dem wir logische Volumes zuweisen können. Im Gegensatz zur konventionellen Partitionierung müssen Sie beim Arbeiten mit logischen Volumes das Layout des Volumes nicht kennen, da LVM dies für Sie mappt und erledigt. Sie müssen nur die Größe des Volumes und einen Namen angeben.
Wir werden vier separate logische Volumes aus unserer Volume-Gruppe erstellen:
- 10G „projects“-Volume
- 5G „www“-Volume für Web-Inhalte
- 20G „db“-Volume für eine Datenbank
- „workspace“-Volume, das den restlichen Platz füllt
Um logische Volumes zu erstellen, verwenden wir den Befehl lvcreate
. Wir müssen die Volume-Gruppe angeben, aus der wir ziehen wollen, und können das logische Volume mit der Option -n
benennen. Um die Größe direkt anzugeben, können Sie die Option -L
verwenden. Wenn Sie stattdessen die Größe in Form der Anzahl der Extents angeben möchten, können Sie die Option -l
verwenden.
Wir können die ersten drei logischen Volumes mit der Option -L
wie folgt anlegen:
- sudo lvcreate -L 10G -n projects LVMVolGroup
- sudo lvcreate -L 5G -n www LVMVolGroup
- sudo lvcreate -L 20G -n db LVMVolGroup
Output Logical volume "projects" created. Logical volume "www" created. Logical volume "db" created.
Wir können die logischen Volumes und ihre Beziehung zur Volume-Gruppe sehen, indem wir die benutzerdefinierte Ausgabe mit dem Befehl vgs
auswählen:
- sudo vgs -o +lv_size,lv_name
Output VG #PV #LV #SN Attr VSize VFree LSize LV LVMVolGroup 2 3 0 wz--n- 299.99g 264.99g 10.00g projects LVMVolGroup 2 3 0 wz--n- 299.99g 264.99g 5.00g www LVMVolGroup 2 3 0 wz--n- 299.99g 264.99g 20.00g db
Wir haben die letzten beiden Spalten der Ausgabe hinzugefügt, damit wir den unseren logischen Volumes zugewiesenen Speicherplatz sehen können.
Nun können wir den Rest des Platzes in der Volume-Gruppe dem Volume „Arbeitsbereich“ zuweisen, indem wir das -l
-Flag verwenden, das in Extents arbeitet. Wir können auch einen Prozentsatz und eine Einheit angeben, um unsere Absichten besser zu kommunizieren. In unserem Fall möchten wir den verbleibenden freien Speicherplatz zuweisen, also können wir 100%FREE
übergeben:
- sudo lvcreate -l 100%FREE -n workspace LVMVolGroup
Output Logical volume "workspace" created.
Wenn wir die Volume-Gruppen-Informationen erneut überprüfen, können wir sehen, dass wir den gesamten verfügbaren Speicherplatz verbraucht haben:
- sudo vgs -o +lv_size,lv_name
Output VG #PV #LV #SN Attr VSize VFree LSize LV LVMVolGroup 2 4 0 wz--n- 299.99g 0 10.00g projects LVMVolGroup 2 4 0 wz--n- 299.99g 0 5.00g www LVMVolGroup 2 4 0 wz--n- 299.99g 0 20.00g db LVMVolGroup 2 4 0 wz--n- 299.99g 0 264.99g workspace
Wie Sie sehen, wurde das Volume „workspace“ erstellt und die Volume-Gruppe „LVMVolGroup“ ist vollständig belegt.
Formatieren und Mounten der logischen Volumes
Nun, da wir logische Volumes haben, können wir sie wie normale Blockgeräte verwenden.
Die logischen Geräte sind im /dev
-Verzeichnis genauso verfügbar wie andere Speichergeräte. Sie können an zwei Stellen darauf zugreifen:
/dev/volume_group_name/logical_volume_name
/dev/mapper/volume_group_name-logical_volume_name
Um also unsere vier logischen Volumes mit dem Ext4-Dateisystem zu formatieren, können wir Folgendes eingeben:
- sudo mkfs.ext4 /dev/LVMVolGroup/projects
- sudo mkfs.ext4 /dev/LVMVolGroup/www
- sudo mkfs.ext4 /dev/LVMVolGroup/db
- sudo mkfs.ext4 /dev/LVMVolGroup/workspace
Oder wir können eingeben:
- sudo mkfs.ext4 /dev/mapper/LVMVolGroup-projects
- sudo mkfs.ext4 /dev/mapper/LVMVolGroup-www
- sudo mkfs.ext4 /dev/mapper/LVMVolGroup-db
- sudo mkfs.ext4 /dev/mapper/LVMVolGroup-workspace
Nach der Formatierung können wir Einhängepunkte erstellen:
- sudo mkdir -p /mnt/{projects,www,db,workspace}
Dann können wir die logischen Volumes an den entsprechenden Ort mounten:
- sudo mount /dev/LVMVolGroup/projects /mnt/projects
- sudo mount /dev/LVMVolGroup/www /mnt/www
- sudo mount /dev/LVMVolGroup/db /mnt/db
- sudo mount /dev/LVMVolGroup/workspace /mnt/workspace
Um die Mounts persistent zu machen, fügen Sie sie wie bei normalen Blockgeräten zu /etc/fstab
:
- sudo nano /etc/fstab
. . ./dev/LVMVolGroup/projects /mnt/projects ext4 defaults,nofail 0 0/dev/LVMVolGroup/www /mnt/www ext4 defaults,nofail 0 0/dev/LVMVolGroup/db /mnt/db ext4 defaults,nofail 0 0/dev/LVMVolGroup/workspace /mnt/workspace ext4 defaults,nofail 0 0
Das Betriebssystem sollte nun die logischen LVM-Volumes beim Booten automatisch einhängen.
Abschluss
Hoffentlich haben Sie an dieser Stelle ein ziemlich gutes Verständnis der verschiedenen Komponenten, die LVM verwaltet, um ein flexibles Speichersystem zu erstellen. Sie sollten auch ein grundlegendes Verständnis davon haben, wie man Speichergeräte in einem LVM-Setup zum Laufen bringt.
Dieser Leitfaden hat nur kurz die Macht und Kontrolle gestreift, die LVM Administratoren von Linux-Systemen bietet. Um mehr über die Arbeit mit LVM zu erfahren, lesen Sie unseren Leitfaden zur Verwendung von LVM mit Ubuntu 16.04.