Ich möchte mein USB-Laufwerk formatieren und bestätigen, dass es mit allen Nullen gefüllt ist. Für die Formatierung ist dies der Befehl, den ich verwende:
sudo mkfs.vfat -I /dev/sdb
Wie bestätige ich, dass das Gerät über die Befehlszeile mit allen Nullen gefüllt ist?
command-line
usb
format
dd
homeGrown
quelle
quelle
hexdump
? Es wird die erste Zeile mit 16 Bytes als Hexadezimalzahl gedruckt und dann [...] gedruckt und jede nachfolgende Zeile übersprungen, die der vorherigen entspricht.hexdump
könnte schneller sein.bs
, damit es nicht byteweise ausgeführt wird.Ich werde auch hier meinen Hut in den Ring werfen. Eine Alternative, die ich gerne benutze, ist
scrub
. Es befindet sich in den Repositorys. Um es über ein Terminalfenster zu installieren, geben Sie Folgendes ein:scrub
unterstützt viele verschiedene Arten von SchrubbmusternStellen Sie
scrub
zum Befüllen des Laufwerkszeros
zunächst sicher, dass das Laufwerk nicht montiert ist. Führen Sie dann die folgende Zeile aus (-p
bedeutet zu verwendendes Muster):dann solltest du so etwas sehen:
Einige der zum Schrubben verwendeten Muster sollten einen
verify
Durchgang haben, um sicherzustellen, dass das Schrubben bestanden wurde.Wenn Sie möchten, können Sie die
hexdump
(wie in der Antwort von Byte Commander) oder eine der anderen Antworten zur Überprüfung am Ende hinzufügen .Hoffe das hilft!
quelle
Verwenden
cmp
(danke an muru, der auf die Albernheit der Verwendung einer Pfeife hingewiesen hat):Wenn Sie eine Ausgabe wie diese erhalten:
Das Laufwerk ist mit Null gefüllt.
quelle
/dev/zero
direkt für verwendencmp
, denke ich.dd
!Mein Vorschlag wäre
hexdump
. Es zeigt den Inhalt einer Datei oder eines Geräts im hexadezimalen Format als Zeilen mit 16 Byte an. Wenn jedoch zwei aufeinanderfolgende Zeilen gleich sind, werden sie weggelassen.Hier ist eine Beispielausgabe der 512-MB-Datei,
virtualdevice
die nur im aktuellen Verzeichnis meiner Festplatte mit Nullen gefüllt ist. Die Spalte ganz links ist der Versatz der Zeile in hexadezimaler Schreibweise. Die folgenden 8 Spalten sind die tatsächlichen Daten, gruppiert in zwei Bytes (4 hexadezimale Zeichen):Performance:
Ich habe mir die Mühe gemacht und meine Lösung anhand der tatsächlichen Laufzeit und der CPU-Zeit für die beschriebene Beispieldatei (512 MB, die nur binäre Nullen enthält und sich auf der Festplatte befindet) mit den anderen verglichen.
Ich habe jede Lösung mit dem
time
Befehl zweimal mit frisch geleertem Festplatten-Cache und zweimal mit der bereits zwischengespeicherten Datei gemessen . Die Zeitnamen entsprechen denen destime
Befehls, und die zusätzliche ZeileCPU
ist nur die Summe derUSER
+SYS
Zeiten. Dies kann dieREAL
Zeit überschreiten, da ich eine Dual-Core-Maschine verwende.Für die meisten Menschen sind die interessanten Zahlen
REAL
(Zeit von Anfang bis Ende, wie mit einer Stoppuhr gemessen. Dies enthält auch die E / A-Wartezeit und die CPU-Zeit anderer Prozesse) undCPU
(CPU-Zeit, die tatsächlich vom Befehl belegt wird).Zusammenfassung:
Die beste Leistung hat murus optimierte zweite Version (
grep -zq . DEVICE
), die unglaublich wenig CPU-Verarbeitungszeit benötigt.Rang 2
cmp /dev/zero DEVICE
( kos 'optimierte Lösung) und meine eigene Lösunghexdump DEVICE
. Es gibt fast keinen Unterschied zwischen ihnen. Das Weiterleitender Daten von
dd
nachcmp
(dd if=/dev/zero | cmp - DEVICE
- kos 'nicht optimierte Lösung) ist sehr ineffizient. Das Weiterleiten scheint viel Verarbeitungszeit zu verbrauchen.Verwenden
dd
undgrep
zeigt die mit Abstand schlechteste Leistung der getesteten Befehle.Fazit:
Obwohl der kritischste Teil solcher Vorgänge die E / A-Zugriffszeit ist, gibt es signifikante Unterschiede in der Verarbeitungsgeschwindigkeit und Effizienz der getesteten Ansätze.
Wenn Sie sehr ungeduldig sind, verwenden Sie die zweite Version von murus Antwort (
grep -zq . DEVICE
)!Sie können aber auch entweder die zweite Version von kos 'answer (
cmp /dev/zero DEVICE
) oder my own (hexdump device
) verwenden, da sie fast genauso gut abschneiden.Mein Ansatz hat jedoch den Vorteil, dass Sie den Dateiinhalt sofort sehen und schätzen können, wie viele Bytes von Null abweichen und wo sie sich befinden. Wenn Sie jedoch viele abwechselnde Daten haben, wird die Ausgabe groß und verlangsamt sich wahrscheinlich.
Was Sie auf jeden Fall vermeiden sollten, ist die Verwendung
dd
und Rohre. Die Leistung vondd
könnte wahrscheinlich durch Einstellen einer geeigneten Puffergröße verbessert werden, aber warum auf komplizierte Weise?Bitte beachten Sie auch erneut, dass der Test für eine Datei auf meiner Festplatte anstelle eines tatsächlichen Geräts durchgeführt wurde. Auch die Datei enthielt nur Nullen. Beides beeinflusst die Leistungen.
Hier sind die detaillierten Ergebnisse:
hexdump ./virtualdevice
(meine eigene Lösung):dd if=./virtualdevice | grep -zq . && echo non zero
( Murus nicht optimierte Lösung):grep -zq . ./virtualdevice && echo non zero
( Murus optimierte Lösung):dd if=/dev/zero | cmp - ./virtualdevice
( kos 'Lösung nicht optimiert):cmp /dev/zero ./virtualdevice
( kos 'Lösung optimiert):Verwendete Befehle:
Für alle vier Tests habe ich das folgende Verfahren zweimal ausgeführt , um Ungenauigkeiten zu reduzieren, und
<COMMAND>
durch den genauen Befehl aus der Überschrift jeder Tabelle ersetzt.Lassen Sie den Kernel alle Festplatten-Caches löschen:
Beim ersten zeitgesteuerten Ausführen (nicht zwischengespeichert) wird die Datei währenddessen in den Cache geladen:
Zweiter zeitgesteuerter Lauf (zwischengespeichert). Diesmal werden die meisten Daten aus dem Festplatten-Cache im RAM entnommen, daher ist dies viel schneller als beim direkten Zugriff auf die Festplatte:
quelle
dd
vs ohnedd
sollte wahrscheinlich auch gemacht werdengrep
. Veröffentlichen Sie auch den Code, mit dem Sie dies getestet haben.