RAID- und LVM-Speicher unter Linux konfigurieren

CompTIABeginner
Jetzt üben

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.