HDD-Benchmark für die bash, selbstgeschrieben

Auf Basis des Festplatten-Geschwindigkeitstests bei den Ubuntuusers.de habe ich ein Script geschrieben, welches das Testen der Schreibgeschwindigkeit vereinfacht. Grundlage ist dabei folgender Code

dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc

Es wird hierbei das Laufwerk getestet, wo man sich gerade befindet. Hier wird auch die Datei „tempfile“ geschrieben. Achtet bitte darauf, dass vor dem Starten des Scriptes genügend Platz auf dem Datenträger vorhanden ist. Diese Datei hat in diesem Fall hier eine Größe von 1024 mal 1 MB. Es wird insgesamt 1024-mal komplett in diese Datei geschrieben. Man benötigt für diesen Durchlauf 1024 x 1024 x 1024 x 1024 Bytes Platz, also etwa 1,1 GB. Die Werte können durchaus angepasst werden. So kann man zum Beispiel für 256 MB die Werte bs=32M und count=8 angeben.

Die Schreibgeschwindigkeit per dd zu ‚messen‘ ist natürlich auch abhängig von anderen Faktoren, wie Systemauslastung, Anwendungen, die ebenfalls auf die Platte zugreifen und natürlich das verwendete Dateisystem. Daher sollte man so einen Durchlauf mehrfach starten, damit man einen Durchschnittswert erhält, der repräsentativer als ein Einzelwert ist.

Das Ganze macht das von mir geschrieben bash-Script, wobei ihr beim Aufruf des Scriptes nur die gewünschte Menge an Daten angeben werden braucht. Es werden dabei Dateigrößen von 1, 2, 4, 8 und 16 MB durchgetestet und die Anzahl entsprechend angepasst.

Gibt man also hddbench.sh 1024 an, so werden im ersten Teil fünf Durchläufe mit 1 MB großen Dateien gemacht, und zwar 1024 mal. Im zweiten Teil 512 mal 2MB große Dateien. Und so weiter. Das heißt, es laufen für eine Dateigröße immer 25 dd-Aufrufe ab. Es werden im Laufe des Scriptes alle Geschwindigkeiten zusammengerechnet und durch die Anzahl der Durchläufe geteilt. Et voilà. Ein relativ repräsentatives Ergebnis. Zwischendrin noch ein paar Echos, damit das Ganze etwas ansehnlicher ist.

Das fertige Script sieht so aus:

#!/bin/bash

# Header
echo -e "\n +-----------------------------------+"
echo -e " | Benchmark mit dd |"
echo -e " | Es werden 25 Tests laufen |"
echo -e " | (c) 2013 Ralf Meyer wandpapier.de |"
echo -e " +-----------------------------------+\n"

fileSize=$1

COUNTER=0
fullSpeed="0"
for partSize in 1 2 4 8 16
do
if [ $partSize -le $fileSize ]; then # nur ausführen, wenn Größe eines Parts größer gleich Dateigröße ist
parts=$(($fileSize/$partSize)) # Anzahl der Teile
echo -e -n " 5 Durchläufe mit $fileSize MB großer Datei bestehend aus $parts Dateisätzen zu je $partSize MB"
echo -e -n "\t[ ]\b\b\b\b\b\b"
for i in {1..5}; # Schleife je 5 Durchläufen
do
echo -e -n "."
run="dd if=/dev/zero of=tempfile bs=${partSize}M count=$parts conv=fdatasync,notrunc" # eigentlicher Benchmark
$($run 2> result.hdb); # ausführen und in Datei result.hdb schreiben
result=`cat result.hdb | grep MB/s | cut -d ' ' -f 8 | tr , .` # Datei auswerten
runBC="$fullSpeed+$result"
fullSpeed=$(echo $runBC | bc) # Geschwindigkeit zusammenrechnen
COUNTER=$((COUNTER+1))
done
echo -e -n "\n"
fi
done

# Footer
lastBC="scale=2;$fullSpeed/$COUNTER" # Geschwindigkeit durch Anzahl der Durchläufe
echo -e "\n +--------------------------------------------+"
echo -e -n " | Durchschittliche Schreibrate: |\b\b\b\b\b\b\b\b\b\b\b\b\b\b" # Einrücken
echo -e -n $(echo "$lastBC" | bc)" MB/s"
echo -e "\n +--------------------------------------------+"

Verzeiht, wenn ich noch nicht alle Gepflogenheiten des ordentlichen bash-Scriptings drauf habe, das war mein zweites Script in der Form beziehungsweise Größe. Aber für mich ist dieses Script vollkommen ausreichend um verschiedene Festplatten zu testen.

Quellen:

 


Beitrag veröffentlicht

in

,

von

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert