Dlaczego te zduplikowane karty SD mają różne sumy sha1 dla swojej zawartości?

17

Mam kilka kart SD 10 SDHC klasy UHS-1 różnych producentów. Wszystkie są podzielone na partycje w następujący sposób

 $ 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

Do skopiowania zdjęć użyłem powielacza kart pamięci . Wszystkie karty mają tę samą zawartość.

Kiedy montuję drugą partycję dowolnych dwóch kart SD i porównuję zawartość, są one dokładnie takie same.

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

Jeśli jednak porównam sumę partycji, czasem się różnią

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

Dziwne, jeśli porównam te dwa dyski za pomocą narzędzia do różnicowania binarnego radiff2, zobaczę następujące

 $ 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 zmian, mimo że diffnie widziałem żadnych różnic w treści!

Jeśli chodzi o zdrowie psychiczne, jeśli porównam dwie partycje, które miały takie same sumy, zobaczę, co następuje

 $ radiff2 -c sdj2.img sdf2.img
0

0 zmian!

Oto podział różnych sum sha1, które widzę z różnych kart. Wygląda na to, że producent karty ma duży wpływ na to, co otrzymuję, gdy używam dd do odczytu dysku.

wprowadź opis zdjęcia tutaj

Pomimo różnic w sumach sha1, wszystkie te karty działają dla moich celów. Utrudnia to jednak sprawdzanie integralności, ponieważ nie mogę porównać sum sha1.

Jak to możliwe, że dwie partycje kart SD mogą mieć różne sumy sha1, a jednocześnie mieć dokładnie taką samą zawartość po zamontowaniu?


Odpowiedź: Więc teraz działa zgodnie z oczekiwaniami. Aby to wyjaśnić, niespójność została spowodowana przez używany przeze mnie duplikator SySTOR. W ustawieniach kopiowania użyłem skopiowanych informacji o partycjach i plikach, ale nie trzeba było dodawać bitów, aby upewnić się, że istnieje dopasowanie jeden do jednego.

peskal
źródło
3
Jakiego rodzaju testy przeprowadzasz z tak wieloma kartami? :)
hjk
Jeśli porównujesz je po zamontowaniu, to jest twój problem.
David Hoelzer,

Odpowiedzi:

18

Czy porównałeś ich zawartość natychmiast po napisaniu zduplikowanej zawartości? Jeśli tak, powinny wyjść dokładnie tak samo. Na przykład,

# 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

Jest to prawdą tylko wtedy, gdy karty mają dokładnie taki sam rozmiar. Czasami nawet różne partie kart tego samego producenta i modelu mają nieco inne rozmiary. Użyj, blockdev --getsize64aby uzyskać dokładny rozmiar urządzenia.

Ponadto, jeśli obie karty mają dokładnie identyczne rozmiary, ale napisałeś na obu kartach obraz, który był mniejszy niż pojemność kart, to śmieci pojawiające się po końcu obrazu mogą powodować zgłaszanie różnic.

Po zamontowaniu dowolnego systemu plików na urządzeniu zaczniesz widzieć różnice. Implementacja systemu plików zapisze w systemie różne rzeczy, takie jak pusty dziennik lub znacznik / znacznik czasu, aby oznaczyć system plików jako czysty, a wtedy nie będzie już widać identycznej zawartości. Wydaje mi się, że tak może być w niektórych okolicznościach, nawet jeśli podłączysz system plików tylko do odczytu.

Celada
źródło
Czy PO musi korzystać blockdev --getsize64? Wygląda na ddto, że ogłasza ilość danych, które czyta.
G-Man mówi „Reinstate Monica”
3
EIBTI. Zapytanie o rozmiar sprawia, że ​​jest to naprawdę jasne. ddpoinformuje, ile zostało skopiowane . W przypadku niedopasowania rozmiaru między plikiem obrazu, rozmiarem jednego urządzenia i rozmiarem innego urządzenia itp., Który może być rozmiarem źródła, przeznaczenia lub obu tych elementów.
Celada,
Masz rację. Powinny być i dokładnie takie same. Po dalszej analizie odkryłem, że niespójność była spowodowana ustawieniem kopiowania w moim duplikatorze SySTOR. Kiedy mam ddkarty SD z mojego komputera (jak to zrobiłem z obrazem głównym dla powielacza), wszystkie szasum pasują do siebie. Zmieniłem ustawienia SySTOR z „samych systemów i plików” na „całe media”, a teraz wszystkie zduplikowane karty mają pasujące shasums
peskal
8

Opierając się na odpowiedzi Celady: Z jednej strony wykonujesz diff(rekurencyjną) między dwoma zamontowanymi systemami plików. Z drugiej strony porównujesz binarnie urządzenia, na których są systemy plików - najwyraźniej po zamontowaniu systemów plików. To jabłka i granaty.

Operacja na poziomie zamontowanego systemu plików może wyświetlać tylko zawartość danych plików w systemach plików. Porównanie binarne między urządzeniami sprawdza dane i metadane . Jestem trochę zaskoczony różnicami 767368, ale zgaduję na kilka:

  • Podczas montowania systemu plików jądro zapisuje bieżący czas w superbloku systemu plików jako „czas montowania”. Jeśli zamontowane oba urządzenia (a nie na dokładny samym czasie), In The superbloków „razy mount” będzie inna.
  • Jeśli wykonasz porównanie binarne na poziomie urządzenia po rekurencyjnym systemie plików diff, każdy plik na każdym urządzeniu będzie miał zaktualizowany czas dostępu (w i-węzle).

PS Czy potrzebujesz ddtak dużo? Co się stanie, jeśli to zrobisz radiff2 -c /dev/sdg2 /dev/sdj2 lub sha1sum /dev/sdg2?

G-Man mówi „Przywróć Monikę”
źródło
Czy dotyczy to nawet montażu napędu jako tylko do odczytu? Zrobiłem porównanie shasum przed montażem i nadal się różnią. Nigdy też nie widziałem, aby szasum zmieniało się po zamontowaniu jako tylko do odczytu. - Również masz rację, powinienem wygrać bezużyteczne wykorzystanie nagrody dd: p
peskal
(1) Nie, jak podejrzewasz (tj. Zgodnie z twoim doświadczeniem), zamontowanie systemu plików, ponieważ ro(tylko do odczytu) nie powinno powodować (ani zezwalać) na jakiekolwiek modyfikacje. (Chociaż widziałem jeden lub dwa przypadki oprogramowania, które robią coś innego niż powinno.) (2) Po przeczytaniu twoich komentarzy (po jednej na każdą odpowiedź w momencie pisania tego tekstu) nadal nie rozumiem, co stało się. Czy możesz zredagować swoje pytanie lub opublikować odpowiedź wyjaśniającą okoliczności, w których wystąpił błąd porównania (tj. Znaleziono różnice) natychmiast po powieleniu (przed montażem),… (ciąg dalszy)
G-Man mówi „Przywróć Monikę”
(Ciąg dalszy)… i co zrobiłeś, aby to rozwiązać? (3) Podoba mi się, ale czy powinien nazywać się „UUOD”, „UUODD” czy „UUDD”? Głosuję za „UUDD”, ale prawdopodobnie powinniśmy to podjąć na Meta. :-) ⁠
G-Man mówi „Przywróć Monikę”