[[Vorlage(Getestet, bionic, focal)]] [[Vorlage(Fortgeschritten)]] {{{#!vorlage Wissen [:Terminal:Ein Terminal öffnen] [:Partitionierung:Eine Festplatte partitionieren] [:Dateisystem:Dateisystem anlegen] [:Kernelmodule:Kernelmodule zur Laufzeit laden] }}} [[Inhaltsverzeichnis(2)]] [wikipedia:Logical_Volume_Manager:LVM] steht für '''L'''ogical '''V'''olume '''M'''anager und ist ein Verfahren, um Partitionen — auch über mehrere Festplatten hinweg — dynamisch zu verwalten. Es wird eine zusätzliche logische Schicht zwischen Partitionstabelle und den Dateisystemen hinzugefügt. Mittels LVM kann im Gegensatz zur klassischen [:Partitionierung:] ein Speicherbereich nachträglich mit wenig Aufwand vergrößert oder verkleinert werden. Daneben bietet es die Möglichkeit, mehrere Partitionen oder Festplatten ("Physical Volumes") zu einer logischen Einheit zusammenzufassen und somit die physikalischen Größenbegrenzungen aufzuheben. Einem solchen Verbund ("Volume Group") können im laufenden Betrieb weitere Geräte hinzugefügt werden, wodurch sich der verfügbare Speicherplatz erhöht. Freier Speicherplatz kann ebenfalls dynamisch den Partitionen des Verbundes ("Logical Volumes") zugewiesen werden. Dadurch erreicht man eine höhere Flexibilität als beim klassischen Partitionierungsansatz. Dies ist vor allem für Server interessant, bei denen dynamisch auf das Wachsen der Datenbestände reagiert werden muss, hilft aber auch beim Verwalten des heimischen Rechners. Zum Aufbau eines minimalen LVMs ist mindestens ein "Physical Volume" erforderlich, auf welchem eine "Volume Group" erstellt wird. In dieser "Volume Group" werden die einzelnen "Logical Volumes" angelegt. Es ist jedoch nicht erforderlich oder sinnvoll, diesen "Logical Volumes" den gesamten Platz einer "Volume Group" zuzuweisen, um leichter auf spätere Veränderungen reagieren zu können. Als Faustregel kann man den aktuellen bzw. geplanten Platzbedarf +25% nehmen. Vorteile: * Höhere Flexibilität * Volumes können im laufenden Betrieb vergrößert, angelegt und verkleinert werden * Probleme durch falsche Partitionierung können vermieden werden * Die Kapazität mehrerer Festplatten kann zusammengefasst werden * Verschiedene Versionen von Daten sind durch sogenannte "Snapshots" möglich * Die Datensicherung ("Backup") wird durch diese "Snapshots" vereinfacht, die Downtime verringert * LVM hat einen hohen Datendurchsatz ("performance") und beeinträchtigt das System nur unwesentlich Nachteile: * Liegen die Logical Volumes auf mehreren Festplatten, so wird das Risiko des "Single-Point-of-Failure" größer, da beim Ausfall einer Platte alle Daten verloren sind, vergleichbar mit einem [wikipedia:RAID#RAID_0\:_Striping_–_Beschleunigung_ohne_Redundanz:RAID0]. * Um auf Logical Volumes zugreifen zu können, benötigen Live-Systeme LVM-Unterstützung, welche teilweise über Kernelmodule manuell nachgeladen werden muss. {{{#!vorlage Hinweis Bei einer Volume Group über mehrere Festplatten hinweg gilt: Wegen der erhöhten Gefahr des Datenverlustes beim Ausfall einer Festplatte sollte das LVM in einem [wikipedia:RAID:]-Verbund installiert werden, der Datensicherheit bietet (mindestens RAID-Level 1). }}} = Grundlagen = Die vier oben angesprochenen Begriffe sind beim LVM essentiell und werden hier beschrieben: {{{#!vorlage Tabelle Zentrale Begriffe +++ Begriff Kürzel Beschreibung +++ Physical Extent PE Das '''Physical Extent''' ist die kleinste mögliche Speichergröße eines LVM. Das ''PE'' ist vergleichbar mit den Sektoren von normalen Festplatten bzw. Partitionen. Sie kann nachträglich mittels `vgchange --physicalextentsize GRÖßE VOLUME` geändert werden. +++ Physical Volume PV Ein '''Physical Volume''' ist der physikalische Datenspeicher eines LVMs, also eine Festplatte oder eine Partition auf einer Festplatte. Es ist auch möglich, sogenannte "Loop-Dateien" (([wikipedia:Loop_device:Loop Devices] sind Dateien, die wie eine Festplatte (ein Blockdevice) angesprochen werden können)) zu verwenden. +++ Volume Group VG Eine '''Volume Group''' ist der Verbund einer oder mehrerer physikalischer Datenspeicher. +++ Logical Volume LV Ein '''Logical Volume''' entspricht der klassischen Partition, enthält das Dateisystem, ist immer Teil einer '''Volume Group''' und kann ein- und ausgehängt werden. }}} == Skalierbarkeit == Im LVM können alle Elemente außer der Größenzuweisung des "Physical Extent" im laufenden Betrieb vergrößert und verkleinert werden. Doch die Erweiterbarkeit des LVM allein hilft noch nicht weiter, auch das darin liegende Dateisystem muss verändert werden, um es tatsächlich an die neue Größe anpassen zu können. Nicht jedes Dateisystem beherrscht das Vergrößern oder Verkleinern. Weitere Informationen sind unter [:Dateisystemgröße_ändern:Dateisystemgrößen verändern] verfügbar. = Installation = Hat man bei der Installation kein LVM aufgesetzt, muss folgendes Paket installiert werden [1]: {{{#!vorlage Paketinstallation lvm2 }}} Die nötigen Einstellungen werden von der Installationsroutine vorgenommen, so dass LVM ab sofort nutzbar ist. = Einrichten eines LVM = Da die heutigen grafischen Partitionierungswerkzeuge LVM beherrschen, beschränkt sich dieser Artikel auf die Kommandozeile. Wer grafische Werkzeuge bevorzugt, wird unter [:Partitionierung/#Grafisch:] fündig. ==Kurz-Übersicht:== * Die zu verwendenden Partitionen / Festplatten müssen zunächst mittels `pvcreate` als "Physical Volume" initialisiert werden, wenn sie bereits über eine Partitionierung verfügen. Geräte ohne Partitionstabelle können direkt mit `vgcreate` einer "Volume Group" zugeordnet werden. Diese werden in ihrer Gesamtgröße verwendet. * Die "Physical Volumes" werden mittels `vgcreate` zu einer "Volume Group" zusammengefasst. * `lvcreate` dient dazu, die "Logical Volumes" zu erstellen. {{{#!vorlage hinweis Es wird empfohlen zunächst eine Partitionstabelle wie ''gpt'' zu erstellen (siehe [:fdisk:]) und diese dem LVM zuzuordnen, da andere Systeme ggf. ungefragt in den Tabellen-Bereich schreiben und damit das LVM zerstören könnten. }}} ===Allgemein:=== {{{#!vorlage Befehl pvcreate /dev/PARTITION /dev/PARTITION2 # PARTITION und PARTITION2 als Physical Volume initialisieren vgcreate GROUP /dev/PARTITION /dev/PARTITION2 # Erstellt Volume Group GROUP, bestehend aus /dev/PARTITION und /dev/PARTITION2 lvcreate -L 2G -n VOL GROUP # Erzeugt ein 2 GB großes Logical Volume mit dem Namen VOL in der Volume Group GROUP }}} ===Beispiel=== {{{#!vorlage Befehl pvcreate /dev/sdb1 /dev/sdb2 /dev/sdc /dev/sdd vgcreate grp /dev/sdb1 /dev/sdb2 /dev/sdc /dev/sdd lvcreate -L 3G -n gross grp lvcreate -L 500MB -n mittel grp lvcreate -L 100MB -n klein grp for f in klein mittel gross; do mkfs.ext4 /dev/grp/$f; done }}} Im Beispiel werden die vorhandenen Partitionen als LVM initialisiert und zu einer einzelnen Volume Group verbunden. Anschliessend werden drei Logical Volumes erstellt und jeweils mit ext4 formatiert. Anmerkung: Es wäre sinnvoller die gesamten Laufwerke zu verwenden und nicht dieses Beispiel nachzubauen. Dazu kann mit einem Partitionierungswerkzeug die vorhandene Partitionierung gelöscht und das Gerät als "Linux LVM" angelegt werden. In jedem Fall kann der verbleibende Speicherplatz nach Bedarf den bestehenden LVs zugewiesen oder in weiteren LVs verwendet werden. {{{#!vorlage Hinweis Eine mit pvcreate initialisierte Partition sollte vom Typ `0x8e` bzw. "Linux LVM" sein, da es sonst zu Problemen mit der Erkennung der PVs kommt. Wenn das LVM auf einem RAID liegt, ist dies natürlich nicht nötig, genauso als ob das LVM direkt auf eine Festplatte ohne Partitionstabelle aufgesetzt wird. Dies kann man z.B. via parted mit ''"set x lvm on"'' erreichen, wobei x die Partitionsnummer ist. }}} ==Verwendung== Für jedes Logical Volume wird jeweils ein symbolischer Link '''/dev/GROUP/VOL''' und '''/dev/mapper/GROUP-VOL''' angelegt. Diese zeigen auf die durchnummerierten Block Devices ''/dev/dmX''. Das Logical Volume kann verwendet werden wie jedes andere Block-Device. So kann ein Dateisystem darauf erzeugt werden, und das Dateisystem kann eingebunden werden. Beispiel: {{{#!vorlage Befehl mkfs.ext4 /dev/dm-4 # oder mkfs.ext4 /dev/grp/klein # oder mkfs.ext4 /dev/mapper/grp-klein mount /dev/grp/klein /mnt }}} = Administration eines LVM = == Informationen abfragen == Es gibt für jede relevante Einheit zwei Methoden, Informationen abzufragen. Die Kurzbefehle sind das Einheitenkürzel mit angehängtem `s`, also `pvs`, `vgs` und `lvs`; die Detailausgaben erhält man mit dem Kürzel und angehängtem `display`: `pvdisplay`, `vgdisplay` und `lvdisplay`. Als Beispiel dient hier die Ausgabe des oben genannten Beispiel-LVM: {{{#!vorlage Befehl sudo pvs }}} {{{ PV VG Fmt Attr PSize PFree /dev/vda1 ubuntu-mate-vg lvm2 a-- <20,00g 40,00m /dev/vdb1 grp lvm2 a-- <1,07g 64,00m /dev/vdb2 grp lvm2 a-- 952,00m 352,00m /dev/vdc grp lvm2 a-- <2,00g 0 /dev/vdd grp lvm2 a-- <2,00g <2,00g }}} {{{#!vorlage Befehl sudo vgs }}} {{{ VG #PV #LV #SN Attr VSize VFree grp 4 3 0 wz--n- <5,99g 2,40g ubuntu-mate-vg 1 3 0 wz--n- <20,00g 40,00m }}} {{{#!vorlage Befehl sudo lvs}}} {{{ LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert gross grp -wi-a----- 3,00g klein grp -wi-a----- 100,00m mittel grp -wi-a----- 500,00m lfs ubuntu-mate-vg -wi-a----- 9,00g root ubuntu-mate-vg -wi-ao---- 10,00g swap_1 ubuntu-mate-vg -wi-ao---- 980,00m }}} Mit Hilfe der Kurzbefehle kann man sich schnell einen Überblick über ein bestehendes LVM verschaffen und sowohl den freien Speicher auf den physikalischen Geräten, als auch in den Volume Groups erkennen. Die Anzahl "#SN" in der Ausgabe von `vgs` steht dabei für die Anzahl der Snapshots. Ausgabe von `lvdisplay /dev/grp/klein`: {{{ --- Logical volume --- LV Path /dev/grp/klein LV Name klein VG Name grp LV UUID csr1mA-J2Sl-mN2x-enBH-TQ5W-oSNh-YVoIjB LV Write Access read/write LV Creation host, time mate-kvm, 2020-10-01 11:14:01 +0200 LV Status available # open 0 LV Size 100,00 MiB Current LE 25 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:5 }}} Die Detailausgaben zeigen deutlich mehr Informationen, daher ist hier nur stellvertretend die Ausgabe eines logischen Speichers dargestellt. Der Aufruf von `sudo lvdisplay` zeigt diese Struktur für alle bekannten LVs. == Verwaltung von Physical Volumes == === Physical Volume initialisieren === {{{#!vorlage Befehl sudo pvcreate /dev/PARTITION }}} Dies erstellt ein Physical Volume auf der Partition '''/dev/PARTITION'''. Diese kann dann einer Volume Group zugewiesen werden. Dieser Schritt kann bei einem folgenden `pvcreate` ggf. übersprungen werden. === Physical Volume leeren, verschieben oder entfernen === {{{#!vorlage Hinweis Um ein Physical Volume mit `pvmove` zu leeren, muss genügend Platz auf den restlichen Physical Volumes vorhanden sein! }}} {{{#!vorlage Befehl sudo pvmove /dev/PARTITION }}} Mit `pvmove /dev/PARTITION` wird der Inhalt des Physical Volumes auf die restlichen Volumes verschoben. Dies ist nötig, um z.B. das Physical Volume aus einer Volume Group zu entfernen. {{{#!vorlage Befehl sudo pvmove /dev/PARTITION sudo vgreduce GROUP /dev/PARTITION sudo pvremove /dev/PARTITION }}} Verschiebt alle Daten von dem Physical Volume `PARTITION` und entfernt das Volume aus der Volume Group und anschliessend aus dem LVM. == Verwaltung von Volume Groups == === Volume Groups erstellen === {{{#!vorlage Befehl sudo vgcreate GROUP /dev/PARTITION1 /dev/PARTITION2 }}} Hier wird eine Volume Group mit dem Namen `GROUP` erstellt. Diese bekommt die Physical Volumes `PARTITION1` und `PARTITION2` zugewiesen. === Volume Groups vergrößern === {{{#!vorlage Befehl sudo vgextend GROUP /dev/PARTITION }}} Das Physical Volume `PARTITION` wird der Volume Group `GROUP` hinzugefügt. === Volume Groups verkleinern === {{{#!vorlage Befehl sudo pvmove /dev/PARTITION sudo vgreduce GROUP /dev/PARTITION }}} Verschiebt alle Daten von dem Physical Volume `PARTITION` und entfernt das Volume aus der Gruppe `GROUP`. === Volume Groups löschen === {{{#!vorlage Befehl sudo vgremove GROUP }}} Hier wird eine Volume Group mit dem Namen `GROUP` gelöscht. == Verwaltung von Logical Volumes == === Logical Volumes erstellen === {{{#!vorlage Befehl sudo lvcreate -L 2G -n VOLUME GROUP }}} Erstellt ein Logical Volume der Größe 2 Gigabyte mit dem Namen `VOLUME` in der Volume Group `GROUP`. Im Anschluss daran kann mit z.B. {{{#!vorlage Befehl sudo mkfs.ext4 /dev/GROUP/VOLUME }}} ein Dateisystem auf dem Volume erstellt werden (siehe [:Formatieren:]). === Logical Volumes vergrößern === {{{#!vorlage Befehl sudo lvextend --resizefs -L 5G /dev/GROUP/VOLUME # Größe von insgesamt 5G festlegen sudo lvextend -r -L +3G /dev/GROUP/VOLUME # um 3G vergrößern }}} Vergrößert das Logical Volume `VOLUME` der Volume Group `GROUP` und das Dateisystem '''auf''' 5 Gigabyte. Als Alternative kann auch ein `+` vor den Wert hinter `-L` gestellt werden; in diesem Fall wird die Partition dann '''um''' diesen Wert vergrößert. {{{#!vorlage Befehl sudo lvextend --resizefs -l +100%FREE /dev/GROUP/VOLUME }}} Vergrößert das Logical Volume `VOLUME` der Volume Group `GROUP` und das Dateisystem auf die maximal mögliche Größe. Die Volume Group hat im Anschluss keinen freien Speicher mehr! === Logical Volumes verkleinern === {{{#!vorlage hinweis Das Verkleinern von Volumes kann u.U. zu Datenverlust führen! Daher sollte vorher der verfügbare und verwendete Platz geprüft werden! }}} {{{#!vorlage Befehl sudo lvreduce --resizefs -L 5G /dev/GROUP/VOLUME }}} Verkleinert das Logical Volume `VOLUME` der Volume Group `GROUP` und das Dateisystem auf 5 Gigabyte. Als Alternative kann auch ein `-` vor den Wert hinter `-L` gestellt werden, siehe `lvextend`. === Snapshots === Snapshots sind Logical Volumes, die an ein bestehendes Logical Volume gebunden sind. Wird im Original-LV eine Datei verändert, so wird zunächst die bestehende Version auf den Snapshot kopiert, bevor die Änderungen im LV angewendet werden. Dadurch ist es leicht Änderungen rückgängig zu machen. Möchte man die Änderungen behalten, kann der Snapshot einfach gelöscht werden. Wird die angegebene Größe eines Snapshot erreicht oder überschritten, werden die Änderungen wieder direkt auf das Original-LV angewendet! {{{#!vorlage Befehl sudo lvcreate --size 100M --snapshot --name NAME /dev/GROUP/VOLUME }}} Dies legt einen Snapshot `NAME` an, welcher auf `VOLUME` der Volume Group `GROUP` basiert. Finden Schreibvorgänge auf das originale LV `VOLUME` statt, so werden die betroffenen Blöcke vorher physisch auf das LV `NAME` kopiert, erst danach werden die Änderungen auf `VOLUME` durchgeführt. Deshalb ist der Snapshot so lange gültig, wie sich das Original um nicht mehr als den hinter `--size` angegebenen Wert verändert (hier 100 MB). Daraus resultiert auch, dass die Schreibrate auf `VOLUME` geringer ist, solange ein Snapshot davon existiert. Um das LV wieder auf den Stand bei der Erstellung des Snapshots zurückzusetzen, wird mit dem Befehl {{{#!vorlage Befehl sudo lvconvert --merge /dev/GROUP/NAME }}} das originale LV und der Snapshot zusammengeführt. Gegebenenfalls erfolgt die Zusammenführung erst beim Neustarten des Computers (z.B. bei root). Nachdem der Vorgang erfolgreich abgeschlossen wurde, wird der Snapshot gelöscht. Snapshots sind z.B. nützlich, wenn man mit der Möglichkeit, ohne größeren Aufwand zum vorherigen Stand eines Dateisystems zurückkehren zu können, etwas ausprobieren will. Aber auch als Hilfsmittel zur Datensicherung dienen Snapshots, denn nachdem ein Snapshot erstellt wurde, kann ein Backuptool den eingehängten Snapshot in aller Ruhe klonen, ohne dass man sich um während des Sicherungsvorgangs stattfindende Dateiänderungen sorgen muss. Gerade hierfür ist ein read-only Snapshot geeignet, welches man über die Option `-p r` oder `-permission r` erstellt, wobei `r` für "read-only" und `rw` für "read-write" steht, die Standardeinstellung ist `rw`. Nach der Datensicherung auf eine externe Festplatte kann das Snapshot wieder verworfen werden. === Logical Volumes löschen === {{{#!vorlage Befehl sudo lvremove /dev/GROUP/VOLUME }}} Hier wird ein Logical Volume mit dem Namen `VOLUME` in der Gruppe `GROUP` gelöscht. === Kernelmodule === Standardmäßig sind bei aktivem LVM die Kernelmodule ''striped'', ''linear'' und ''error'' aktiv. Weitere Module können mit `modprobe NAME` geladen werden. Eine Übersicht der aktuell aktiven Kernelmodule im Zusammenhang mit LVM erhält man mit {{{#!vorlage befehl dmsetup targets }}} Weitere Hinweise finden sich unter Kernelmodule[4]. = Problembehebung = == Logical Volume Management manuell starten und öffnen== Unter Ubuntu werden nach Installation der benötigten Pakete normalerweise alle Logical Volumes beim Systemstart mitgestartet. Dies ist jedoch bei vielen Live- bzw. Rescue-CDs nicht der Fall. Mit den nachfolgenden Befehlen können Logical Volumes manuell gestartet werden. {{{#!vorlage Befehl modprobe dm_mod pvscan vgscan lvscan vgchange -a y }}} Öffnen kann man das Logical Volume jetzt z.B. mit {{{#!vorlage Befehl mount /dev/GROUP/VOLUME/ /mnt }}} Mit {{{#!vorlage Befehl vgchange -a n }}} können die Logical Volumes wieder deaktiviert werden. Dies geschieht bei Ubuntu automatisch während des Herunterfahrens des Rechners. == LVs anzulegen oder zu vergrößern bricht wegen zu weniger Extents ab == Sollte beim Versuch, Logical Volumes mit `lvcreate` anzulegen oder mit `lvextend` zu vergrößern, die Fehlermeldung `xxxx extents needed, but only 0 available` erscheinen (`xxxx` = Anzahl), obwohl `pvdisplay` genügend freie Extents hinter `Free PE` meldet, kann es an der Option `Allocatable NO` liegen, welche ebenfalls von `pvdisplay` angezeigt wird. Um die PV für Änderungen freizuschalten, dient folgender Befehl: {{{#!vorlage Befehl pvchange -x y /dev/PARTITION }}} Nach Durchführung der Änderungen wird die PV wieder auf unveränderlich geschaltet: {{{#!vorlage Befehl pvchange -x n /dev/PARTITION }}} Die betreffende `PARTITION` wird mittels `pvdisplay` hinter `PV Name` angezeigt. == Verschieben einer PV mit pvmove funktioniert nicht == Sollte beim Verschieben von Daten mit `pvmove` eine Fehlermeldung kommen, dass ein Kernel-Modul nicht vorhanden sei, so kann dies so behoben werden: {{{#!vorlage Befehl sudo modprobe dm_mirror }}} [[Anker(lvm-modprobe-dm-snapshot)]] == Snapshot lässt sich nicht anlegen == Beim Anlegen eine Snapshots kann es passieren, dass dies wegen eines nicht geladenen Kernel-Moduls nicht möglich ist. Das notwendige Modul kann wie folgt nachgeladen werden: {{{#!vorlage Befehl sudo modprobe dm_snapshot }}} = Links = == intern == * [:Logical_Volume_Manager/Alternate_Installation: Alternate Installation mit LVM] == extern == * [http://www.pro-linux.de/kurztipps/2/1562/linux-optimal-partitionieren.html Linux optimal partitionieren] {de} - Pro-Linux, 04/2012 * [youtube:6uO5rXBk0pk: LVM Vortrag von Stefan Betz] {de} - Ubucon, 10/2014 * [https://www.selflinux.org/selflinux/html/lvm02.html Linux-LVM-Howto des SelfLinux-Dokumentationsprojektes] {de} # tag: Installation, System, Partitionierung