Ich benutze den Befehl dd, um einen bootfähigen USB aus einer ISO-Datei zu erstellen:
sudo dd if=~/Desktop/ubuntu.iso of=/dev/sdx bs=1M
Nach dem Drücken der Eingabetaste wird es kurz beendet und gibt mir:
915+0 records in 915+0 records out 959447040 bytes (959 MB) copied,
0.539375 s, 1.8 GB/s
Es ist also so, als würde man im Hintergrund laufen, weil ich sehen kann, dass das Flash-Laufwerk funktioniert. Irgendwann hört der Kopiervorgang auf und ich kann das Laufwerk erfolgreich entfernen, aber die Frage ist, warum der Befehl dd nicht auf den Abschluss des Kopiervorgangs wartet. Warum läuft es im Hintergrund. Und wie kann ich es warten lassen?
command-line
bash
Kir Ivlev
quelle
quelle
sync
?sync
warte.dd
hat auch einige Synchronisierungsoptionen, zum Beispielconv=fsync
. Das heißt, ich musste es nie mit/dev/sd*
Laufwerken selbst verwenden. Wenn Sie buchstäblich/dev/sdx
meine Vermutung verwendet hätten, hätten Sie eine nutzlose 959MB-Datei in/dev
(Ramdisk) jetzt ...Antworten:
Trotz der weitverbreiteten Meinung
dd
ist es ein ganz gewöhnlicher Befehl, der nicht niedriger ist alscat
odercp
. Ihr Befehl liest aus dem Festplatten-Cache und schreibt wie jeder andere Befehl in die Festplattenpuffer.Um sicherzustellen, dass die Daten vollständig auf den physischen Datenträger geschrieben sind, müssen Sie anrufen
sync
. Der Befehlsync
löscht alle Ausgabepuffer auf die Festplatte (n). Wenn dersync
Befehl zurückgegeben wird, wurden die Daten vollständig geschrieben.Die meiste Zeit müssen Sie nicht anrufen
sync
, da das Abmelden eines Dateisystems denselben Job ausführt. Wenn derumount
Befehl zurückgegeben wird oder wenn Sie nach dem Klicken auf „Eject“ eine Bestätigungsmeldung erhalten, wurden die Puffer auf die Festplatte geschrieben. In diesem Fall schreiben Sie direkt auf die Festplatte, ohne ein bereitgestelltes Dateisystem zu durchlaufen. Daher müssen Sie den Puffer explizit leeren.Beachten Sie, dass Sie anstelle von verwenden
dd
könntentee
. Dies hat zwei Vorteile: Es besteht ein geringeres Risiko, die Quelle und das Ziel aufgrund eines Tippfehlers zu invertieren, und es ist wahrscheinlich etwas schneller .quelle
sudo tee /dev/sdx >/dev/null
, da sonst der Kopiervorgang immer noch sehr langsam ist, da Daten auf die Konsolenausgabe geschrieben werden.sync
Befehl nicht auf, erledigen jedoch den gleichen Job unter der Haube.conv=fdatasync
derdd
Befehl nicht, bis die Daten wie vom OP angefordert auf die Festplatte geschrieben wurden. Darüber hinaussync
plant der Befehl eine Synchronisierungsoperation, die jedoch sofort zurückgegeben wird. Die Rückkehr wird erst abgewartet, nachdem die Daten auf die Festplatte geschrieben wurden.dd
nicht darauf, dass der Cache ohneconv=fdatasync
etc. geleert wird, aber unter nicht altem Linux bist du falsch, wenn dusync
nicht wartest. Sie können sehen, wie Coreutilssync(8)
densync(2)
Syscall machen . Aufsync(2)
der Manpage steht : "Vor Version 1.3.20 hat Linux nicht auf den Abschluss von I / O gewartet, bevor es zurückkehrte." Sosync(8)
wird nicht zurückgegeben, bis der Datenträger die Schreibvorgänge bestätigt (oder ein Fehler ausgelöst wird).Versuche dies:
Das
conv=fdatasync
weist Siedd
an, die speziellen Optionen zu verwenden, um sicherzustellen, dass die Daten auf das physische Gerät geschrieben werden.quelle