Home.

Technik-Blog

Willkommen auf meinem
Notiz - Blog
Blog

Kmoser's Tech-Blog

Samstag
17
Mai 2014

Ubuntu - LVM einrichten

Für die neue Datensenke hab ich mich entschlossen LVM einzusetzen. LVM steht für Logical Volume Management und bietet ein flexibleres Handling von Partitionen als die traditionelle Variante der Partitionierung. Nicht das ich das unbedingt bräuchte, aber damit umgehen zu können kann ja nicht schaden. Wer weiß wann man es mal braucht :-)

Ein großer Vorteil von LVM ist, dass man viele Operationen im laufenden Betrieb machen kann ohne das System offline nehmen zu müssen. Ich habe gelesen, dass es sogar möglich ist  während des laufenden Betriebs seine Root-Partition auf eine andere Festplatte umziehen und das ohne den Rechner dafür auch nur eine Minute vom Netz nehmen zu müssen.

LVM bietet auch die Möglichkeit Partitionen auf beliebige Festplatten auszudehnen, ähnlich wie bei einem Raid 0. Natürlich gilt dabei auch das gleiche Risiko des Datenverlustes wie bei einem Raid 0 wenn eine der Logical Volumes ein Problem hat. Hat man also ein Logical Volume das über mehrere Festplatten geht immer auf die Datensicherung achten.

Ein richtig Interessantes Feature sind die Snapshots. Damit ist es möglich den Zustand eines Logischen Volumes zu einem bestimmten Zeitpunkt zu speichern und ggf. wiederherzustellen und das ebenfalls im laufenden Betrieb. Das ist zum Einspielen von Updates oder dist-upgrades natürlich Gold wert.

Grundlagen

Grundsätzlich gibt es drei Begriffe, die man kennen und verstehen sollte.

Volume Group

Eine Volume Group ist ein Verbund von physikalischen oder logischen Datenträgern.

Physical Volumes

Unter Physical Volumes versteht man Datenträger wie Festplatten, die Platz bieten um Logical Volumes aufzunehmen.

Logical Volumes

Ein Logical Volume entspricht einer Partition. Diese enthält ein Dateisystem und kann sich über mehrere Physical Volumes erstrecken.

Einrichtung

Die Ubuntu Server Installations CD bietet dem Anwender von vornherein an das System auf eimem LVM zu installieren.

Möchte man weitere Volumes anlegen muss man diese entsprechend vorbereiten. Für diejenigen die mit der Kommandozeile nicht so versiert sind und die die einfach nur zu faul zum tippen sind :-) gibt es eine GUI für die Konfiguration des LVMs:

sudo apt-get install system-config-lvm
sudo system-config-lvm

Im folgenden werden die Schritte auf der Kommandozeile beschrieben:

Physical Volume anlegen

Zuerst muss man die Festplatte vorbereiten. Dazu legt man eine Partition auf der Festplatte an und markiert diese als lvm. In gparted geht das über Rechtsklick -> Markierungen bearbeiten -> lvm und in fdisk setzt man den type auf 8e.

Ist die Partition angelegt muss man diese initialisieren um als Physical Volume verwendet werden zu können. Dies geschieht mit:

sudo pvcreate /dev/sdb1

Damit wird der LVM Header auf die Partition geschrieben, der diese Platte als Physical Volume identifiziert.

Volume Group anlegen

Im Normalfall hat man im einem Rechner nur eine Volume-Group. Das macht Sinn, wenn man nur eine Platte oder ein Festplattenverbund wie ein Raid5 verwendet. Ich verwende einzelne Festplatten und werde daher die Volume Groups in System und Daten unterteilen.

sudo vgcreate data /dev/sdb1

Das erzeugt eine Volume Group mit dem Namen data und beinhaltet genau ein Phyiscal Volume /dev/sdb1.

Logical Volume anlegen

Im Normalfall würde man hergehen und die Festplatten mit größtmöglichen Partitionen versehen. Bei Verwendung eines Festplattenverbunds wie eines Raid5 muss man das nicht. Da die Manipulation an den Partitionen so einfach ist, kann man auch erst mal so viel Partitionieren wie man denkt dass man braucht und den Rest unpartitioniert lassen. Den freien Platz kann man dann entsprechend so vergeben wie sich das System entwickelt.

Da ich in meinem Fall nicht so viele Partitionen habe und Daten und System getrennt habe werde ich allen Platz vollständig verwenden.

sudo lvcreate -n data_1 -l 100%FREE data

Der Parameter -n legt den Namen des Logical Volumes fest und der Parameter -l kann benutzt werden, wenn man eine prozentuale Angabe verwenden möchte, wie hier 100% der noch freien Kapazität in der Volume Group. Alternativ kann man mit dem Parameter -L auch eine Partitionsgröße in kB/MB/GB/TB/PB/EB angeben.

Wieviel Platz in einer Volume Group vorhanden ist lässt sich herausfinden mit:

sudo vgdisplay

Die Blockdevices für die so angelegten Logical Volumes findet man unter /dev/data/data_1 als auch unter /dev/mapper/data-data_1

Informationen zu den Physical Volumes sowie zu den Logical Volumes kann man ähnlich wie bei vgdisplay abrufen. Die Befehle dafür lauten pvdisplay und lvdisplay.

Änderungen an Volume Groups

Im Laufe der Zeit wird immer irgendwo der Speicherplatz knapp. Um darauf reagieren zu können gibt es im folgenden ein paar Erklärungen wie man welche Änderungen an den Volume Groups durchführen kann.

