Projekt RAID, LVM, Dateisystem

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

In diesem Kapitel entsteht der Aufbau, den man auf einem echten Server vorfindet: mehrere Platten werden zu einem RAID zusammengefasst, darüber liegt LVM für die flexible Aufteilung, und ganz oben sitzt das Dateisystem. Die einzelnen Werkzeuge sind in Raid, LVM, Ext4 Dateisystem und XFS beschrieben – hier werden sie zusammengesetzt.

Der Aufbau wird zunächst unter Debian mit ext4 vorgeführt. Die anschließende Aufgabe baut denselben Stapel unter Rocky mit XFS.

Die drei Schichten

Schicht Gerät Werkzeug
Dateisystem /dev/vgdaten/lvdaten mkfs.ext4 / mkfs.xfs
LVM /dev/md0 als PV pvcreate, vgcreate, lvcreate
RAID /dev/sdb1 bis /dev/sde1 mdadm
Platten /dev/sdb bis /dev/sde, je 25 GiB gdisk

Die Reihenfolge ist entscheidend: LVM liegt über dem RAID. Nur so sieht LVM ein einziges, bereits abgesichertes Gerät. Läge es darunter, träfe der Ausfall einer Platte die Volume Group direkt.

RAID 10 verträgt den Ausfall einer Platte je Spiegelpaar – unter Umständen also zwei. Fallen beide Platten desselben Paares aus, ist das Array verloren.

Debian: RAID 10 mit LVM und ext4

Vorbereitung

Auf den Platten liegen noch die Dateisysteme aus den vorherigen Kapiteln. Sind sie gemountet, zuerst aushängen.

Signaturen entfernen:

  • wipefs -a /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

Jede Platte bekommt eine Partition, die fast die ganze Platte einnimmt. So macht man es auch in der Praxis: Das RAID liefert eine große Fläche, aufgeteilt wird oben mit LVM – nicht unten mit der Partitionstabelle.

Die letzten 500 MiB bleiben bewusst frei. Ersatzplatten desselben Nennwerts fallen je nach Hersteller minimal kleiner aus; ohne diese Reserve passt eine neue Platte dann nicht mehr ins Array. Die Angabe -500M als letzter Sektor bedeutet „500 MiB vor dem Ende".

  • gdisk /dev/sdb
Command: n
Partition number: 1
First sector: [Enter]
Last sector: -500M
Hex code: fd00
Command: w

Ebenso für /dev/sdc, /dev/sdd und /dev/sde. Alle vier Partitionen müssen gleich groß sein – mdadm rechnet sonst mit der kleinsten, der Rest ist verschenkt.

Kontrolle:

  • lsblk

Das Array anlegen

Die geschweiften Klammern sind eine Kurzschreibweise der Shell und ergeben /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1.

  • mdadm -C /dev/md0 -l 10 -n 4 /dev/sd{b,c,d,e}1

Status ansehen:

  • cat /proc/mdstat
md0 : active raid10 sde1[3] sdd1[2] sdc1[1] sdb1[0]
      51280896 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
      [====>................]  resync = 22.3% (11445632/51280896) finish=6.2min speed=106284K/sec

Aus 4 × 24,5 GiB werden rund 49 GiB netto – die Hälfte geht für die Spiegel drauf.

Der Resync läuft im Hintergrund. Das Array ist sofort benutzbar; alle folgenden Schritte können währenddessen ausgeführt werden. Nur Geschwindigkeitsmessungen sind erst danach aussagekräftig. Fortschritt beobachten:

  • watch cat /proc/mdstat

Das Array dauerhaft benennen

Ohne Eintrag kann das Array nach einem Neustart unter einem anderen Namen erscheinen.

  • sed -i '/^ARRAY/d' /etc/mdadm/mdadm.conf
  • mdadm -Ds >> /etc/mdadm/mdadm.conf
  • update-initramfs -u

LVM darüber

Ab hier ist /dev/md0 ein Blockgerät wie jedes andere. LVM merkt nicht, dass darunter vier Platten liegen.

  • pvcreate /dev/md0
  • pvs
  • vgcreate vgdaten /dev/md0
  • vgs

Ein Logical Volume über 20 GiB – der Rest der Volume Group bleibt bewusst frei, damit später erweitert werden kann:

  • lvcreate -L 20G -n lvdaten vgdaten
  • lvs

Dateisystem und Mountpoint

  • mkfs.ext4 -L daten /dev/vgdaten/lvdaten
  • mkdir /daten
  • mount /dev/vgdaten/lvdaten /daten
  • df -h /daten

Den ganzen Stapel ansehen

Zeigt alle Schichten übereinander – Platten, Partitionen, Array, Volume:

  • lsblk
NAME                  MAJ:MIN RM  SIZE RO TYPE   MOUNTPOINTS
sdb                     8:16   0   25G  0 disk  
└─sdb1                  8:17   0 24,5G  0 part  
  └─md0                 9:0    0   49G  0 raid10
    └─vgdaten-lvdaten 253:0    0   20G  0 lvm    /daten
sdc                     8:32   0   25G  0 disk  
└─sdc1                  8:33   0 24,5G  0 part  
  └─md0                 9:0    0   49G  0 raid10
    └─vgdaten-lvdaten 253:0    0   20G  0 lvm    /daten

