Das Erstellen eines Images einer CF-Karte führt zu inkonsistenten Ergebnissen

Das Erstellen eines Images einer CF-Karte führt zu inkonsistenten Ergebnissen

Ein Freund versucht, eine CF-Karte mit dem folgenden Linux-Befehl zu klonen:

sudo dd if=/dev/sdb of=card3.img bs=4M status=progress

aber jedes Mal wird ein anderes Bild erzeugt. Die ersten beiden Karten, die sie abgebildet haben, haben inkonsistente Ergebnisse geliefert. Was könnte die Ursache dafür sein?

Antwort1

Das bloße Mounten mit Schreibzugriff (rw) könnte zum Schreiben von Daten führen. Auf Ext-Dateisystemen werden mindestens die folgenden Attribute aktualisiert:

  • Zuletzt montiert am
  • Anzahl der Mounts
  • Letzte Einhängezeit
  • Und mögliche Dateizugriffszeiten, die aktualisiert werden, wenn Dateien gerade gelesen werden (Mounts noatimesollten dies verhindern).
  • Und ein Attribut „Letzter Schreibzeitpunkt“, wenn ein Schreibvorgang stattfindet)

Tatsächlich, MontageohneSchreibzugriff (mit -r/ von Mount -o ro) könnte immer noch auf das Gerät schreiben, siehe man mount:

-r, --read-only

Mountet das Dateisystem schreibgeschützt. Ein Synonym ist -o ro.

Beachten Sie, dass das System je nach Dateisystemtyp, Status und Kernelverhaltenkann weiterhin auf das Gerät schreiben. Beispielsweise werden ext3 und ext4 das Journal wiederholen, wenn das Dateisystem schmutzig ist. Um diese Art von Schreibzugriff zu verhindern, können Sie ein ext3- oder ext4-Dateisystem mit dem mountenro, keine LadungUm die Einhängeoptionen zu ändern oder das blockorientierte Gerät selbst in den Nur-Lese-Modus zu versetzen, siehe den blockdevBefehl (8).

Und blockdevhat den --setroBefehl, ein Blockgerät als schreibgeschützt festzulegen

Sie können die Bilder vergleichen und sehen, welche Bytes unterschiedlich sind, mit cmpoder so ähnlich vbindiff. Nur ein paar Bytes könnten irgendwo ein Datum oder eine Anzahl sein (ich bin nicht sicher, ob die Attribute als einfacher Text gespeichert oder irgendwie codiert sind).

Oder mounten Sie zwei (oder mehr) der Images schreibgeschützt und vergleichen Sie nur die Dateien. Plain diffkann Verzeichnisbäume vergleichen, aber ich bevorzuge eine GUI wie kdiff3. Wenn der einzige Unterschied in der Mount-Anzahl oder der letzten Mount-Zeit liegt, wird er in den Dateien nicht angezeigt (unterschiedliche Dateizugriffszeiten wahrscheinlich auch nicht).

Oder vielleicht ist das Gerät oder Ihr RAM oder etwas anderes defekt und liest hier und da unterschiedliche Bytes.

Sie können das Gerät auch ausgehängt lassen, ein Image erstellen, dann das Gerät (immer noch ausgehängt) aus- und wieder anschließen, ein weiteres Image erstellen und dann vergleichen. Die Ergebnisse sollten identisch sein.

verwandte Informationen