Einführung in LVM Thin Provisioning
LVM (Logical Volume Manager) ist eine Technologie, die es uns ermöglicht, eine Abstraktionsschicht über physischen Speichergeräten zu schaffen und flexible Partitionierungsschemata zu implementieren, bei denen logische Volumes einfacher zu verkleinern, zu vergrößern oder zu entfernen sind als klassische "nackte" Partitionen. Während bei der "Thick"-Bereitstellung von LVM einem logischen LVM-Datenträger zur Erstellungszeit eine feste Menge an Speicherplatz zugewiesen werden muss, wird bei der Verwendung von "Thin"-Provisioning der Speicher nur bei Bedarf zugewiesen.
In diesem Tutorial lernen wir die grundlegenden Konzepte hinter LVM Thin Provisioning kennen und erfahren, wie LVM Thin Pools und Volumes unter Linux erstellt und verwaltet werden.
In diesem Tutorial lernen Sie:
- Die grundlegenden Konzepte hinter LVM Thin Provisioning
- Erstellen von Thin Pools und Volumes
Einleitung
Thin Provisioning basiert auf dem Konzept von Thin Pools und Volumes. Wenn wir Thin Provisioning verwenden, weisen wir zum Zeitpunkt der Erstellung keinen Speicherplatz für ein logisches Volume zu, sondern stellen nur eine "virtuelle" Größe für sie bereit. Bevor wir uns mit dem Erstellen von Thin Pools und Volumes befassen, müssen wir eine Volume-Gruppe erstellen und sie mit mindestens einem physischen Volume füllen.
Erstellen einer Volume-Gruppe
Wir beginnen mit der Verwendung einer hypothetischen /dev/vda1-Partition von 20 GiB als physisches LVM-Volume:
sudo pvcreate /dev/vda1Um eine Volume-Gruppe zu erstellen (für dieses Tutorial nennen wir sie "vg0") und gleichzeitig das physische Volume hinzuzufügen, führen wir den folgenden Befehl aus:
sudo vgcreate vg0 /dev/vda1Wir können den Befehl vgdisplay verwenden, um unser aktuelles Setup zu visualisieren. In diesem Fall wird die folgende Ausgabe zurückgegeben:
--- Volume group ---
VG Name vg0
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size <20.00 GiB
PE Size 4.00 MiB
Total PE 5119
Alloc PE / Size 0 / 0
Free PE / Size 5119 / <20.00 GiB
VG UUID jXRrgk-YfNA-Qisj-XxmE-FtCs-chzj-w1idAMErstellen eines LVM-Thin-Pools
Wir erstellen einen LVM-Thin-Pool wie jedes andere logische Volume. Der einzige Unterschied besteht darin, dass wir die Option --thinpool verwenden. Angenommen, wir möchten einen Thin Pool mit dem Namen "lxcfgpool" erstellen. Hier ist der Befehl, den wir ausführen würden:
sudo lvcreate --thinpool lxcfgpool -L15GiB vg0Sie können sehen, dass wir nicht den gesamten verfügbaren Speicherplatz in der Volume-Gruppe genutzt haben: Dies ist eine Sicherheitsmaßnahme, um sicherzustellen, dass wir einen gewissen Erweiterungsspielraum für den Pool haben (wir werden gleich darauf eingehen). Um zu überprüfen, ob der Thin Pool erstellt wurde, können wir den Befehl lvs verwenden:
sudo lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lxcfgpool vg0 twi-a-tz-- 15.00g 0.00 10.57Wenn wir die Ausgabe beobachten, können wir feststellen, dass derzeit keine Daten im Pool verwendet werden, während 10,57 % des Speicherplatzes für Metadaten verwendet werden. Das erste lv_attr-Bit, das in der Spalte "Attr" angegeben ist, gibt den Volume-Typ an. Ein t bedeutet, wie erwartet, dass wir es mit einem dünnen Pool zu tun haben. Indem wir dem Befehl die Option -a hinzufügen, können wir noch mehr Informationen sammeln:
sudo lvs -a
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
[lvol0_pmspare] vg0 ewi------- 16.00m
lxcfgpool vg0 twi-a-tz-- 15.00g 0.00 10.57
[lxcfgpool_tdata] vg0 Twi-ao---- 15.00g
[lxcfgpool_tmeta] vg0 ewi-ao---- 16.00mDa wir die Option -a verwendet haben, wurden vorhandene "interne" logische Volumes in die Ausgabe einbezogen: Auf diese Volumes kann der Benutzer nicht direkt zugreifen. Wozu dienen sie? Ein Thin Pool wird erstellt, der zwei "normale" logische Volumes kombiniert: Eines soll Daten speichern (das "T" im ersten lv_attr-Bit steht für Thin Pool Data), das andere soll Metadaten enthalten ("e"). Es wird auch ein zusätzliches logisches PMSUSE-Volume (Pool Metadata Spare) erstellt, das die gleiche Größe wie das Metadaten-LV hat: Es wird für Reparatur-/Wiederherstellungsvorgänge verwendet.
Erstellen dünner Volumes
Sobald wir einen Thin Pool haben, können wir Thin Logical Volumes erstellen. Das Erstellen eines dünnen Volumens ist wirklich einfach. Wir verwenden immer noch den Befehl lvcreate; Diesmal geben wir jedoch nicht die "statische" Größe des Volumes an, sondern die Option -V, um die "virtuelle" Größe anzugeben, die der maximalen Speicherplatzmenge entspricht, die es einnehmen kann. Im folgenden Beispiel erstellen wir ein dünnes logisches Volume mit dem Namen "thinvolume0" mit einer virtuellen Größe von 10 GiB:
sudo lvcreate -V 10GiB -T vg0/lxcfgpool -n thinvolume0Unser erstes dünnes Volumen ist fertig. Versuchen wir nun, einen weiteren in der gleichen Größe zu erstellen:
sudo lvcreate -V 10GiB -T vg0/lxcfgpool -n thinvolume1Der Befehl wird erfolgreich ausgeführt, aber dieses Mal erhalten wir eine Reihe von Warnungen:
WARNING: Sum of all thin volume sizes (20.00 GiB) exceeds the size of thin pool vg0/lxcfgpool and the size of whole volume group (<20.00 GiB).
WARNING: You have not turned on protection against thin pools running out of space.
WARNING: Set activation/thin_pool_autoextend_threshold below 100 to trigger automatic extension of thin pools before they get full.
Logical volume "thinvolume1" created.
Die erste Aussage ist ganz klar: Die Summe der virtuellen Größen der beiden Thin Volumes (jeweils 10 GiB) ist größer als die Größe des Thin Pools. Dies ist immer noch ein gültiges Szenario, denn wie wir bereits sagten, wird der Speicherplatz nur dann zugewiesen, wenn er genutzt wird.
Die zweite Meldung warnt uns, dass wir den Schutz vor dem dünnen Pool nicht aktiviert haben, der zu wenig Speicherplatz hat. Einem Thin Pool sollte nie der Speicherplatz ausgehen, da es sonst zu Beschädigungen des Dateisystems kommen kann. Indem wir die Option thin_pool_autoextend_threshold in der Konfigurationsdatei /etc/lvm/lvm.conf auf einen Prozentwert < 100 setzen, können wir so einstellen, dass der Thin Pool automatisch erweitert wird, wenn der angegebene Schwellenwert erreicht ist. Es versteht sich von selbst, dass in der Datenträgergruppe verfügbarer Speicherplatz vorhanden sein muss, damit dieser Vorgang erfolgreich ausgeführt werden kann. Die Menge an Speicherplatz, die dem Pool hinzugefügt wird, wenn er automatisch erweitert wird, kann über die Option thin_pool_autoextend_percent konfiguriert werden, die normalerweise auf 20 % des Poolplatzes eingestellt ist.
Die Bedeutung des Trimmens
Bei einem Thin Provisioning-Setup ist es sehr wichtig, Dienstprogramme wie fstrim regelmäßig zu verwenden, um sicherzustellen, dass freigegebene Blöcke in Thin Volumes als verfügbarer Speicherplatz in den Pool zurückkehren. Lassen Sie uns das demonstrieren. Wir haben unsere dünnen Volumes, jetzt erstellen wir Dateisysteme darauf:
sudo mkfs.ext2 /dev/vg0/thinvolume0
sudo mkfs.ext2 /dev/vg0/thinvolume1Jetzt mounten wir das logische Volume "thinvolume0" und simulieren die Erstellung einer 1-GiB-Datei mit dd:
sudo mount /dev/vg0/thinvolume0 /mnt
sudo dd if=/dev/zero of=/mnt/test bs=1M count=1024Hier ist der Status des Pools, nachdem wir die Datei erstellt haben:
sudo lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lxcfgpool vg0 twi-aotz-- 15.00g 8.87 13.55
thinvolume0 vg0 Vwi-aotz-- 10.00g lxcfgpool 11.65
thinvolume1 vg0 Vwi-a-tz-- 10.00g lxcfgpool 1.65Wie Sie sehen können, sind jetzt 8,87 % der Poolfläche belegt. Schauen wir uns an, was passiert, wenn wir die gerade erstellte Datei löschen:
sudo rm /mnt/testSchauen wir uns den Poolstatus noch einmal an:
sudo lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lxcfgpool vg0 twi-aotz-- 15.00g 8.87 13.55
thinvolume0 vg0 Vwi-aotz-- 10.00g lxcfgpool 11.65
thinvolume1 vg0 Vwi-a-tz-- 10.00g lxcfgpool 1.65Sieht so aus, als hätte sich nichts geändert. Lassen Sie uns nun fstrim auf dem gemounteten Dateisystem ausführen:
sudo fstrim /mnt
/mnt: 9.7 GiB (10461900800 bytes) trimmed
Lassen Sie uns ein letztes Mal den Status des Pools überprüfen:
sudo lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lxcfgpool vg0 twi-aotz-- 15.00g 2.19 11.30
thinvolume0 vg0 Vwi-aotz-- 10.00g lxcfgpool 1.65
thinvolume1 vg0 Vwi-a-tz-- 10.00g lxcfgpool 1.65Diesmal wurde der getrimmte Platz, wie Sie sehen können, in den Pool zurückgebracht.
Abschließende Gedanken
Im Gegensatz zum "Thick"-Provisioning, bei dem logischen Volumes zum Zeitpunkt der Erstellung eine feste Menge an Speicherplatz zugewiesen werden muss, können wir beim LVM-Thin-Provisioning einen Speicherpool (einen Thin Pool) und darauf basierende logische Thin-Volumes erstellen, wobei nur deren virtuelle Größe angegeben wird. Speicherplatz aus dem Pool wird nur bei Bedarf Thin Volumes zugeordnet. In diesem Tutorial haben wir kurz gesehen, wie man einen Thin Pool und Thin Volumes erstellt.
