Pourquoi ces cartes SD dupliquées ont-elles des montants différents pour leur contenu?

17

J'ai un tas de cartes SD SDHC UHS-1 de classe 10 de différents fabricants. Ils sont tous partitionnés comme suit

 $ 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

J'ai utilisé un duplicateur de carte mémoire pour copier les images. Toutes les cartes ont le même contenu.

Lorsque je monte la deuxième partition de deux cartes SD et compare le contenu, elles sont exactement les mêmes.

 $ 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^

Cependant, si je compare le sha1sum des partitions, elles diffèrent parfois

 $ 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  -

Plus étrange, si je compare ces deux disques à l'aide d'un outil de comparaison binaire comme radiff2, je vois ce qui suit

 $ 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 changements, même si diffaucune différence n'a été constatée dans le contenu!

Et pour raison, si je compare deux partitions qui avaient le même sha1sum, je vois ce qui suit

 $ radiff2 -c sdj2.img sdf2.img
0

0 changements!

Voici une ventilation des différents sha1sums que je vois sur différentes cartes. Il semble que le fabricant de la carte ait une grande influence sur le montant que je reçois lorsque j'utilise dd pour lire le lecteur.

entrez la description de l'image ici

Malgré les différences de sha1sums, toutes ces cartes fonctionnent pour mes besoins. Cependant, cela rend la vérification d'intégrité difficile car je ne peux pas comparer les sha1sums.

Comment est-il possible que deux partitions de carte SD puissent avoir des sha1sums différents, mais avoir exactement le même contenu une fois montées?


Réponse: Alors maintenant, cela fonctionne comme prévu. Pour clarifier les choses, l'incohérence a été causée par le duplicateur SySTOR que j'utilisais. Le paramètre de copie que je lui ai fait utiliser des informations et des fichiers de partition copiés, mais il n'a pas fallu dd les bits pour s'assurer qu'il y avait une correspondance un à un.

peskal
la source
3
Quel genre de test faites-vous avec un tel tas de cartes? :)
hjk
Si vous les comparez après les avoir montés, c'est là votre problème.
David Hoelzer

Réponses:

18

Avez-vous comparé leur contenu immédiatement après avoir écrit le contenu dupliqué? Si oui, ils devraient sortir exactement la même chose. Par exemple,

# 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

Cela n'est vrai que si les cartes ont exactement la même taille. Parfois, même différents lots de cartes qui sont du même fabricant et du même modèle sortent avec des tailles légèrement différentes. Utilisez blockdev --getsize64pour obtenir la taille exacte de l'appareil.

De plus, si les deux cartes ont des tailles exactement identiques mais que vous avez écrit une image sur les deux cartes qui était plus petite que la capacité des cartes, les déchets qui viennent après la fin de l'image peuvent entraîner des différences.

Une fois que vous avez monté un système de fichiers sur l'appareil, vous verrez des différences. L'implémentation du système de fichiers écrira diverses choses sur le système de fichiers, comme un journal vide ou un indicateur / horodatage pour marquer le système de fichiers comme propre, et vous ne verrez plus de contenu identique. Je pense que cela peut être le cas dans certaines circonstances, même si vous montez le système de fichiers en lecture seule.

Celada
la source
Le PO doit-il être utilisé blockdev --getsize64? Il semble ddannoncer la quantité de données qu'il lit.
G-Man dit `` Réinstalle Monica ''
3
EIBTI. Interroger la taille le rend vraiment clair. ddrapportera combien il a copié . En cas de différence de taille entre un fichier image, la taille d'un appareil et la taille d'un autre appareil, etc ... qui peut être la taille de la source, la destination, ou les deux.
Celada
Tu as raison. Ils devraient l'être et ils sont exactement les mêmes. Après avoir approfondi cette question, j'ai constaté que l'incohérence était due au paramètre de copie de mon duplicateur SySTOR. Lorsque je ddrécupère les cartes SD de mon ordinateur (comme je l'ai fait avec l'image principale du duplicateur), toutes les shasums correspondent. J'ai changé les paramètres du SySTOR de "systèmes et fichiers de données uniquement" en "médias entiers" et maintenant toutes les cartes dupliquées ont des shasums correspondants
peskal
8

Pour s'appuyer sur la réponse de Celada: D'une part, vous faites un diff(récursif) entre deux systèmes de fichiers montés. D'un autre côté, vous effectuez une comparaison binaire entre des périphériques dotés de systèmes de fichiers - apparemment, après avoir monté les systèmes de fichiers. Ce sont des pommes et des grenades.

L'opération au niveau du système de fichiers monté ne peut voir que le contenu des données des fichiers dans les systèmes de fichiers. La comparaison binaire entre les appareils examine les données et les métadonnées . Je suis un peu surpris par les différences 767368, mais je peux en deviner quelques-unes:

  • Lorsque vous montez un système de fichiers, le noyau écrit l'heure actuelle dans le superbloc du système de fichiers comme "heure de montage". Si vous avez monté les deux appareils (et pas exactement au même moment), les "temps de montage" dans les superblocs seront différents.
  • Si vous effectuez la comparaison binaire au niveau du périphérique après le système de fichiers récursif diff, chaque fichier sur chaque périphérique aura son temps d'accès (dans l'inode) mis à jour.

PS Avez-vous besoin d'utiliser ddautant? Que se passe-t-il si vous le faites radiff2 -c /dev/sdg2 /dev/sdj2 ou sha1sum /dev/sdg2?

G-Man dit «Réintègre Monica»
la source
Cela s'applique-t-il même lors du montage du lecteur en lecture seule? J'ai fait la comparaison de shasum avant de monter aussi et ils diffèrent toujours. Je n'ai également jamais vu le shasum changer après le montage en lecture seule. - Vous avez également raison, je devrais gagner une utilisation inutile de dd award: p
peskal
(1) Non, comme vous le soupçonnez (c'est-à-dire conformément à votre expérience), le montage d'un système de fichiers en ro(lecture seule) ne devrait pas provoquer (ou autoriser) de modification. (Bien que j'aie vu un ou deux cas de logiciel faire autre chose que ce qu'il devrait faire.) (2) Après avoir lu vos commentaires (un sur chaque réponse, au moment d'écrire ces lignes), je ne comprends toujours pas très bien ce que arrivé. Voulez-vous s'il vous plaît modifier votre question ou publier une réponse expliquant les circonstances dans lesquelles vous avez échoué à la comparaison (c'est-à-dire, il a trouvé des différences) immédiatement après la duplication (avant le montage),… (suite)
G-Man dit 'Reinstate Monica'
(Suite)… et qu'avez-vous fait pour le résoudre? (3) Je l'aime, mais faut-il l'appeler «UUOD», «UUODD» ou «UUDD»? Je vote pour «UUDD», mais nous devrions probablement reprendre cela sur Meta. :-) ⁠
G-Man dit 'Reinstate Monica'