Tengo un montón de tarjetas SD SDHC UHS-1 Clase 10 de diferentes fabricantes. Todos están divididos de la siguiente manera
$ 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
Usé un duplicador de tarjeta de memoria para copiar las imágenes. Todas las tarjetas tienen el mismo contenido.
Cuando monte la segunda partición de dos tarjetas SD y compare el contenido, son exactamente iguales.
$ 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^
Sin embargo, si comparo el resumen de las particiones, a veces difieren
$ 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 -
Más extraño, si comparo estas dos unidades usando una herramienta de diferenciación binaria como radiff2
, veo lo siguiente
$ 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 cambios, a pesar de diff
que no vio ninguna diferencia en el contenido!
Y por cordura, si comparo dos particiones que tenían el mismo sha1sum, veo lo siguiente
$ radiff2 -c sdj2.img sdf2.img
0
0 cambios!
Aquí hay un desglose de los diferentes sha1sums que veo de diferentes tarjetas. Parece que el fabricante de la tarjeta tiene un gran efecto en la suma que obtengo cuando uso dd para leer la unidad.
A pesar de las diferencias en sha1sums, todas estas tarjetas funcionan para mis propósitos. Sin embargo, está dificultando la comprobación integral porque no puedo comparar sha1sums.
¿Cómo es posible que dos particiones de la tarjeta SD puedan tener sha1sums diferentes y, sin embargo, tener exactamente el mismo contenido cuando están montadas?
Respuesta: Entonces ahora funciona como se esperaba. Para aclarar las cosas, la inconsistencia fue causada por el duplicador SySTOR que estaba usando. La configuración de copia que hice usaba la información y los archivos de la partición copiados, pero no era necesario dd los bits para garantizar que hubiera una coincidencia uno a uno.
Respuestas:
¿Comparó sus contenidos inmediatamente después de escribir los contenidos duplicados? En caso afirmativo, deberían salir exactamente igual. Por ejemplo,
Esto solo es cierto si las tarjetas tienen exactamente el mismo tamaño. A veces, incluso diferentes lotes de tarjetas que son del mismo fabricante y modelo salen con tamaños ligeramente diferentes. Use
blockdev --getsize64
para obtener el tamaño exacto del dispositivo.Además, si ambas tarjetas tienen tamaños exactamente idénticos pero usted escribió una imagen para ambas tarjetas que era más pequeña que la capacidad de las tarjetas, entonces la basura que viene después del final de la imagen puede causar que se notifiquen diferencias.
Una vez que monte cualquier sistema de archivos en el dispositivo, comenzará a ver las diferencias. La implementación del sistema de archivos escribirá varias cosas en el sistema de archivos, como un diario vacío o una marca / marca de tiempo para marcar el sistema de archivos como limpio, y ya no verá más contenido idéntico. Creo que este puede ser el caso en algunas circunstancias, incluso si monta el sistema de archivos de solo lectura.
fuente
blockdev --getsize64
? Parece quedd
está anunciando la cantidad de datos que lee.dd
informará cuánto copió . En caso de desajustes de tamaño entre un archivo de imagen, el tamaño de un dispositivo y el tamaño de otro dispositivo, etc., puede ser el tamaño de la fuente, el destino o ambos.dd
utilizo las tarjetas SD de mi computadora (como hice con la imagen maestra del duplicador), todos los shasums coinciden. Cambié la configuración del SySTOR de "solo datos de sistemas y archivos" a "medios completos" y ahora todas las tarjetas duplicadas tienen chasums coincidentesPara construir sobre la respuesta de Celada: Por un lado, estás haciendo un
diff
(recursivo) entre dos sistemas de archivos montados. Por otro lado, está haciendo una comparación binaria entre dispositivos que tienen sistemas de archivos en ellos , aparentemente, después de haber montado los sistemas de archivos. Eso es manzanas y granadas.La operación en el nivel del sistema de archivos montado solo puede ver el contenido de datos de los archivos en los sistemas de archivos. La comparación binaria entre los dispositivos analiza los datos y los metadatos . Estoy un poco sorprendido por las diferencias 767368, pero puedo adivinar algunas:
diff
, cada archivo en cada dispositivo tendrá su tiempo de acceso (en el inodo) actualizado.PD: ¿necesitas usar
dd
tanto? ¿Qué pasa si hacesradiff2 -c /dev/sdg2 /dev/sdj2
osha1sum /dev/sdg2
?fuente
ro
(solo lectura) no debería causar (o permitir) ninguna modificación. (Aunque he visto uno o dos casos de software haciendo algo diferente de lo que debería hacer). (2) Después de leer sus comentarios (uno en cada respuesta, en el momento de escribir esto), todavía no entiendo qué sucedió ¿Podrías editar tu pregunta o publicar una respuesta que explique las circunstancias en las que obtuviste un error de comparación (es decir, encontró diferencias) inmediatamente después de duplicar (antes de montar), ... (Continúa)