Administration eines LVM
Mit LVM kann man den Festplattenspeicher dynamisch verwalten. LVM ist eine abstrakte Ebene zwischen Festplatte, Partition und Dateisystem. Mehr zu theoretischen Informationen finden Sie auf wikipedia.org
Vorteile
- Höhere Flexibilität
- Die Datensicherung durch ein Snapshots wird vereinfacht
- Mehrere Partitionen von verschiedenen Festplatten kann man zu einem Volume zusammenfassen
- Volumes kann man in laufendem Betrieb vergrößern bzw. verkleinern
Nachteile
- Zugriff auf LVM-Partitionen ist nur mit Linux möglich
- Will man in Notfall auf LVM zugreifen braucht man Rescue CDs mit LVM Unterstützung
Die wichtigsten Begriffe
- Physical Volumes (PV) ◊ ist der eigentliche Datenspeicher eines LVMs
- Volume Groups (VG) ◊ ist eine Art Container für ein oder mehrere PV
- Logical Volumes (LV) ◊ ist eine eine Art Partition innerhalb einer Volume Group
LVM in der Praxis. LVM einrichten
Um LVM zu verwenden brauchen wir zuerst eine oder mehrere Festplatten und bei LVM ist es völlig egal, ob wir mit einem oder ohne einen RAID arbeiten. Zum Testen nehmen wir einfach eine z.B. KVM virtuelle Maschine und fügen
zu einem Linux virtuellem Server noch zwei Festplatten. Danach starten wir den virtuellen Server.
Zuerst müssen wir die Festplatten partitionieren. Mit fdisk -l können wir feststellen was für Festplatten in System vorhanden sind. In meinem Fall sind das sda, sdb und sdc. Die sda Festplatte ist schon partitioniert und wird vom System verwendet. Die Festplatten sdb und sdc möchten wir für Daten verwenden.
Zuerst können wir die Festplatten ganz normal partitionieren, mit fdisk bzw. cfdisk. Wenn wir jedoch die ganze Festplatte verwenden möchten, brauchen wir die nicht unbedingt zu Partitionieren, aber für die bessere Übersicht partitioniere ich auch diese. Ich mache ganz einfach aus der ganzen Festplatte eine Partition. Auf der sdb haben wir dann ein Partition sdb1. Auf der sdc erstellen wir zwei Partitionen, sdc1 und sdc2.
Linux-Data:/ # cfdisk /dev/sdb
Linux-Data:/ # cfdisk /dev/sdc
Phyikalische Volumes (PV) werden initialisiert.
Linux-Data:/ # pvcreate /dev/sdb1
Linux-Data:/ # pvcreate /dev/sdc2
Mit pvdislay bzw. mit pvscan können Sie feststellen, welche PV existieren
Linux-Data:/ # pvdisplay
Linux-Data:/ # pvscan
Eine Volume-Gruppe (VG), eine Art eines Container, wird erstellt. In unserem Fall bekommt die VG den Namen vg1 und wird aus zwei PV bestehen. Mit vgdisplay kann man Informationen über alle schon existierende VG erfahren.
Linux-Data:/ # vgcreate vg1 /dev/sdb1 /dev/sdc2
Linux-Data:/ # vgdisplay
Ein logisches Volume (LV) wird erstellen. LV kann man mit eine Partition eines Festplatte vergleichen. Aus diesem Grund, muss man die LV gleich nach der Erstellung noch formatieren. In unserem Fall der Name des LV ist lv1, die Größe ist 15G und sollte aus VG mit dem Namen vg1 entstehen. Die Größe des LV kann nur die maximale Größe des VG haben. Mit mkfs formatieren wir noch die virtuelle Festplatte.
Statt /dev/vg1/lv1 kann man auch /dev/mapper/vg1-lv1 nehmen.
Linux-Data:/ # lvcreate -n lv1 -L 15G vg1
Linux-Data:/ # lvdisplay
Linux-Data:/ # mkfs -t ext4 /dev/vg1/lv1
Jetzt kann man diese Partition mounten und die Daten speichern.
Linux-Data:/ # mount /dev/vg1/lv1 /mnt/data1
Befehle für Physical Volumes (PV)
pvcreate
Erzeugen eines Physical Volumes
pvcreate /dev/sdb1
pvdisplay
Anzeige der Details eines Physical Volumes
pvdiplay bzw. pvdisplay /dev/sdb1
pvscan
Suche nach vorhandenen Physical Volumes
pvscan
pvremove
Eine Physical Volume wird gelöscht
pvremove /dev/sdb1
pvresize
Größeänderung des Physical Volumes
pvresize --setphysicalvolumesize 6G /dev/sdc2
pvmove
Daten von ein PV auf anderes PV verschieben
pvmove -v /dev/sdc2 /dev/sdc1
pvchange
Änderung der Attribute des Physical Volumes
z.B. pvchange -x y /dev/sdc2
Befehle für Volume Groups (VG)
vgcreate
Erstellen aus PVs eine neue VG
vgcreate vg1 /dev/sdb1 /dev/sdc2
vgdisplay
Anzeige der Details einer Volume Group
vgdisplay -v
vgscan
Suche nach vorhandenen Volume Groups
vgscan
vgremove
Löschen einer Volume Group
vgremove vg1
vgextend
Erweitern einer VG um weitere PVs
vgextend vg1 /dev/sdc1
vgreduce
Verkleinern einer VG um leere PV.
Sehe pvmove
vgreduce vg1 /dev/sdc2
vgrename
Umbenennen einer VG
vgrename vg1 vg2
Befehle für Logical Volumes (LV)
lvcreate
Erstellen aus VG ein neues LV
lvcreate -n lv1 -L 8GB vg1
lvdisplay
Anzeige der Details einer Logical Volumes
lvdisplay
lvscan
Suche nach vorhandenen Logical Volumes
lvscan
lvremove
Löschen einer Logical Volumes
lvremove vg1
lvextend
vergrößern einer Logical Volumes
lvextend -L +2G /dev/vg1/lv1
lvreduce
Verkleinern einer Logical Volumes
lvreduce
lvrename
Umbenennen einer LV
lvrename /dev/vg1/lv1 lv2
LVM snapshot - Backup
Der LVM bietet die Möglichkeit, sog. "Snapshot Volumes" anzulegen. Ein LVM Snapshot Volume ist wie eine Kopie eines Logical Volumes, anders könnte man sagen, es ist ein "Einfrieren" des Zustands eines LVs zu einem definierten Zeitpunkt. In der definierten Bereich der Snapshot Größe werden nur die geänderte Daten gespeichert. Nach der Erstellung des LV-Snapshot kann man den Bereich mounten und die Daten speichern. Dadurch entsteht kein Konsistenzproblem. Die Sicherung läuft im laufenden Betrieb. Sind die Daten gesichert, kann man den Shnapshot wieder entfernen. Die Größe des Snapshot ist abhängig von der Größe der Daten die sich ändern. Sie könnten es experimentell festlegen oder nehmenn Sie einfach von 5% - 20% des LV.
Und so sichern wir eine LV Festplatte
Es wird angenommen, dass wir eine VG mit dem Namen vg1 von der Größe 400 GB haben. Danach erstellen wir ein LV mit dem Namen lv1 von der Größe 390GB. Die Restliche 10GB können wir für Snapshot verwenden.
Es wird ein Snapshot der Festplatte lv1 erstellt.
Der Name des Shapshot ist snap_lv1, die Snapshot Größe 10G
Linux-Data:/ # lvcreate -L 10G -s -n snap_lv1 /dev/vg1/lv1
Jetzt kann man den Shnapshot mounten und die Daten ohne bedenken sichern, weil wir einen konsistenten Zustand der Daten jetzt haben. Nach dem Sichern der Daten sollten wir wieder den Shnapshot löschen.
Linux-Data:/ # mount /dev/vg1/snap_lv1 /mnt/datasnapshot_lv1
Linux-Data:/ # cp -a /mnt/datasnapshot_lv1/* /andereServer
Linux-Data:/ # umount /mnt/datasnapshot_lv1
Linux-Data:/ # lvremove /dev/vg1/snap_lv1