Warum haben diese duplizierten SD-Karten unterschiedliche Sha1summen für ihren Inhalt?

17

Ich habe ein paar UHS-1 SDHC SD-Karten der Klasse 10 von verschiedenen Herstellern. Sie sind alle wie folgt unterteilt

 $ sudo fdisk -l /dev/sdj
Disk /dev/sdj: 14.9 GiB, 15931539456 bytes, 31116288 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x0000de21

Device     Boot   Start      End  Sectors  Size Id Type
/dev/sdj1          2048  1050623  1048576  512M  c W95 FAT32 (LBA)
/dev/sdj2       1050624  2099199  1048576  512M 83 Linux
/dev/sdj3       2099200  3147775  1048576  512M 83 Linux
/dev/sdj4       3147776 31116287 27968512 13.3G 83 Linux

Ich habe einen Speicherkarten-Duplikator verwendet, um die Bilder zu kopieren. Alle Karten haben den gleichen Inhalt.

Wenn ich die zweite Partition von zwei SD-Karten einbinde und den Inhalt vergleiche, sind sie genau gleich.

 $ sudo mount -o ro /dev/sdg2 /mnt/system-a/
 $ sudo mount -o ro /dev/sdj2 /mnt/system-b/
 $ diff -r --no-derefence /mnt/system-a /mnt/system-b/
 $ # prints nothing^

Wenn ich jedoch die Summe der Partitionen vergleiche, unterscheiden sie sich manchmal

 $ sudo dd if=/dev/sdg2 | sha1sum
1048576+0 records in
1048576+0 records out
536870912 bytes (537 MB) copied, 12.3448 s, 43.5 MB/s
ee7a16a8d7262ccc6a2e6974e8026f78df445e72  -

 $ sudo dd if=/dev/sdj2 | sha1sum
1048576+0 records in
1048576+0 records out
536870912 bytes (537 MB) copied, 12.6412 s, 42.5 MB/s
4bb6e3e5f3e47dc6cedc6cf8ed327ca2ca7cd7c4  -

Seltsamerweise radiff2sehe ich folgendes , wenn ich diese beiden Laufwerke mit einem binären Diffing Tool vergleiche

 $ sudo dd if=/dev/sdg2 of=sdg2.img
1048576+0 records in
1048576+0 records out
536870912 bytes (537 MB) copied, 12.2378 s, 43.9 MB/s

 $ sudo dd if=/dev/sdj2 of=sdj2.img
1048576+0 records in
1048576+0 records out
536870912 bytes (537 MB) copied, 12.2315 s, 43.9 MB/s

 $ radiff2 -c sdg2.img sdj2.img
767368

767368 Änderungen, obwohl diffkeine inhaltlichen Unterschiede festgestellt wurden !

Wenn ich zwei Partitionen vergleiche, die die gleiche Summe hatten, sehe ich aus Gründen der Übersichtlichkeit Folgendes

 $ radiff2 -c sdj2.img sdf2.img
0

0 Änderungen!

Hier ist eine Aufschlüsselung der verschiedenen sha1sums, die ich von verschiedenen Karten sehe. Es scheint, als ob der Hersteller der Karte einen großen Einfluss darauf hat, wie viel Geld ich bekomme, wenn ich das Laufwerk mit dd auslese.

Bildbeschreibung hier eingeben

Trotz der Unterschiede in der Summe funktionieren alle diese Karten für meine Zwecke. Dies erschwert jedoch die Integritätsprüfung, da ich sha1sums nicht vergleichen kann.

Wie ist es möglich, dass zwei SD-Kartenpartitionen unterschiedliche sha1sums haben und beim Mounten genau den gleichen Inhalt haben?


Antwort: Jetzt funktioniert es also wie erwartet. Zur Klärung wurde die Inkonsistenz durch den von mir verwendeten SySTOR-Duplikator verursacht. Die Kopiereinstellung, die ich hatte, verwendete kopierte Partitionsinformationen und -dateien, aber es war nicht erforderlich, die Bits zu kopieren, um sicherzustellen, dass es eine Eins-zu-Eins-Übereinstimmung gab.

Peskal
quelle
3
Was für ein Test machen Sie mit einem solchen Kartenstapel? :)
hjk
Wenn Sie sie nach dem Mounten vergleichen, liegt das Problem darin.
David Hoelzer

Antworten:

18

Haben Sie den Inhalt sofort nach dem Schreiben des duplizierten Inhalts verglichen ? Wenn ja, sollten sie genau gleich rauskommen. Beispielsweise,

# Duplicate
dd bs=16M if=/dev/sdg of=/dev/sdk

# Comparing should produce no output
cmp /dev/sdg /dev/sdk
# Compare, listing each byte difference; also no output
cmp -l /dev/sdg /dev/sdk

Dies gilt nur, wenn die Karten genau die gleiche Größe haben. Manchmal werden sogar unterschiedliche Kartenstapel, die vom selben Hersteller und Modell stammen, mit geringfügig unterschiedlichen Größen ausgegeben. Verwenden Sie blockdev --getsize64, um die genaue Größe des Geräts zu ermitteln.

