Wenn ich Bilder auf ein Flash-Laufwerk schreibe, passiert Folgendes manchmal:
$ sudo dd if=install57.fs of=/dev/sdc
573440+0 records in
573440+0 records out
293601280 bytes (294 MB) copied, 0.549231 s, 535 MB/s
Grundsätzlich speichert Linux alles im Cache, schreibt nichts und beendet sich dd
. Nach sync
der Eingabe werden die Daten geschrieben (die LED des Flash-Laufwerks beginnt zu blinken).
Warum passiert das?
linux
command-line
dd
jgillich
quelle
quelle
/dev/sdc
ein Gerät in Ihrem System vorhanden ist und Sie nicht in eine Datei schreiben/dev/sdc
? Do anls --color /dev
-/dev/sdc
sollte gelb sein, wenn es sich um ein Gerät handelt.Antworten:
Verwenden Sie dies stattdessen:
Dieser ruft den
fsync()
nach jedemwrite()
Systemaufruf auf. Dies zwingtdd
dazu, nichts zwischenzuspeichern. Siehe diesen Teil der Manpage von fsync (man 2 fsync
):Dies ist das Standardverhalten des Kernels. Linux-Kernel verwalten Schreib- und Lesecaches wie
write()
folgt : Wenn der Syscall ausgegeben wird, werden die Daten schnell in den Cache geschrieben und der Status "Schreibvorgang abgeschlossen" wird an den Prozess gesendet. Wenn der Puffer benötigt wird oder wenn auf dem Bus freie Zeit vorhanden ist, werden die Daten aus dem Cache auf die Festplatte geschrieben.quelle
conv=fsync
die Standardeinstellung ist, wenn Sie schreiben, um Geräte zu blockieren,dd
bei denen nichts zwischengespeichert wird? Auf der Suche nach einer guten Antwort auf diese FrageDies liegt daran, dass Linux und die meisten anderen Betriebssysteme Lese- und Schreibvorgänge zwischenspeichern. In den meisten Fällen reagiert Ihr Betriebssystem dadurch schneller.
Wenn Sie sicherstellen möchten, dass die zwischengespeicherten Daten geschrieben wurden, möchten Sie verwenden
sync
, wie Sie wissen, verwenden. Linux bietet eine große Anzahl von Einstellungen, die Sie ebenfalls anpassen können. Dieser Artikel gibt einen guten Überblick über einige Einstellungen. Sie können beispielsweise vm.dirty_background_bytes auf 0 setzen, um sicherzustellen, dass der Kernel die Flusher-Threads sofort startet.quelle
Hinweis:
unmount
(oder Auswerfen) ruft automatisch auf,sync
was dies bei normaler Verwendung des Dateisystems "verbirgt".quelle