RAID- und LVM-Speicher unter Linux konfigurieren

LinuxLinuxBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einleitung

In diesem Lab lernen Sie, wie Sie erweiterte Speicherlösungen in einer Linux-Umgebung konfigurieren und verwalten. Sie werden mit zwei leistungsstarken Werkzeugen arbeiten: dem Logical Volume Manager (LVM) für flexibles Volume-Management und mdadm für softwarebasierte Redundant Array of Independent Disks (RAID). Dieses Lab bietet praktische, hands-on Erfahrung bei der Einrichtung einer robusten und skalierbaren Speicherinfrastruktur über die Kommandozeile, wobei Loop-Devices zur Simulation physischer Festplatten verwendet werden.

Sie beginnen mit der Initialisierung von LVM Physical Volumes und der Erstellung einer Volume Group. Als Nächstes erstellen, formatieren, mounten und vergrößern Sie ein Logical Volume, um dessen dynamische Natur zu verstehen. Anschließend bauen und mounten Sie ein RAID 1 (Mirroring)-Array für Datenredundanz. Zum Abschluss des Labs stellen Sie sicher, dass diese Speicher-Konfigurationen über Systemneustarts hinweg persistent sind, indem Sie die Dateien /etc/fstab und mdadm.conf modifizieren.

LVM mit pvcreate und vgcreate initialisieren

In diesem Schritt beginnen Sie mit der Arbeit am Logical Volume Manager (LVM). LVM ist ein leistungsstarkes Werkzeug zur Verwaltung von Speichergeräten unter Linux. Es fügt eine Abstraktionsebene zwischen Ihren physischen Festplatten und den Dateisystemen ein, was flexiblere Konfigurationen wie die dynamische Größenänderung von Volumes ermöglicht.

Die grundlegenden Bausteine von LVM sind:

  • Physical Volumes (PVs): Dies sind Ihre Blockgeräte, wie z. B. Festplattenpartitionen oder in unserem Fall simulierte Festplatten.
  • Volume Groups (VGs): Dies sind Speicherpools, die durch Gruppierung eines oder mehrerer Physical Volumes erstellt werden.
  • Logical Volumes (LVs): Dies sind die "virtuellen Partitionen", die Sie aus dem in einer Volume Group verfügbaren Speicherplatz erstellen. Auf diesen LVs werden Sie Dateisysteme erstellen.

Zuerst stellen wir sicher, dass die notwendigen 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, werden wir sie mithilfe von Loop-Devices simulieren. Ein Loop-Device ermöglicht es, eine Datei als Blockgerät zu behandeln. Beginnen wir damit, zwei 256MB-Dateien in Ihrem Projektverzeichnis zu erstellen, die als unsere Festplatten-Images dienen werden.

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

Als Nächstes ordnen wir diese Image-Dateien Loop-Devices zu. Wir werden /dev/loop20 und /dev/loop21 verwenden.

sudo losetup /dev/loop20 disk1.img
sudo losetup /dev/loop21 disk2.img

Nachdem wir nun unsere "Festplatten" (/dev/loop20 und /dev/loop21) haben, können wir sie mit dem Befehl pvcreate als LVM Physical 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 oder eine detailliertere Ansicht mit pvdisplay anzeigen.

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 Group namens labvg zu erstellen, die den Speicherplatz beider PVs kombiniert. Dazu verwenden wir den Befehl vgcreate.

sudo vgcreate labvg /dev/loop20 /dev/loop21

Die erfolgreiche Ausgabe wird lauten:

  Volume group "labvg" successfully created

Schließlich inspizieren wir unsere neue Volume Group mit vgs für eine Zusammenfassung oder vgdisplay für Details.

sudo vgs

Die Ausgabe zeigt unsere Gruppe labvg, die eine Gesamtgröße von ungefähr 512MB (jeweils 256MB von jedem PV) hat.

  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 Group zusammengefasst, was die Grundlage für die Erstellung flexibler Logical Volumes bildet.

Erstellen und Mounten eines Logical Volume mit lvcreate und mkfs

In diesem Schritt verwenden Sie die zuvor erstellte Volume Group labvg, um ein Logical Volume (LV) zu erstellen. Ein LV ist das LVM-Äquivalent einer Partition. Nach der Erstellung können Sie es mit einem Dateisystem formatieren und mounten, um es für die Datenspeicherung zugänglich zu machen.

Zuerst erstellen wir ein 200MB großes Logical Volume namens lablvm aus dem Speicherpool labvg. Wir verwenden den Befehl lvcreate, wobei wir die Größe mit dem Flag -L und den Namen mit dem Flag -n angeben.

sudo lvcreate -L 200M -n lablvm labvg

Sie sehen eine Bestätigungsnachricht:

  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 zugänglich ist, ist derzeit ein rohes, unformatiertes Blockgerät. Um darauf Dateien 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 "Mount Point" dient. Dies ist ein leeres Verzeichnis, in dem das Dateisystem des LV in den Hauptverzeichnisbaum eingehängt wird. Erstellen wir ein Verzeichnis namens /lablvm im Stammverzeichnis.

