Ich arbeite an einem Embedded-System mit der Busybox-Version von dd. Ich versuche, ein Löschen des Laufwerks von einem externen Dienstprogramm aus zu testen, aber dd liest nach dem Löschen nicht erneut von der Disc, sondern zeigt mir die zwischengespeicherten Daten an.
Ich habe es auf dd eingegrenzt, als wenn ich eine erste dd mache, die Daten sehe, mein System neu starte, um den Cache zu leeren, das Löschen durchführte und dann dd erneut ausführte, kam es mit allen Nullen auf.
Wenn ich jedoch in den Werkseinstellungen dd mache, lösche ich das Laufwerk und mache dd erneut, ohne es neu zu starten, dann werden mir erst nach einem Neustart alle Nullen angezeigt.
Ich habe in der GNU-Manpage gelesen, dass dd das iflag opt mit einem Nocache-Flag unterstützt, aber busybox unterstützt diese Option nicht, so dass dies nicht in Frage kommt.
Meine Frage ist, wie ich dd zwingen kann, von der Scheibe anstatt vom Pufferspeicher wieder zu lesen?
Antworten:
Du könntest es versuchen
was alle Arten von Caches löscht.
Details siehe
/usr/src/linux/Documentation/sysctl/vm.txt
aufdrop_caches
.(Hinweis: Die Frage betraf die busybox dd, die bis heute noch nicht unterstützt wird
iflag=direct
.)quelle
/proc
In einigen eingebetteten Linux-Konfigurationen ist das Dateisystem deaktiviert.dd
unternommen, sie bei der Übertragung großer Datenmengen in den Papierkorb zu werfen.Basierend auf der Antwort von @ sendmoreinfo:
Der Lese-Cache ist davon nicht betroffen.
quelle
Direkte E / A (offener Modus
O_DIRECT
) sollte funktionieren, aber Ihr Kernel und / oderdd
möglicherweise nicht unterstützen.quelle
Ein kleiner Vorgeschmack auf das iflag = direkte Antwort; Bieten Sie auch einen Fortschrittsbalken an:
Ohne das iflag / oflag ist der pv-Bericht fertig und sieht dann so aus, als wäre er aufgehängt. aber die dd zum gerät arbeitet immer noch am cache.
quelle