Wenn beide Karten exakt die gleiche Größe haben, Sie jedoch ein Bild auf beide Karten geschrieben haben, das kleiner als die Kapazität der Karten ist, kann der nach dem Ende des Bildes entstehende Müll zu einer Meldung von Unterschieden führen.

Sobald Sie ein Dateisystem auf dem Gerät bereitgestellt haben, werden Sie Unterschiede feststellen. Die Dateisystemimplementierung schreibt verschiedene Dinge in das Dateisystem, z. B. ein leeres Journal oder ein Flag / einen Zeitstempel, um das Dateisystem als sauber zu kennzeichnen, und dann sehen Sie keinen identischen Inhalt mehr. Ich glaube, dass dies unter bestimmten Umständen der Fall sein kann, auch wenn Sie das Dateisystem schreibgeschützt bereitstellen.

Celada
quelle
Ist der OP Bedarf zu verwenden blockdev --getsize64? Es sieht so aus, ddals würde die gelesene Datenmenge angekündigt.
G-Man sagt, dass Monica
3
EIBTI. Das Abfragen der Größe macht es wirklich klar. ddwird berichten, wie viel es kopiert hat . Bei Größeninkongruenzen zwischen einer Bilddatei, der Größe eines Geräts und der Größe eines anderen Geräts usw. kann dies die Größe der Quelle, des Ziels oder beides sein.
Celada
Du hast recht. Sie sollten und sie sind genau das gleiche. Nachdem ich mich näher damit befasst hatte, stellte ich fest, dass die Inkonsistenz durch die Kopiereinstellung auf meinem SySTOR-Duplikator verursacht wurde. Wenn ich dddie SD-Karten von meinem Computer (wie ich es mit dem Master-Image für den Kopierer getan habe), stimmen alle Shasums überein. Ich habe die Einstellungen auf dem SySTOR von "nur Systeme und Dateidaten" auf "ganze Medien" geändert und jetzt haben alle duplizierten Karten passende Shasums
peskal
8

Aufbauend auf Celadas Antwort: Einerseits machen Sie eine diff(rekursive) Verbindung zwischen zwei gemounteten Dateisystemen. Auf der anderen Seite führen Sie einen binären Vergleich zwischen Geräten mit Dateisystemen durch - anscheinend nachdem Sie die Dateisysteme gemountet haben. Das sind Äpfel und Granatäpfel.

Die Operation auf der Ebene des bereitgestellten Dateisystems kann nur den Dateninhalt der Dateien in den Dateisystemen anzeigen. Der binäre Vergleich zwischen den Geräten betrachtet die Daten und die Metadaten . Ich bin ein bisschen überrascht von den 767368 Unterschieden, aber ich kann ein paar raten:

  • Wenn Sie ein Dateisystem einhängen, schreibt der Kernel die aktuelle Zeit als "Einhängezeit" in den Superblock des Dateisystems. Wenn Sie beide Geräte (und nicht genau zur gleichen Zeit) gemountet haben, sind die "Mount-Zeiten" in den Superblocks unterschiedlich.
  • Wenn Sie den binären Vergleich auf Geräteebene nach dem rekursiven Dateisystem durchführen diff, wurde für jede Datei auf jedem Gerät die Zugriffszeit (im Inode) aktualisiert.

PS Müssen Sie ddso viel verwenden? Was passiert, wenn Sie radiff2 -c /dev/sdg2 /dev/sdj2 oder sha1sum /dev/sdg2?

G-Man sagt, "Monica wiedereinsetzen"
quelle
Gilt dies auch, wenn das Laufwerk schreibgeschützt bereitgestellt wird? Ich habe den Shasum-Vergleich auch vor der Montage durchgeführt und sie unterscheiden sich immer noch. Ich habe auch noch nie gesehen, dass sich der Shasum nach dem Mounten schreibgeschützt geändert hat. - Du hast auch recht, ich sollte einen nutzlosen Einsatz von dd award gewinnen: p
peskal
(1) Nein, wie Sie vermuten , (dh im Einklang mit Ihrer Erfahrung), ein Dateisystem als Montage ro(read-only) sollte nicht Ursache (oder lassen) jede Änderung. (Obwohl ich ein oder zwei Fälle von Software gesehen habe, in denen etwas anderes als das getan wurde, was getan werden sollte.) (2) Nachdem ich Ihre Kommentare gelesen habe (eine zu jeder Antwort zum Zeitpunkt dieses Schreibens), verstehe ich immer noch nicht ganz, was passierte. Werden Sie entweder bearbeiten Sie Ihre Frage bitte oder eine Antwort hinterlassen , unter welchen Umständen erklären Sie Vergleich Ausfall bekam (dh es Unterschiede gefunden) unmittelbar nach (vor der Montage) Duplizieren ... (Fortsetzung)
G-Man sagt ‚wieder einzusetzen Monica‘
(Fortsetzung)… und was hast du getan, um es zu lösen? (3) Ich mag es, aber sollte es "UUOD", "UUODD" oder "UUDD" heißen? Ich stimme für "UUDD", aber wir sollten dies wahrscheinlich auf Meta aufnehmen. :-) ⁠
G-Man sagt, dass Monica