sudo mkdir /lablvm

Verwenden Sie schließlich den Befehl mount, um das Dateisystem auf Ihrem LV (/dev/labvg/lablvm) an den Mount Point (/lablvm) anzuhängen.

sudo mount /dev/labvg/lablvm /lablvm

Um zu bestätigen, dass das Volume erfolgreich gemountet wurde und um den verfügbaren Speicherplatz zu überprüfen, verwenden Sie den Befehl df -h (disk free, human-readable).

df -h /lablvm

Die Ausgabe zeigt, dass das Gerät gemountet ist und etwa 200MB Speicherplatz zur Verfügung hat.

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 gemountet, sodass es einsatzbereit ist.

Ändern der Größe eines LVM Logical Volume mit lvresize

In diesem Schritt erkunden Sie eine der leistungsfähigsten Funktionen von LVM: die Möglichkeit, ein Logical Volume und sein Dateisystem 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 Sie zunächst die aktuelle Größe Ihres gemounteten Logical Volume mit dem Befehl df -h.

df -h /lablvm

Sie sehen, dass das Volume etwa 200MB groß ist.

Filesystem                Size  Used Avail Use% Mounted on
/dev/mapper/labvg-lablvm  194M  2.6M  179M   2% /lablvm

Stellen Sie sich nun vor, Ihre Anwendung, die auf /lablvm läuft, geht der Speicherplatz aus. Sie müssen ihre Kapazität von 200MB auf 300MB erhöhen. Dies können Sie mit dem Befehl lvresize tun. Wir verwenden das Flag -r, was sehr wichtig ist, da es lvresize anweist, auch das im Logical Volume enthaltene Dateisystem zu vergrößern. Ohne dieses Flag würde das Dateisystem seine ursprüngliche Größe beibehalten, und der neue Speicherplatz wäre unbrauchbar.

sudo lvresize -r -L 300M /dev/labvg/lablvm

Die Ausgabe zeigt, dass sowohl das Logical 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.

Überprüfen Sie den Speicherplatz erneut mit df -h, um die Änderung zu verifizieren.

df -h /lablvm

Das Volume ist nun etwa 300MB 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 einen bestimmten Speicherplatz hinzufügen. Dies können Sie tun, indem Sie ein +-Zeichen vor der Größe verwenden. Für diese Demonstration verwenden wir die Methode der absoluten Größe, um die Zuverlässigkeit zu gewährleisten.

sudo lvresize -r -L 400M /dev/labvg/lablvm

Wenn Sie bei Größenänderungsoperationen auf einen Dateisystemfehler stoßen, machen Sie sich keine Sorgen – dies kann gelegentlich bei schnellen aufeinanderfolgenden Größenänderungen vorkommen. In solchen Fällen können Sie sich erholen, indem Sie das Dateisystem unmounten, eine Dateisystemprüfung durchführen und es dann wieder mounten:

## Wenn Sie einen Dateisystemfehler erhalten, führen Sie diese Wiederherstellungsbefehle aus:
## sudo umount /lablvm
## sudo e2fsck -f /dev/labvg/lablvm
## sudo mount /dev/labvg/lablvm /lablvm

Führen Sie abschließend ein letztes Mal df -h aus, um das Endergebnis zu sehen.

df -h /lablvm

Das Volume ist nun etwa 400MB groß, und der freie Speicherplatz in Ihrer labvg Volume Group wurde entsprechend reduziert.

Filesystem                Size  Used Avail Use% Mounted on
/dev/mapper/labvg-lablvm  392M  2.7M  369M   1% /lablvm

Sie haben nun erfolgreich ein Live-LVM-Volume zweimal vergrößert und damit demonstriert, wie einfach Sie die Speicherzuweisung ohne Ausfallzeiten verwalten können.

Erstellen und Mounten eines RAID 1 Arrays mit mdadm

In diesem Schritt verlagern wir unseren Fokus von LVM auf eine weitere leistungsstarke Speichertechnologie: RAID (Redundant Array of Independent Disks). Sie verwenden das Dienstprogramm mdadm, um ein RAID 1 Array zu erstellen, auch bekannt als Spiegelung. In einer RAID 1-Konfiguration werden Daten identisch auf zwei Festplatten geschrieben, was Redundanz bietet. 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 256MB große Festplatten-Image-Dateien, disk3.img und disk4.img, in Ihrem ~/project-Verzeichnis.

truncate -s 256M disk3.img disk4.img

Verknüpfen Sie als Nächstes diese neuen Image-Dateien mit ungenutzten Loop-Geräten, /dev/loop22 und /dev/loop23.

sudo losetup /dev/loop22 disk3.img
sudo losetup /dev/loop23 disk4.img

