
Ich versuche, die beste Vorgehensweise für ein Skript zu finden, das Folgendes tut:
- Erstellen Sie ein Loop-Skript, das mit dd eine 10 GB große Datei erstellt und nach Abschluss die Datei entfernt. Anschließend wird der Vorgang 25 Mal wiederholt oder wenn STRG+C eingegeben wird, bevor das Skript beendet werden kann.
- Am Ende jeder Operation, also dd, dann rm, messen Sie die Zeit, damit wir genau wissen, wie lange dd und rm gedauert haben
Bisher denke ich ungefähr so:
for i in {1..25}
do
time sh -c "dd if=/dev/zero of=/user/home/test.img bs=10G count=1" >> /tmp/dd_timed.txt && time sh -c "rm -f /user/home/test.img" >> rm_timed.txt
done
Hat jemand eine bessere Lösung oder könnte das vielleicht ein wenig optimieren?
Antwort1
Ok, also so sieht es aus, als ob man das so hinbekommt. Sieht eklig aus, funktioniert aber:
#!/bin/bash
for i in {1..25}
do
{ time dd if=/dev/zero of=/home/user/test.img bs=1G count=10 oflag=direct >& / dev/null ; } 2>> /tmp/dd_timed.txt && { time rm /home/user/test.img >& /dev/null ; } 2>> /tmp/rm_timed.txt
done
Antwort2
Es kann interessant sein, die Zeit zu vergleichen, die
time ( dd if=/dev/zero of=/tmp/test.img bs=1M count=1024; sync )
Und
time ( dd if=/dev/zero of=/tmp/test.img bs=1M count=1024 oflag=direct;sync )
Sie sollten dies einbeziehen sync
, um die Zeit zu messen, die zum Abschluss des Schreibvorgangs auf dem Zielgerät benötigt wird.
Auf meinem Hauptcomputer ist es [15–20 %] schneller oflag=direct
, wenn auf eine SATA-SSD geschrieben wird (wo /tmp
sich meine befindet).
Es kann jedoch Probleme geben mit oflag=direct
, siehe den folgenden Link,