Dauerhaft mounten

In der /etc/fstab wird nicht der Gerätename verwendet, sondern die UUID des Dateisystems. UUID ermitteln:

  • blkid /dev/vgdaten/lvdaten

Eintrag in /etc/fstab:

UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  /daten  ext4  defaults  0 2

Testen, ohne neu zu starten – mount -a hängt alles aus der fstab ein. Ein Fehler hier hätte beim nächsten Boot die Notfall-Shell zur Folge:

  • umount /daten
  • mount -a
  • df -h /daten

Nach jeder Änderung an der fstab:

  • systemctl daemon-reload

Testdaten

  • dd if=/dev/zero of=/daten/test.img bs=1M count=2048 status=progress
  • df -h /daten
  • md5sum /daten/test.img

Ausfall und Rebuild

Eine Platte als defekt markieren, als wäre sie gestorben:

  • mdadm /dev/md0 -f /dev/sdc1
  • cat /proc/mdstat

Im Status steht jetzt [4/3] und [U_UU] – ein Mitglied fehlt. Das Dateisystem bleibt dabei nutzbar:

  • ls -lh /daten
  • md5sum /daten/test.img

Die defekte Platte entfernen und wieder einbauen:

  • mdadm /dev/md0 --remove /dev/sdc1
  • mdadm /dev/md0 -a /dev/sdc1
  • watch cat /proc/mdstat

Der Rebuild läuft über 24,5 GiB und dauert entsprechend – gut zu sehen an der Restzeit im Statusbalken. Solange er läuft, ist das Array nicht redundant.

Vergrößern im laufenden Betrieb

Der freie Platz in der Volume Group wird dem Volume zugeschlagen:

  • vgs
  • lvextend -L 40G /dev/vgdaten/lvdaten

Das Dateisystem sieht davon noch nichts:

  • df -h /daten

Nachziehen – bei ext4 auf dem Gerät:

  • resize2fs /dev/vgdaten/lvdaten
  • df -h /daten

Die Testdatei ist unverändert:

  • md5sum /daten/test.img

Aufgabe: derselbe Aufbau unter Rocky mit XFS

Bauen Sie auf der Rocky-Maschine denselben Stapel – vier Platten, RAID 10, LVM, Dateisystem –, diesmal aber mit XFS. Achten Sie auf die Stellen, an denen sich Rocky von Debian unterscheidet.

Hinweis: Der Resync nach dem Anlegen läuft im Hintergrund. Warten Sie nicht darauf, sondern arbeiten Sie weiter.

Vorbereiten

  • Entfernen Sie die Dateisystem-Signaturen auf den ersten Partitionen von /dev/sdb bis /dev/sde.
  • Legen Sie auf jeder der vier Platten eine Partition vom Typ fd00 an, die 500 MiB vor dem Plattenende endet.
  • Warum lässt man die letzten 500 MiB frei?

RAID

  • Legen Sie aus den vier Partitionen ein RAID 10 als /dev/md0 an.
  • Lassen Sie sich den Status anzeigen. Wie groß ist das Array netto und warum?
  • Tragen Sie das Array in die Konfigurationsdatei ein und ziehen Sie die Initramfs nach. Achtung: Pfad und Werkzeug heißen auf Rocky anders als auf Debian.

LVM

  • Machen Sie das Array zum Physical Volume.
  • Legen Sie die Volume Group "vgdaten" an.
  • Legen Sie darin ein 20 GiB großes Logical Volume "lvdaten" an.
  • Wie viel Platz ist in der Volume Group noch frei?

Dateisystem

  • Legen Sie ein XFS-Dateisystem mit dem Label "daten" an.
  • Sehen Sie sich in der mkfs-Ausgabe die Werte sunit und swidth an. Woher kommen sie?
  • Hängen Sie das Dateisystem unter /daten ein.
  • Lassen Sie sich alle Schichten übereinander anzeigen.

Dauerhaft mounten

  • Ermitteln Sie die UUID des Dateisystems.
  • Tragen Sie es mit der UUID in die /etc/fstab ein und testen Sie den Eintrag, ohne neu zu starten.

Ausfall

  • Legen Sie eine 2 GiB große Testdatei an und merken Sie sich ihre Prüfsumme.
  • Lassen Sie /dev/sdc1 ausfallen und prüfen Sie, ob die Datei noch lesbar ist.
  • Entfernen Sie die Platte und bauen Sie sie wieder ein. Beobachten Sie den Rebuild.

Vergrößern

  • Vergrößern Sie das Logical Volume auf 40 GiB.
  • Ziehen Sie das Dateisystem nach. Achtung: XFS wird anders angesprochen als ext4.
  • Prüfen Sie das Ergebnis und die Prüfsumme der Testdatei.

Zum Nachdenken

  • Nennen Sie die drei Stellen, an denen sich der Ablauf auf Rocky von dem auf Debian unterscheidet.
  • Das Volume ist zu groß geraten und soll wieder auf 20 GiB verkleinert werden. Wie gehen Sie vor?
  • Warum liegt LVM über dem RAID und nicht darunter?