Größe einer Partition ändern

Geht der Platz auf einem Logical Volume zur Neige, und hat man noch Platz in der Volume Group kann man das Volume erweitern mit:

sudo lvextend -L 150G data/data_1

Das erweitert das Logical Volume data_1 aus der Volume Group data auf 150 GB. Damit ist aber nur das Logical Volume vergrößert muss noch das Dateisystem vergrößert werden. Das macht man bei ext3 und ext4 so:

umount /dev/data/data_1
e2fsck -f /dev/data/data_1
sudo resize2fs /dev/data/data_1
mount /dev/data/data_1

Lässt man den fscheck weg geht das auch ohne die Partition aushängen zu müssen.

Analog kann man auch eine Partition verkleinern. Dazu muss erst das Dateisystem und dann das Logical Volume verkleinert werden. Beim verkleinern des Dateisystems die Größe in Blöcken (Bei Ubuntu 14.04 4096 Bytes) angeben. Um also auf 10 GB zu verkleinern 10000000000 Bytes / 4096 Bytes = 2441406.

umount /dev/data/data_1
e2fsck -f /dev/data/data_1
resize2fs /dev/data/data1 2441406
lvreduce -L10G /dev/data/data_1
mount /dev/data/data_1

Damit wird die Partition auf 10 GB verkleinert. Um die Blockgröße der Partition herauszufinden kann man folgenden Befehl verwenden:

sudo dumpe2fs -h /dev/data/data_1 | grep -i "block size"

Leider geht das nicht ohne Unterbrechung des Systems, da man für e2fsck die Partition aushängen muss. Bei der Root Partition muss man das mit einer Live CD machen.

Partitionen verschieben

Noch ein tolles Feature ist das Verschieben von Partitionen. Sollte die Festplatte einmal nicht mehr ausreichen und soll gegen eine größere ersetzt werden, kann man die Partition auf die neue Partition verschieben, ohne das man das System offline nehmen muss. Um das Logical Volume data_1 von /dev/sdb1 zu entfernen und auf /dev/sdc1 zu verschieben benutzt man den Befehl:

sudo pvmove -b -n data_1 /dev/sdb1 /dev/sdc1

Lässt man die Zielangabe /dev/sdc1 weg, werden die normalen Verteilungsstrategien verwendet um die Partitionen an einen anderen freien Speicher zu verschieben. Lässt man den Parameter -n data_1 weg, werden alle Logical Volumes auf /dev/sdb1 verschoben. Der Parameter -b lässt den Vorgang im Hintergrund ablaufen. Den Fortschritt kann man bei Ausführung im Hintergrund mit dem Befehl lvs anzeigen lassen.

Volume Group erweitern

Gibt es innerhalb der Volume-Group keinen freien Speicher mehr, auf dem Logical Volumes angelegt oder vergrößert werden können, muss man eine neue Partition auf einem Physikalischen Datenträger wie z.B. einer Festplatte der Volume Group hinzufügen.

pvcreate /dev/sdc1
vgextend data /dev/sdc1

Um die Volume Group zu verkleinern und eine bestimmte Partition aus der Gruppe zu entfernen muss man diese Partition zuerst leeren. Dazu muss in der Volume Group natürlich genügend freier Speicher vorhanden sein.

sudo pvmove /dev/sdb1

Ist die Partition leer, kann man diese aus der Volume Group entfernen

vgreduce data /dev/sdb1

Snapshots

Wenn ich das richtig verstanden habe erzeugt man für einen Snapshot eines Logical Volumes ein weiteres Logical Volume auf das alle Daten des Ausgangs-Volumes geschrieben werden, bevor diese verändert werden. Ausserdem verhält sich der Snapshot Volume wie ein Klon des Ausgangs-Volumes. Damit hat man auf dem Snapshot Volume sozusagen eine Sicherungskopie des Ausgangs-Volumes.

Das Snapshot-Volume belegt anfangs keinen Speicher, aber je mehr Daten geändert werden um so größer wird das Volume. Läuft das Snapshot-Volume voll ist dieser Snapshot defekt und kann nicht mehr verwendet werden. Man hat dann nur noch das modifizierte Ausgangs-Volume.

Um ein Snapshot Volume mit dem Namen snap vom dem Logical Volume root in der Volume Group system zu erstellen führt man folgendes aus:

sudo lvcreate -s -n snap -l 100%FREE system/root

Das Snapshot Volume snap verfügt jetzt über den gesamten noch freien Speicherplatz. Hat man noch viel freien Speicher kann man auch statt -l 100%FREE mit -L 5G eine 5 GB große Partition erzeugen. Das sollte dann ausreichen um als Sicherung zu dienen wenn man Pakete oder ggf. das ganze System aktualisieren muss.

Man kann die Partition auch mounten um ggf. zu schauen wie das Dateisystem vorher ausgehen hat

sudo mount /dev/sytem/snap /mnt/

Möchte man das Logical Volume snap wieder entfernen:

sudo lvremove /dev/system/snap

Sollte man feststellen, dass z.B. das Upgrade fehlgeschlagen ist oder das System in einen nicht funktionsfähigen Zustand versetzt wird kann man das Upgrade wieder rückgängig machen mit:

sudo lvconvert --merge system/snap

Wenn das Volume system/snap in Verwendung ist, wie es bei einem Snapshot des root Laufwerks der Fall ist muss man das System neu starten, da der Prozess startet, sobald die Volumes das nächste mal aktiviert werden.