Dies ist eine sehr schnelle und effiziente Methode, um immer wieder 64-kB-Zeichenfolgen von 0xFF zu schreiben, wobei awk
<8% der CPU verbraucht werden und nur durch die Geschwindigkeit des Laufwerks begrenzt wird, auf das Sie schreiben.
Ich habe versucht, tr
wie hier vorgeschlagen zu verwenden, und festgestellt, dass es schmerzhaft langsam ist und viel CPU verbraucht, um jedes einzelne Byte zu übersetzen. Meine Methode arbeitet in 64-kB-Blöcken und ist mindestens 3,5-mal schneller als die auf Einzelzeichen basierende tr
(26 MB / s gegenüber 7 MB / s bei alten PATA-Hardware - in 52 Minuten in Stille gegenüber 3+ Stunden mit lauten Lüfterdrehzahlen ...). Ich mag es, wenn Leute grundlegende Informatikkenntnisse abwischen, ohne vorher ihre Meinung zu testen.
Ich empfehle, das folgende Skript mithilfe printf
der Shell zu erstellen, anstatt zu versuchen, es einzuschreiben, vi
da die meisten Boot-CD-ROMs Ihnen nicht genügend tmp-Speicherplatz bieten, damit das Pufferprotokoll 65.536 Mal kopiert und eingefügt werden kann ...
1) Verfassen Sie das Skript
$ printf "echo | awk '{\n\twhile (1) {\n\t\tprintf(\"%%s\", \"" >/tmp/writeones.sh
$ for i in `seq 1 65536`; do printf '\377' >>/tmp/writeones.sh; done
$ printf "\");\n}\n}'\n" >>/tmp/writeones.sh
Das Ausgabeskript sieht folgendermaßen aus: (Lassen Sie einige Zeichen 0xff in der Zeichenfolge weg.)
echo | awk '{
while (1) {
printf("%s", "ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ...");
}
}'
2) Testen Sie das Skript:
$ sh /tmp/writeones.sh | od -Ax -tx1
000000 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
*
Ctrl+C
3) Führen Sie das Skript aus und leiten Sie es mit dd auf Ihr Laufwerk (überprüfen Sie, ob Sie das richtige Laufwerk haben !!!):
# sh /tmp/writeones.sh | dd of=/dev/ada0 bs=65536 &
Warum habe ich 64 kB gewählt? 1. Arg-Listenbeschränkung von AWK und 2. für meine Hardware erreicht dies die beste Geschwindigkeit für mich. Ich habe auch versucht, dies nur in einer Shell mit printf zu schreiben, und festgestellt, dass es 40% langsamer war und wegen aller Gabeln 80% der CPU verbrauchte.