Nun sind Sie bereit, das RAID 1 Array zu erstellen. 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 die RAID-Stufe an, in diesem Fall RAID 1 (Spiegelung).
  • --raid-disks=2: Gibt an, dass das Array aus zwei Festplatten besteht.
  • /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 fragt vor der Fortsetzung nach einer Bestätigung. Geben Sie y ein und drücken Sie Enter, um fortzufahren.

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 die Datei /proc/mdstat anzeigen.

cat /proc/mdstat

Die Ausgabe zeigt, dass /dev/md0 aktiv ist und /dev/loop23 und /dev/loop22 verwendet. Möglicherweise sehen Sie auch, dass das Array synchronisiert wird (resync), was normal ist. Das Array ist auch während des Abschlusses dieses Prozesses nutzbar.

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 Mount Point für das RAID-Array.

sudo mkdir /labraid

Mounten Sie schließlich das RAID-Gerät in das neue Verzeichnis.

sudo mount /dev/md0 /labraid

Verifizieren Sie mit df -h, dass das RAID-Array korrekt gemountet ist.

df -h /labraid

Die Ausgabe bestätigt, dass das Gerät /dev/md0 mit einer Gesamtgröße von etwa 256MB (da es sich um eine Spiegelung handelt) gemountet 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 gemountet, das Redundanz für den Mount Point /labraid bietet.

Persistente Mounts und RAID-Konfiguration mit /etc/fstab und mdadm.conf

In diesem letzten Schritt machen Sie Ihre LVM- und RAID-Konfigurationen dauerhaft. Derzeit würde beim Neustart des Systems das RAID-Array nicht automatisch neu zusammengesetzt, und weder das LVM-Volume noch das RAID-Array würden gemountet. 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 Mount Points.

Zuerst kümmern wir uns um das RAID-Array. Das System muss wissen, wie /dev/md0 beim Booten neu zusammengesetzt werden kann. Das Dienstprogramm mdadm kann die notwendige 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 nun diese Konfiguration zur mdadm-Konfigurationsdatei hinzu, die sich unter /etc/mdadm/mdadm.conf befindet. Wir leiten die Ausgabe des Scan-Befehls mit tee direkt in die Datei um.

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 Ihre Dateisysteme beim Booten automatisch gemountet werden sollen. Dies geschieht durch Hinzufügen von Einträgen zu /etc/fstab (der Dateisystemtabelle). Jede Zeile in dieser Datei definiert einen Mount Point.

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

Führen Sie nun dasselbe für den Mount Point des RAID-Arrays durch.

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 beiden Zeilen der Datei /etc/fstab anzeigen.

tail -n 2 /etc/fstab

Sie sollten die beiden Zeilen sehen, die Sie gerade hinzugefügt haben:

/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 neu zu starten, können Sie die Dateisysteme unmounten und dann den Befehl mount -a verwenden, der alle in /etc/fstab aufgeführten Dateisysteme mountet.

Unmounten Sie zuerst beide Volumes:

sudo umount /lablvm
sudo umount /labraid

Führen Sie nun mount -a aus, damit das System /etc/fstab liest und alles mountet.

sudo mount -a

Überprüfen Sie abschließend mit df -h, ob sie wieder gemountet sind.

df -h /lablvm /labraid

Die Ausgabe sollte beide gemounteten Dateisysteme 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 konfiguriert, um Ihr RAID-Array automatisch zusammenzusetzen und sowohl Ihre LVM- als auch Ihre RAID-Dateisysteme beim Booten zu mounten.

Zusammenfassung

In diesem Lab haben Sie die Grundlagen des fortgeschrittenen Speichermanagements unter Linux mit LVM und Software-RAID kennengelernt. Sie haben damit begonnen, physische Festplatten mit truncate und losetup zu simulieren, und sind dann dazu übergegangen, sie mit pvcreate als LVM Physical Volumes (PVs) zu initialisieren. Diese PVs wurden dann mit vgcreate zu einer Volume Group (VG) zusammengefasst. Aus diesem Speicherpool haben Sie mit lvcreate ein flexibles Logical Volume (LV) erstellt, es mit mkfs mit einem ext4-Dateisystem formatiert und es im System gemountet. Eine wichtige LVM-Funktion wurde demonstriert, indem das LV dynamisch mit lvresize vergrößert und das Dateisystem mit resize2fs erweitert wurde, um den neuen Speicherplatz zu nutzen.

Darüber hinaus haben Sie ein Software-RAID 1 (Spiegelung) Array mit dem Dienstprogramm mdadm konfiguriert, um Datenredundanz zu gewährleisten. Nach dem Erstellen des Arrays aus zwei simulierten Festplatten haben Sie es ähnlich wie das LVM-Volume formatiert und gemountet. Das Lab endete damit, die Persistenz dieser Konfigurationen über Neustarts hinweg sicherzustellen. Dies wurde erreicht, indem die Mount Points sowohl für das LVM-Volume als auch für das RAID-Array zu /etc/fstab hinzugefügt und die Konfigurationsdetails des RAID-Arrays in /etc/mdadm/mdadm.conf gespeichert wurden.