LVM steht für Logical Volume Manager und ist ein Verfahren, um Speicherplatz über mehrere Festplatten dynamisch zu verwalten. Es werden sozusagen, zusätzliche logische Schichten zwischen der Hardware, den Partitionen und dem Dateisystemen erstellt respektive eingefügt.
LVM bietet die Möglichkeit, mehrere Partitionen logisch zusammenzufassen (Volume Group) und in diesem logischen Verbund neue “logische Partitionen” (Logical Volume) anzulegen. Der Volume Group können dynamisch weitere Geräte hinzugefügt werden, wodurch sich der verfügbare Speicherplatz erhöht. Freier Speicherplatz kann ebenfalls dynamisch den 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.
Vorteile:
Nachteile:
Vier Begriffe sind beim LVM essentiell und sollen zunächst verstanden werden:
Physical Extent: Das sog. Physical Extent (PE) ist die kleinste mögliche Speichergrösse in einem LVM. Das PE ist vergleichbar mit den Sektoren von normalen Festplatten bzw. Partitionen. Es ist nicht möglich, die Grösse der PEs nachträglich zu verändern. Dies ist aber auch nicht nötig, da die Anzahl der PEs seit LVM2 unbegrenzt ist, die Standardgrösse beträgt 4 MByte.
Physical Volume: Ein Physical Volume (PV) ist der eigentliche Datenspeicher eines LVMs. Ein PV kann eine Partition oder ein ganzes Laufwerk sein. Es ist auch möglich, sogenannte “Loop-Dateien” zu verwenden.
Volume Group: Eine Volume Group (VG) ist eine Art Container für mindestens ein PV.
Logical Volume: Ein Logical Volume (LV oder auch Volume) ist im LVM Kontext für den Anwender eine Art Partition innerhalb einer Volume Group. Es ist nicht möglich Logical Volumes ausserhalb einer VG zu erstellen. Das LV kann wie eine normale Partition verwendet werden, d.h. es können Dateisysteme darauf angelegt werden und es kann gemounted werden.
Skalierbarkeit: Im LVM können alle Elemente (PV, VG, LV), ausser der PE, im laufenden Betrieb vergrössert 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össern oder Verkleinern. Weitere Informationen sind unter Dateisystemgrössen verändern verfügbar.
Zu Beginn, muss man sich überhaupt erst klar werden, wo man sich sein neues LVM-Volumen aufbauen will. Um also erst einen überblick über das aktuelle System zu erlangen, kann das Tool: lsblk
verwendet werden:
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 450G 0 disk ├─sda1 8:1 0 200M 0 part /boot/efi ├─sda2 8:2 0 1G 0 part /boot └─sda3 8:3 0 448.8G 0 part ├─cl_server-root 253:0 0 442.9G 0 lvm / └─cl_server-swap 253:1 0 5.9G 0 lvm [SWAP] sdb 8:0 0 200G 0 disk sdc 8:0 0 200G 0 disk
Wie wir hier sehen, sind momentan die Disks sdb und sdc noch nicht in Gebrauch. Deshalb werden wir nun auf diesen zwei unser neues LV-Volumen schritt für schritt aufsetzen.
# pvcreate /dev/sdb /dev/sdc
Phisical volume "/dev/sdb" successfully created Phisical volume "/dev/sdc" successfully created
# vgcreate vg_alpha /dev/sdb /dev/sdc
Volume group "vg_alpha" successfully createdDie soeben erstellte VG, verfügt nun über den gesamten Speicherplatz der beiden PVs (in PE). Das heisst, die Volume Group vg_alpha ist momentan rund 400GB gross!
vg_alpha
erstellen: # lvcreate -n hercules -L 100G vg_alpha
Logical volume "hercules" successfully created
Mit dem nachfolgenden Ablauf, wird garantiert, dass die neu erstellten Logical Volumen auch korrekt beim System eingebunden werden, sprich erst einmal überhaupt verwendet werden können.
LV-Volumes “hercules”
mit XFS:# mkfs -t xfs /dev/vg_alpha/lv_hercules
# mkdir /mnt/hercules
/etc/fstab
Datei ergänzen: # vim /etc/fstab
# /etc/fstab # Created by anaconda on Thu Jun 29 10:01:07 2017 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/cl_server-root / xfs defaults 0 0 UUID=e6e17315-a455-4d57-851f-10ed1f90e4a9 /boot xfs defaults 0 0 UUID=3C13-8534 /boot/efi vfat umask=0077,shortname=winnt 0 0 /dev/mapper/cl_server-swap swap swap defaults 0 0 /dev/vg_alpha/lv_hercules /mnt/hercules xfs defaults 0 0 #
/etc/fstab
festgelegt sind/wurden gemountet werden! # mount -a
df -h
gemountet und ersichtlich sein!
In diesem Beispiel, soll das LV-Volume /dev/vg_alpha/lv_hercules
um 512MB verkleinert werden!
# lvreduce -L -512M /dev/vg_alpha/lv_hercules -r
ACHTUNG: Hier darf die Option -r NICHT vergessen gehen, da mit jenem Schalter, dass Filesystem noch vor dem effektiven Verkleinern automatisch vor-verkleinert wird; würde beim weglassen dieser Option das Filesystem im wahrsten Sinne des Wortes “abgehackt” und würde somit korrupt!
Hier, soll das LV-Volume /dev/vg_alpha/lv_hercules
um 2GB vergrössert werden! Dies geht entweder in zwei separaten Befehlen, wo man zuerst das LV-Volume vergrössert und anschliessend erst das Filesistem:
# lvextend -L +2G /dev/vg_alpha/lv_hercules # xfs_growfs /dev/vg_alpha/lv_hercules //Nur für das xfs filesystem geeignet! # resize2fs /dev/vg_alpha/lv_hercules //Nur für das ext4/ext3/ext2 filesystem geeignet!
Oder beides, automatisch in einem Befehl kombiniert: (-r
→ --resizefs
)
# lvextend -L +2G /dev/vg_alpha/lv_hercules -r
Tipp: Soll das LV-Volumen mit allem noch zur verfügungstehenden freien Speicherplatz in der VG erweitert werden, kann folgender Befehl verwendet werden:
# lvextend -l +100%FREE /dev/vg_alpha/lv_hercules -r
Fall einmal der Server einen SMART-Error auf einer der im LVM verwendeten Disk entdeckt; so sollte die Disk unbedingt nicht mehr länger produktiv verwendet werden! Um Datenverlust zu verhindern, sollte diese also möglichst schnell ersetzt werden.
Wichtig: Da die Daten in einer VG / LV willkürlich über alle Disken verteilt werden und somit auch alle Disken für den Betrieb benötigt werden; müssen bestehende Daten zuerst von der defekten Disk weg-migriert werden!
Verschieben der Physical Extents (PE's) mit dem Tool: pvmove
# pvmove /dev/sdb
Mit diesem Befehl, werden als erstes, sämtliche beschriebenen PE's (Daten) auf der Disk /dev/sdb
zu anderen freien PE's in der selben Volume Group verschoben!
Defekte Disk aus Volume Group entfernen:
# vgreduce vg_alpha /dev/sdb
Die Disk /dev/sdb
ist nach fertigstellen dieses Commands nicht mehr Teil der Volume Group vg_alpha und kann somit aus dem Server ausgebaut / ersetzt werden!
Um eine Weitere Disk zu einer bestehenden Volume Group hinzuzufügen, wird nach folgendem Muster vorgegangen:
lsblk
überprüfen, ob diese auch erkannt wird.# pvcreate /dev/sdb
Dies wird die neue Festplatte komplett leeren und mit dem PV Label überschreiben!
vg_alpha
hinzugefügt werden: # vgextend vg_alpha /dev/sdb
Dies erweitert nun unsere vg_alpha mit dem zusätzlichen Storage der neuen Disk!
Bevor ein LV-Volumen gelöscht wird, muss dies zuerst zwingend ungemountet werden! Anschliessend, kann es durch folgenden Befehl gelöst werden:
ACHTUNG, DIES KANN NICHT RÜCKGÄNGIG GEMACHT WERDEN!
# lvremove /dev/vg_alpha/hercules
Zu Beginn, müssen alle Daten gesichert werden, welche NICHT VERLOREN gehen sollen!
# unmount /mnt/hercules
logical volume
gelöscht: # lvremove /dev/vg_alpha/hercules
volume group
entfernt: # vgremove vg_alpha
Das VG's physische Volumen wird somit gelehrt und steht so bereits wieder für neue VG's zur Verfügung!
# pvremove /dev/vda2 /dev/vdb1
Somit sind nun auch die PV Metadaten der alten Disken gelöscht und sie können nun entfernt; sprich erneut formatiert werden!
/etc/fstab
zu entfernen!