Einführung
In diesem Lab lernen Sie, wie Sie fortgeschrittene Speicherlösungen in einer Linux-Umgebung konfigurieren und verwalten. Sie werden mit zwei leistungsstarken Werkzeugen arbeiten: dem Logical Volume Manager (LVM) für eine flexible Verwaltung von Datenträgern und mdadm für softwarebasiertes RAID (Redundant Array of Independent Disks). Dieses Lab bietet praktische Erfahrung beim Aufbau einer robusten und skalierbaren Speicherinfrastruktur über die Befehlszeile, wobei Loop-Geräte zur Simulation physischer Festplatten verwendet werden.
Sie beginnen mit der Initialisierung von physischen LVM-Volumes und dem Erstellen einer Volume-Gruppe. Danach erstellen, formatieren, hängen Sie ein logisches Volume ein und ändern dessen Größe, um dessen dynamische Natur zu verstehen. Anschließend fahren Sie mit dem Aufbau und dem Einhängen eines RAID 1-Arrays (Spiegelung) zur Datenerredundanz fort. Zum Abschluss des Labs stellen Sie sicher, dass diese Speicherkonfigurationen auch nach einem Systemneustart erhalten bleiben, indem Sie die Dateien /etc/fstab und mdadm.conf anpassen.
LVM mit pvcreate und vgcreate initialisieren
In diesem Schritt beginnen Sie mit der Arbeit mit dem Logical Volume Manager (LVM). LVM ist ein mächtiges Werkzeug zur Verwaltung von Speichergeräten unter Linux. Es fügt eine Abstraktionsebene zwischen Ihren physischen Festplatten und den Dateisystemen hinzu, was flexible Konfigurationen wie das Ändern der Volume-Größe im laufenden Betrieb ermöglicht.
Die Grundbausteine von LVM sind:
- Physical Volumes (PVs): Dies sind Ihre Blockgeräte, wie Festplattenpartitionen oder in unserem Fall simulierte Festplatten.
- Volume Groups (VGs): Dies sind Speicherpools, die durch das Zusammenfassen eines oder mehrerer Physical Volumes entstehen.
- Logical Volumes (LVs): Dies sind die „virtuellen Partitionen“, die Sie aus dem verfügbaren Platz einer Volume-Gruppe erstellen. Auf diesen LVs erstellen Sie später die Dateisysteme.
Stellen Sie zunächst sicher, dass die erforderlichen Werkzeuge lvm2 und mdadm installiert sind.
sudo apt-get update && sudo apt-get install -y lvm2 mdadm
Da wir in dieser Umgebung keine freien physischen Festplatten haben, simulieren wir diese mithilfe von Loop-Geräten. Ein Loop-Gerät ermöglicht es, eine Datei wie ein Blockgerät zu behandeln. Erstellen wir zunächst zwei 256 MB große Dateien in Ihrem Projektverzeichnis, die als unsere Festplatten-Images dienen.
truncate -s 256M disk1.img disk2.img
Überprüfen Sie nun, ob die Dateien mit der korrekten Größe erstellt wurden.
ls -lh
Sie sollten eine Ausgabe ähnlich dieser sehen:
total 0
-rw-r--r-- 1 labex labex 256M Jan 1 12:00 disk1.img
-rw-r--r-- 1 labex labex 256M Jan 1 12:00 disk2.img
Verknüpfen Sie diese Image-Dateien nun mit Loop-Geräten. Wir verwenden dafür /dev/loop20 und /dev/loop21.
sudo losetup /dev/loop20 disk1.img
sudo losetup /dev/loop21 disk2.img
Da wir nun unsere „Festplatten“ (/dev/loop20 und /dev/loop21) haben, können wir sie mit dem Befehl pvcreate als physische LVM-Volumes initialisieren.
sudo pvcreate /dev/loop20 /dev/loop21
Die Ausgabe bestätigt, dass die PVs erfolgreich erstellt wurden:
Physical volume "/dev/loop20" successfully created.
Physical volume "/dev/loop21" successfully created.
Sie können eine Zusammenfassung der Physical Volumes mit pvs anzeigen oder mit pvdisplay eine detailliertere Ansicht erhalten.
sudo pvs
PV VG Fmt Attr PSize PFree
/dev/loop20 lvm2 --- 256.00m 256.00m
/dev/loop21 lvm2 --- 256.00m 256.00m
Nachdem unsere Physical Volumes bereit sind, besteht der nächste Schritt darin, eine Volume-Gruppe namens labvg zu erstellen, die den Speicher beider PVs kombiniert. Dazu verwenden wir den Befehl vgcreate.
sudo vgcreate labvg /dev/loop20 /dev/loop21
Die Erfolgsmeldung lautet:
Volume group "labvg" successfully created
Abschließend inspizieren wir unsere neue Volume-Gruppe mit vgs für eine Übersicht oder vgdisplay für Details.
sudo vgs
Die Ausgabe zeigt unsere Gruppe labvg, die eine Gesamtgröße von etwa 512 MB hat (256 MB von jedem PV).
VG #PV #LV #SN Attr VSize VFree
labvg 2 0 0 wz--n- 512.00m 512.00m
Sie haben nun erfolgreich zwei Geräte als Physical Volumes initialisiert und sie zu einer einzigen Volume-Gruppe zusammengefasst, womit die Grundlage für das Erstellen flexibler Logical Volumes geschaffen ist.
Ein Logical Volume mit lvcreate und mkfs erstellen und einhängen
In diesem Schritt verwenden wir die zuvor erstellte Volume-Gruppe labvg, um ein Logical Volume (LV) zu erstellen. Ein LV ist das LVM-Äquivalent zu einer Partition. Sobald es erstellt ist, können Sie es mit einem Dateisystem formatieren und einhängen (mounten), um es für die Datenspeicherung zugänglich zu machen.
Erstellen wir zunächst ein 200 MB großes Logical Volume namens lablvm aus dem Speicherpool labvg. Wir verwenden den Befehl lvcreate und geben die Größe mit dem Flag -L sowie den Namen mit dem Flag -n an.
sudo lvcreate -L 200M -n lablvm labvg
Sie erhalten eine Bestätigungsmeldung:
Logical volume "lablvm" created.
Sie können Ihr neues LV nun mit dem Befehl lvs anzeigen, der eine Zusammenfassung aller Logical Volumes liefert.
sudo lvs
Die Ausgabe zeigt Ihr neues lablvm innerhalb der Gruppe labvg.
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lablvm labvg -wi-a----- 200.00m
Das neue LV, das als Gerät unter /dev/labvg/lablvm erreichbar ist, ist derzeit ein rohes, unformatiertes Blockgerät. Um Dateien darauf zu speichern, müssen Sie zuerst ein Dateisystem erstellen. Wir verwenden den Befehl mkfs.ext4, um es mit dem gängigen ext4-Dateisystem zu formatieren.
sudo mkfs.ext4 /dev/labvg/lablvm
Der Befehl gibt Details über das erstellte Dateisystem aus:
mke2fs 1.46.5 (30-Dec-2021)
Discarding device blocks: done
Creating filesystem with 51200 4k blocks and 51200 inodes
Filesystem UUID: 28796151-bd37-4cae-a17f-071db8795919
Superblock backups stored on blocks:
32768
Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
Als Nächstes benötigen Sie ein Verzeichnis, das als „Einhängepunkt“ (Mount Point) dient. Dies ist ein leeres Verzeichnis, an dem das Dateisystem des LVs in den Hauptverzeichnisbaum eingegliedert wird. Erstellen wir ein Verzeichnis namens /lablvm im Wurzelverzeichnis.
sudo mkdir /lablvm
Verwenden Sie schließlich den Befehl mount, um das Dateisystem auf Ihrem LV (/dev/labvg/lablvm) mit dem Einhängepunkt (/lablvm) zu verbinden.
sudo mount /dev/labvg/lablvm /lablvm
Um zu bestätigen, dass das Volume erfolgreich eingehängt wurde, und um den verfügbaren Speicherplatz zu prüfen, verwenden Sie den Befehl df -h (disk free, menschenlesbar).
df -h /lablvm
Die Ausgabe zeigt, dass das Gerät eingehängt ist und über etwa 200 MB verfügbaren Speicherplatz verfügt.
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/labvg-lablvm 172M 24K 158M 1% /lablvm
Sie haben nun erfolgreich ein Logical Volume erstellt, formatiert und eingehängt, sodass es einsatzbereit ist.
Die Größe eines LVM Logical Volumes mit lvresize ändern
In diesem Schritt erkunden Sie eine der leistungsstärksten Funktionen von LVM: die Möglichkeit, die Größe eines logischen Volumes und seines Dateisystems zu ändern, während es online und in Gebrauch ist. Diese Flexibilität ist ein großer Vorteil gegenüber herkömmlichen statischen Partitionen.
Bestätigen wir zunächst erneut die aktuelle Größe Ihres eingehängten logischen Volumes mit dem Befehl df -h.
df -h /lablvm
Sie werden sehen, dass das Volume etwa 200 MB groß ist.
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/labvg-lablvm 194M 2.6M 179M 2% /lablvm
Stellen Sie sich nun vor, Ihrer Anwendung auf /lablvm geht der Speicherplatz aus. Sie müssen die Kapazität von 200 MB auf 300 MB erhöhen. Dies können Sie mit dem Befehl lvresize tun. Wir verwenden das Flag -r, das sehr wichtig ist, da es lvresize anweist, auch die Größe des im logischen Volume enthaltenen Dateisystems anzupassen. Ohne dieses Flag würde das Dateisystem seine ursprüngliche Größe behalten und der neue Platz wäre unbrauchbar.
sudo lvresize -r -L 300M /dev/labvg/lablvm
Die Ausgabe zeigt, dass sowohl das logische Volume als auch das Dateisystem vergrößert werden.
Size of logical volume labvg/lablvm changed from 200.00 MiB (50 extents) to 300.00 MiB (75 extents).
Logical volume labvg/lablvm successfully resized.
resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/mapper/labvg-lablvm is mounted on /lablvm; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/mapper/labvg-lablvm is now 76800 (4k) blocks long.
Prüfen Sie den Speicherplatz erneut mit df -h, um die Änderung zu verifizieren.
df -h /lablvm
Das Volume ist nun etwa 300 MB groß.
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/labvg-lablvm 293M 2.6M 275M 1% /lablvm
Manchmal möchten Sie keine neue absolute Größe festlegen, sondern eine bestimmte Menge an Speicherplatz hinzufügen. Fügen wir dem Volume weitere 100 MB hinzu. Dies können Sie tun, indem Sie ein +-Zeichen vor die Größe setzen. Für diese Demonstration verwenden wir jedoch weiterhin die Methode der absoluten Größe, um die Zuverlässigkeit zu gewährleisten.
sudo lvresize -r -L 400M /dev/labvg/lablvm
Sollten Sie während der Größenänderung auf einen Dateisystemfehler stoßen, machen Sie sich keine Sorgen – dies kann gelegentlich bei schnell aufeinanderfolgenden Größenänderungen passieren. In solchen Fällen können Sie das Problem beheben, indem Sie das Dateisystem aushängen, eine Dateisystemprüfung durchführen und es dann wieder einhängen:
## Falls ein Dateisystemfehler auftritt, führen Sie diese Befehle zur Wiederherstellung aus:
## sudo umount /lablvm
## sudo e2fsck -f /dev/labvg/lablvm
## sudo mount /dev/labvg/lablvm /lablvm
Führen Sie schließlich ein letztes Mal df -h aus, um das Endergebnis zu sehen.
df -h /lablvm
Das Volume ist nun etwa 400 MB groß, und der freie Speicherplatz in Ihrer Volume-Gruppe labvg wurde entsprechend reduziert.
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/labvg-lablvm 392M 2.7M 369M 1% /lablvm
Sie haben nun erfolgreich die Größe eines aktiven LVM-Volumes zweimal geändert und damit demonstriert, wie einfach Sie die Speicherzuweisung ohne Ausfallzeiten verwalten können.
Ein RAID 1-Array mit mdadm aufbauen und einhängen
In diesem Schritt verlagern Sie Ihren Fokus von LVM auf eine andere leistungsstarke Speichertechnologie: RAID (Redundant Array of Independent Disks). Sie verwenden das Dienstprogramm mdadm, um ein RAID 1-Array zu erstellen, das auch als Spiegelung (Mirror) bezeichnet wird. In einer RAID 1-Konfiguration werden Daten identisch auf zwei Festplatten geschrieben, was für Redundanz sorgt. Wenn eine Festplatte ausfällt, sind die Daten auf der anderen immer noch sicher.
Zuerst benötigen wir zwei weitere simulierte Festplatten für unser RAID-Array. Erstellen wir zwei neue 256 MB große Festplatten-Image-Dateien, disk3.img und disk4.img, in Ihrem Verzeichnis ~/project.
truncate -s 256M disk3.img disk4.img
Verknüpfen Sie diese neuen Image-Dateien anschließend mit ungenutzten Loop-Geräten, /dev/loop22 und /dev/loop23.
sudo losetup /dev/loop22 disk3.img
sudo losetup /dev/loop23 disk4.img
Jetzt sind Sie bereit, das RAID 1-Array aufzubauen. Wir verwenden den Befehl mdadm, um ein neues RAID-Gerät namens /dev/md0 unter Verwendung unserer beiden Loop-Geräte zu erstellen.
--create /dev/md0: Erstellt ein neues RAID-Gerät namens/dev/md0.--level=1: Gibt das RAID-Level an, in diesem Fall RAID 1 (Spiegelung).--raid-disks=2: Gibt an, dass das Array aus zwei Festplatten bestehen wird./dev/loop22 /dev/loop23: Die Komponenten-Geräte für das Array.
Führen Sie den folgenden Befehl aus:
sudo mdadm --create /dev/md0 --level=1 --raid-disks=2 /dev/loop22 /dev/loop23
Das System wird vor dem Fortfahren um Bestätigung bitten. Geben Sie y ein und drücken Sie die Eingabetaste.
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store '/boot' on this device please ensure that
your boot-loader understands md/v1.x metadata, or use
--metadata=0.90
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
Sie können den Status Ihres neuen RAID-Arrays überprüfen, indem Sie den Inhalt der Datei /proc/mdstat ansehen.
cat /proc/mdstat
Die Ausgabe zeigt, dass /dev/md0 aktiv ist und /dev/loop23 sowie /dev/loop22 verwendet. Möglicherweise sehen Sie auch, dass das Array synchronisiert wird (resync), was normal ist. Das Array ist bereits nutzbar, während dieser Prozess abgeschlossen wird.
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 loop13[1] loop12[0]
261120 blocks super 1.2 [2/2] [UU]
[>....................] resync = 0.4% (1088/261120) finish=0.1min speed=21760K/sec
unused devices: <none>
Genau wie das LVM-Volume benötigt das neue RAID-Gerät /dev/md0 ein Dateisystem. Formatieren wir es mit ext4.
sudo mkfs.ext4 /dev/md0
Erstellen Sie als Nächstes einen Einhängepunkt für das RAID-Array.
sudo mkdir /labraid
Hängen Sie schließlich das RAID-Gerät in das neue Verzeichnis ein.
sudo mount /dev/md0 /labraid
Verifizieren Sie mit df -h, dass das RAID-Array korrekt eingehängt ist.
df -h /labraid
Die Ausgabe bestätigt, dass das Gerät /dev/md0 mit einer Gesamtgröße von etwa 256 MB (da es eine Spiegelung ist) eingehängt und einsatzbereit ist.
Filesystem Size Used Avail Use% Mounted on
/dev/md0 249M 2.6M 234M 2% /labraid
Sie haben erfolgreich ein RAID 1-Array erstellt und eingehängt, das Datenerredundanz für den Einhängepunkt /labraid bietet.
Einhängungen und RAID-Konfiguration mit /etc/fstab und mdadm.conf dauerhaft machen
In diesem letzten Schritt machen Sie Ihre LVM- und RAID-Konfigurationen dauerhaft. Wenn Sie das System jetzt neu starten würden, würde das RAID-Array nicht automatisch wieder zusammengebaut und weder das LVM-Volume noch das RAID-Array würden eingehängt. Um dies zu beheben, müssen Sie zwei wichtige Konfigurationsdateien aktualisieren: /etc/mdadm/mdadm.conf für das RAID-Array und /etc/fstab für die Einhängepunkte.
Kümmern wir uns zuerst um das RAID-Array. Das System muss wissen, wie es /dev/md0 beim Booten wieder zusammenbauen soll. Das Dienstprogramm mdadm kann die erforderliche Konfigurationszeile für Sie generieren.
Führen Sie den folgenden Befehl aus, um das aktive Array zu scannen und seine Konfiguration auszugeben:
sudo mdadm --detail --scan
Die Ausgabe ist eine einzelne Zeile, die Ihr Array beschreibt.
ARRAY /dev/md0 metadata=1.2 name=<hostname>:0 UUID=<some-uuid>
Fügen wir diese Konfiguration nun der mdadm-Konfigurationsdatei hinzu, die sich unter /etc/mdadm/mdadm.conf befindet. Wir leiten die Ausgabe des Scan-Befehls mit tee direkt in die Datei weiter.
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
Sie können überprüfen, ob die Zeile hinzugefügt wurde, indem Sie den Inhalt der Datei anzeigen:
cat /etc/mdadm/mdadm.conf
Als Nächstes müssen Sie dem System mitteilen, dass es Ihre Dateisysteme beim Booten automatisch einhängen soll. Dies geschieht durch Hinzufügen von Einträgen in die Datei /etc/fstab (die Dateisystemtabelle). Jede Zeile in dieser Datei definiert einen Einhängepunkt.
Fügen wir zuerst den Eintrag für Ihr LVM-Volume hinzu. Wir verwenden echo, um die Zeile zu erstellen, und tee -a, um sie mit sudo an /etc/fstab anzuhängen.
echo '/dev/labvg/lablvm /lablvm ext4 defaults 0 0' | sudo tee -a /etc/fstab
Machen Sie nun dasselbe für den Einhängepunkt des RAID-Arrays.
echo '/dev/md0 /labraid ext4 defaults 0 0' | sudo tee -a /etc/fstab
Sie können überprüfen, ob beide Zeilen korrekt hinzugefügt wurden, indem Sie die letzten zwei Zeilen der Datei /etc/fstab anzeigen.
tail -n 2 /etc/fstab
Sie sollten die beiden soeben hinzugefügten Zeilen sehen:
/dev/labvg/lablvm /lablvm ext4 defaults 0 0
/dev/md0 /labraid ext4 defaults 0 0
Um zu testen, ob Ihre /etc/fstab-Einträge korrekt sind, ohne das System neu zu starten, können Sie die Dateisysteme aushängen und dann den Befehl mount -a verwenden, der alle in /etc/fstab aufgeführten Dateisysteme einhängt.
Hängen Sie zuerst beide Volumes aus:
sudo umount /lablvm
sudo umount /labraid
Führen Sie nun mount -a aus, damit das System die /etc/fstab liest und alles einhängt.
sudo mount -a
Verifizieren Sie schließlich mit df -h, dass sie wieder eingehängt sind.
df -h /lablvm /labraid
Die Ausgabe sollte beide Dateisysteme als eingehängt anzeigen, genau wie zuvor.
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/labvg-lablvm 392M 2.7M 369M 1% /lablvm
/dev/md0 249M 2.6M 234M 2% /labraid
Herzlichen Glückwunsch! Sie haben Ihr System erfolgreich so konfiguriert, dass es Ihr RAID-Array automatisch zusammenbaut und sowohl Ihre LVM- als auch Ihre RAID-Dateisysteme beim Booten einhängt.
Zusammenfassung
In diesem Lab haben Sie die Grundlagen der fortgeschrittenen Speicherverwaltung unter Linux mit LVM und Software-RAID gelernt. Sie begannen mit der Simulation physischer Festplatten mittels truncate und losetup und initialisierten diese anschließend mit pvcreate als physische LVM-Volumes (PVs). Diese PVs wurden dann mit vgcreate zu einer Volume-Gruppe (VG) zusammengefasst. Aus diesem Speicherpool haben Sie mit lvcreate ein flexibles logisches Volume (LV) erstellt, es mit mkfs mit einem ext4-Dateisystem formatiert und im System eingehängt. Eine zentrale LVM-Funktion wurde durch die dynamische Größenänderung des LVs mit lvresize und die Erweiterung des Dateisystems mit resize2fs demonstriert.
Darüber hinaus haben Sie mit dem Dienstprogramm mdadm ein Software-RAID 1-Array (Spiegelung) konfiguriert, um Datenerredundanz zu gewährleisten. Nach dem Aufbau des Arrays aus zwei simulierten Festplatten haben Sie es ähnlich wie das LVM-Volume formatiert und eingehängt. Das Lab endete mit der Sicherstellung, dass diese Konfigurationen auch nach Neustarts erhalten bleiben. Dies wurde erreicht, indem die Einhängepunkte für das LVM-Volume und das RAID-Array in die Datei /etc/fstab eingetragen und die Konfigurationsdetails des RAID-Arrays in der Datei /etc/mdadm/mdadm.conf gespeichert wurden.



