Ich habe einen USB-Stick, auf dem ich eine ISO-Datei von ca. 5 MB mit einem kleinen Betriebssystem mit eigenem Grub übertrage. Wenn ich das Gerät anschließe und es überprüfesudo fdisk -lIch bekomme:
...
Device Boot Start End Sectors Size Id Type
/dev/sdb1 * 1 9551 9551 4.7M cd unknown
Wenn ich mit dd die ISO kopieresudo dd if=my_os.iso von=/dev/sdb
14852+0 records in
14852+0 records out
7604224 bytes (7.6 MB) copied, 0.538487 s, 14.1 MB/s
Es funktioniert perfekt. Ein Bootvorgang vom BIOS auf einem anderen PC.
Das Problem ist, dass ich manchmal vergesse, das USB-Gerät nach der Aktualisierung des BIOS anzuschließen. Dann mache ich es OHNE das angeschlossene USB-Gerät. Die Ausgabe lautet:
14852+0 records in
14852+0 records out
7604224 bytes (7.6 MB) copied, 0.00987684 s, 770 MB/s
Jetzt ist das /dev/sdb-Register beschädigt, die Kopiergeschwindigkeit (770 MB/s) ergibt keinen Sinn und dd kann bis zum Neustart nicht erneut verwendet werden.
Ich habe versucht, es mit ddrescue zu reparieren, aber es funktioniert nicht
sudo ddrescue /dev/zero /dev/sdb conv=noerror,sync
Meine Frage ist nun, was genau passiert und, falls möglich, wie man /dev/sdb repariert, um einen Neustart zu vermeiden und dd wieder zum Laufen zu bringen?
Danke.
Antwort1
Geräteknoten /dev/sd*
werden nur in /dev angezeigtnachdem das Gerät angeschlossen ist, nicht vorher. (Außerdem werden sie nicht „Register“ genannt.) Als Sie dd of=/dev/sdb
es also ausgeführt haben, hat es tatsächlich kein Gerät berührt – stattdessen, da die Ausgabedatei nicht existierte,dd
erstellteine neue Datei mit diesem Namen.
$ sudo dd if=archlinux-2016.04.01-dual.iso von=/dev/sdc 1482752+0 Datensätze in 1482752+0 Datensätze aus 759169024 Bytes (759 MB, 724 MiB) kopiert, 0,941926 s, 806 MB/s $ ls -l /dev/sd* brw-rw---- 1 Root-Disk 8, 0 15. Juni 08:54 /dev/sda brw-rw---- 1 Root-Disk 8, 16. Juni 15 14:14 /dev/sdb -rw-r--r-- 1 root root 724 M 15. Juni 15:06 /dev/sdc
Es gibt also wirklich nichts, was „beschädigt“ sein könnte, und nichts, was sinnvollerweise „repariert“ oder mit ddrescue gerettet werden könnte. Sie haben einfach eine riesige Datei namens /dev/sdb
, und weil sie existiert, kann der Kernel dort keinen echten Geräteknoten erstellen.
(Die Schreibgeschwindigkeit ist absolut sinnvoll – /dev
sie wird im RAM gespeichert, Sie haben also das Image einfach vom RAM, wo es zwischengespeichert war, zurück in den RAM kopiert, wo /dev liegt.)
Löschen Sie /dev/sdb
das Gerät und verbinden Sie es erneut.realDer Geräteknoten sollte wieder angezeigt werden.