Projekt RAID, LVM, Dateisystem
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?