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
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".
- apt install gdisk
- 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.
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
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
- echo "LABEL=daten /daten ext4 defaults 0 0" >> /etc/fstab
- mount -a
- systemctl daemon-reload
- 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
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 +10G /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
Quotas auf dem Volume
Der Stapel steht – jetzt bekommt er noch eine Nutzungsgrenze. Ausführlich steht das Thema in Disk Quotas.
- Installation
- apt install -y quota
- Quota-Buchhaltung ins Dateisystem legen
Ältere ext4-Systeme verwalten die Quotas in den Dateien aquota.user und aquota.group im Wurzelverzeichnis. Die liegen außerhalb des Journals und können nach einem Absturz von der Realität abweichen – deshalb der Abgleich mit quotacheck. Moderne ext4-Dateisysteme führen die Buchhaltung stattdessen in versteckten Inodes mit dem Journal mit. Damit entfallen quotacheck und quotaon vollständig.
- umount /daten
- tune2fs -O quota /dev/vgdaten/lvdaten
- mount /daten
- Kontrolle
Im Feature-Eintrag muss jetzt quota stehen:
- tune2fs -l /dev/vgdaten/lvdaten | grep -i features
Und die Quotas sind ohne weiteres Zutun aktiv:
- quotaon -p /daten
- Grenzen setzen
Ein Benutzer bekommt 100 MiB weich und 120 MiB hart. Die Werte stehen in KiB-Blöcken, die beiden Nullen am Ende lassen die Inode-Grenzen offen:
- setquota -u kit 102400 122880 0 0 /daten
Damit er überhaupt schreiben darf:
- mkdir /daten/kit
- chown kit /daten/kit
- Gegen die Wand fahren
Als Benutzer, denn root ist von Quotas ausgenommen:
- su - kit
- dd if=/dev/zero of=/daten/kit/gross.img bs=1M count=200
- exit
Der Schreibvorgang bricht mit Disk quota exceeded ab, die Datei bleibt bei 120 MiB stehen. Übersicht:
- repquota -u /daten
Der wichtige Punkt: Die Quota begrenzt den Benutzer, nicht das Volume. Das Logical Volume hat weiterhin 20 GiB, davon sind 2 GiB durch die Testdatei belegt – die gehört root und zählt gegen keine Quota.
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?