Wie führt man eine verifizierte blockweise Block-Blockkopie durch?

425
user2284570

Ich habe ein spezielles Flash-Gerät, bei dem jedes Schreiben in einen physischen Block überprüft werden muss (obwohl ich nicht als MDD darauf zugreife). Da ein physischer Block immer geflasht wird, funktioniert das Schreiben von Daten nicht immer.
Das heißt also, wenn ich eine einfache ungeprüfte Kopie wie folgt ausführe:

dd if=backup of=/dev/sdb1 

Ich werde eine Minderheit von Blöcken haben, bei denen das Schreiben erfolgreich gewesen wäre, und eine Mehrheit, bei der nur Flashing erfolgreich gewesen wäre (was bedeutet, dass einige Blöcke gefüllt sind 0xFF).
Das Wiederholen des Befehls funktioniert nicht, da dderfolgreiche Blöcke ebenfalls neu geschrieben werden würden. Dies bedeutet, dass frühere Schreibvorgänge in erfolglose Überschreibungen konvertiert wurden (ein Block mit zuvor gültigen Daten würde geflasht werden, aber das Schreiben ist fehlgeschlagen, was zum 0xFFBefüllen führte).

Mein Blockgerät sollte also mit verifizierter Kopie behandelt werden: Nach jedem Schreibzugriff sollte ein Block mit dem verglichen werden, to be copied dataund das Schreiben von Daten auf einem solchen Block muss erneut durchgeführt werden, bis der Block erfolgreich ist, um den nächsten Block zu verarbeiten.

0
Dies ist ähnlich wie beim .iso-Brennvorgang. Mit Ausnahme von jeweils 512 Byte werden physikalische Blöcke vor jedem Schreibvorgang einzeln geblitzt. Der Grund für eine solche Behandlung ist, dass ich keinen speziellen Treiber benötige: Wenn der Kernel einen Schreibvorgang anfordert, ist es die Gerätefirmware, die das Flashen des entsprechenden Bereichs auf der mtd ausführt und gleichzeitig den seriellen Blockzugriff in mtd-Zugriff konvertiert (wie bei einer SD-Karte) ). user2284570 vor 6 Jahren 0
The SLOW way - `man dd` - count, überspringen, suchen und die dazugehörigen * _bytes-Argumente. Hannu vor 6 Jahren 0
@ Hannu ist viel mehr als der langsame Weg: es ist der jährliche Weg! Es gibt 500 GB zum Kopieren. Stellen Sie sich die Zeit vor, wenn mehrere Prozesse alle 512 Bytes erstellt werden müssten. user2284570 vor 6 Jahren 0
Nun, ich denke mal, es ist etwas ziemlich einfacher C-Code, der benötigt wird - da alles eine Datei ist. Lesen Sie die Daten in einem Puffer ab, suchen Sie die richtige Position, schreiben Sie, suchen Sie zurück, lesen Sie und vergleichen Sie. Wiederholen Sie diesen Vorgang, bis Sie die Originaldaten wieder lesen können. Fahren Sie mit dem nächsten Datenpuffer fort. Hinweis: Ich habe es nicht probiert. Hannu vor 6 Jahren 0

0 Antworten auf die Frage