Oblicz sumę md5 na płycie CD / DVD


18

Mam plik ISO, który nagrałem na płytę CD. Jak mogę teraz sprawdzić, czy płyta CD jest poprawnie utworzona? Chciałbym polecenia, które oblicza sumę skrótu, której mogę użyć do sprawdzenia sumy skrótu, którą obliczam na pliku ISO. Idealnie polecenie powinno:

  • Pracuj bez względu na plik ISO: to znaczy, nie chcę przechowywać sumy skrótów dla każdego pliku na dysku, ani nie pamiętam liczby bloków
  • Bądź względnie krótki: polecenie jednowierszowe jest świetne, łańcuch poleceń o długości dwóch wierszy jest OK, skrypt, który obejmuje jedną stronę, nie jest
  • Bądź dość wydajny: na przykład ddpłyta z powrotem do pliku, a następnie uruchomiona md5sumna pliku, jest niedopuszczalna

Jeśli nie ma odpowiedzi, która nie może zaspokoić wszystkich, docenię też najbliższy mecz. Jeszcze lepiej, jeśli możesz mi powiedzieć, dlaczego nie jest to takie proste.

Odpowiedzi:


18

Podstawowym problemem jest to, że chcemy pobrać sumę md5 dokładnie tych samych informacji, które były pierwotnie na ISO. Kiedy zapisujesz ISO na CD, na końcu dysku prawdopodobnie jest puste miejsce, co nieuchronnie zmienia sumę md5. Zatem najkrótsza droga:

md5sum /dev/cdrom

nie działa . To, co działa (i jest powszechne w dokumentacji online ), to tylko odczytywanie dokładnej liczby bajtów z urządzenia, a następnie robienie tego md5sum. Jeśli znasz liczbę bajtów, możesz zrobić coś takiego:

dd if=/dev/cdrom bs=1 count=xxxxxxxx | md5sum

gdzie „xxxxx” to rozmiar ISO w bajtach.

Jeśli nie znasz liczby bajtów, ale nadal masz iso na dysku, możesz uzyskać je za pomocą ls, wykonując następujące czynności ( zaczerpnięte z tego miejsca ):

dd if=/dev/cdrom | head -c `stat --format=%s file.iso` | md5sum

Istnieje wiele innych konstrukcji jednowierszowych, które powinny działać. Zauważ, że w każdym przypadku używamy dddo odczytu bajtów z dysku, ale nie przesyłamy ich do pliku, raczej przekazujemy je od razu do md5sum.

Możliwych ulepszeń prędkości można dokonać, wykonując pewne obliczenia w celu użycia większego rozmiaru bloku ( bs=w ddpoleceniu).


Można uprościć dd if=/dev/cdrom |do </dev/cdrom. Nie ma w tym nic magicznego ddi nie blokuje urządzeń, to po prostu polecenie manipulacji strumieniem ze śmieszną składnią.
Gilles „SO- przestań być zły”

Nawiasem mówiąc, ty (phunehehe) powinieneś mieć rozmiar ISO wraz z sumą kontrolną MD5. Jest to szczególnie ważne w przypadku MD5, który jest częściowo uszkodzony, ale jest to dobry pomysł zarówno pod względem bezpieczeństwa, jak i użyteczności bez względu na sumę kontrolną, której używasz.
Gilles „SO- przestań być zły”

@Gilles: w rzeczywistości korzystanie ddz bsrozmiaru pamięci podręcznej urządzenia może przyspieszyć transfer danych, w przeciwieństwie do zwykłego przekierowywania danych wejściowych.
alex

@Gilles: co rozumiesz przez „MD5, który jest częściowo uszkodzony”? I dlaczego mam zachować rozmiar pliku, jeśli jeśli coś jest nie tak, suma kontrolna powinna od razu mi powiedzieć?
phunehehe,

@phunehehe: Znanesłabości kryptograficzne w MD5 (nie jest (publicznie) znany sposób generowania kolizji dla danego pliku, ale może on nadejść). Znajomość rozmiaru pliku daje ci nieco więcej pewności (choć niewiele więcej). Daje również natychmiastową informację zwrotną dotyczącą typowych przypadkowych błędów, takich jak obcięte pobieranie.
Gilles „SO- przestań być zły”

2

Istnieje program do tego zadania. To jest nazwane -checkisomd5 . W Ubuntu można go zainstalować za pomocą polecenia:

sudo apt-get install isomd5sum

Jak tego używasz? checkisomd5 /dev/sr0daje mi: Kontrola mediów jest zakończona, wynik jest następujący: NA. Brak dostępnych informacji o sumie kontrolnej, nie można zweryfikować nośnika.
Torsten

Suma kontrolna powinna zostać osadzona w obrazie ISO za pomocą narzędzia „implantisomd5”. Trzeba to zrobić, zanim iso zapisze na dysku. Narzędzie zawarte w „checkisomd5”.
Денис Проскурин

1

Jeśli rozmiar obrazu na dysku jest podzielny przez 2048, liczba całkowita, która wydaje się być bardzo powszechna, to możesz uzyskać dokładną sumę MD5 w następujący sposób, gdzie sr0jest nazwa optyczna - którą można znaleźć za pomocą lshw -C disk- i gdzie „liczba” to dywidenda rozmiaru obrazu podzielona przez 2048.

dd if=/dev/sr0 bs=2048 count=356352 |md5sum

Wiele płyt CD prawdopodobnie używa ścieżek „Mode 1”, które zawierają 2,048 bajtów danych użytkownika na sektor . („Tryb 2” przechowuje 2 336 bajtów danych użytkownika na sektor, ale brakuje mu bardziej zaawansowanych funkcji wykrywania i korekcji błędów oferowanych przez Tryb 1, co powoduje, że Tryb 2 jest mniej przydatny w przypadku danych, w których nie można tolerować błędów.)
CVn,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.