mdadm RAID-(Re)Build beschleunigen

Lesedauer: ~4 Minuten

Mdadm ist ein Tool zur Erstellung und Verwaltung von Software-RAIDs unter Debian/Ubuntu und den meisten davon abstammenden Linux-Distributionen. Wer allerdings schon einmal mit mdadm gearbeitet hat, wird bemerkt haben, dass die Erstellung oder gar die Wiederherstellung eines RAIDs sehr viel Zeit in Anspruch nehmen kann. Im Fall von mdadm gibt es allerdings ein paar Feineinstellungen, mit denen sich der Prozess beschleunigen lässt. Den aktuellen Status und vor allem die Geschwindigkeit bei einem (Re)Build Prozess von mdadm kann man übrigens durch den Befehl cat /proc/mdstat erfahren.

Grundsätzlich gilt erst einmal, dass man während dem (Re)Build das RAID soweit wie möglich in Ruhe lassen und keine unnötige Lese- oder Schreibarbeit darauf durchführen sollte. Dies verlangsamt den Prozess nur unnötig. Um nun die Geschwindigkeit zu erhöhen, gibt es zwei Möglichkeiten, welche man natürlich auch parallel einsetzten kann. Die zweite Option eignet sich allerdings nur, wenn man ausreichend freien Arbeitsspeicher zur Verfügung hat.

Option 1: speed_limit_min und speed_limit_max anpassen

Die Namen der beiden Dateien speed_limit_min und speed_limit_max geben eigentlich schon genug Aufschluss darüber, wofür diese eingesetzt werden. Hier kann man die minimale und maximale Arbeitsgeschwindigkeit von mdadm einstellen. Der Wert von speed_limit_min kommt zum Tragen, wenn noch andere Arbeiten auf dem Software-RAID stattfinden. Passend dazu gibt speed_limit_max die obere Grenze an. Beide Dateien liegen in /proc/sys/dev/raid/ und in ihnen werden die Grenzen eingetragen. Am einfachsten ist dies mit dem folgenden Befehl.

echo 50000 > /proc/sys/dev/raid/speed_limit_min
echo 200000 > /proc/sys/dev/raid/speed_limit_max

Die beiden Werte haben sich bei mir als recht erfolgreich erwiesen wenn es darum geht, die Geschwindigkeit bei einem RAID5 beim Rebuildprozess zu erhöhen. Natürlich kann man hier auch etwas mit den Werten herumspielen um den passenden Wert für das eigene System zu finden. Die Werte können während des (Re)Build-Prozess geändert werden und werden auch direkt beachtet und übernommen. Nach einem Neustart des Systems werden diese Werte übrigens wieder auf den Standardwert zurückgesetzt.

Option 2: stripe_cache_size erhöhen

Die zweite Option die man hier in Erwägung ziehen kann, ist die Erhöhung des so genannten stripe_cache_size. Dies kann allerdings sehr schnell zu Lasten des Arbeitsspeichers gehen, weswegen man mit dieser Einstellung vorsichtig umgehen sollte. Zu finden lässt sich die Datei unter /sys/block/RAIDNAME/md/. Wobei RAIDNAME natürlich durch den entsprechenden Namen des RAIDs ersetzt werden muss. Beim ersten RAID unter mdadm sollte der Name md0 sein. Hier ist ein Standardwert von 256 vorgegeben. Auch dieser wird nach dem Neustart des Systems wieder auf den Wert zurückgesetzt.

Bevor man mit dem Wert nun experimentiert, kann man im Voraus den ungefähr benötigten Arbeitsspeicher berechnen. Hierfür nutzt man folgende Formel:

Nötiger Arbeitsspeicher = PAGE_SIZE x ANZAHL_DISKS x STRIPE_CACHE_SIZE

Die PAGE_SIZE kann man mit dem Terminal-Befehl getconf PAGE_SIZE ermitteln. Bei den meisten Systemen sollte dies allerdings dem Wert 4096 entsprechen.

Rechnungsbeispiel für ein RAID5 mit 5 Festplatten und den Standardwerten:

Nötiger freier Arbeitsspeicher = 4096 x 5 x 256 = 5242880 = 5,24MB

mdadm geht normalerweise recht sparsam mit dem Arbeitsspeicher um. Hier kann man nun natürlich zu höheren Werten greifen. In Normalfall ist eine stripe_cache_size von 16, bzw. 32MB mehr als ausreichend. Der Verbrauch des Arbeitsspeichers schießt hier auch schnell in die Höhe.

Rechnungsbeispiel für ein RAID5 mit 5 Festplatten und 16MB stripe_cache_size:

Arbeitsspeicher = 4096 x 5 x 16384 = 336MB

Möchte man nun die stripe_cache_size erhöhen, so kann man dies Beispielweise mit den folgenden Befehlen tun.

echo 16384 > /sys/block/md0/md/stripe_cache_size

Letztendlich muss man hier einfach mit den Werten ein bisschen experimentieren, um ein gutes Mittel zwischen Geschwindigkeit und Auslastung des Systems zu finden. Wenn man sich aber ein paar Minuten damit beschäftigt, kann man durchaus den (Re)Build Prozess von mdadm um einiges beschleunigen. Vorteilhaft ist hier wirklich, dass alle Änderungen an den Werten direkt beim laufenden Prozess übernommen werden und man damit direkt sehen kann, ob sich etwas bei der Geschwindigkeit getan hat.