uname hat geschrieben:
Die Prüfsummen sollten gleich sein.
Nur, wenn der Stick zufaellig genauso gross ist wie das Image, was eher selten der Fall sein duerfte.
Falls man Image und Stick da hat, koennte man
cmp(1) nehmen und gucken, ob als Ergebnis
EOF on {Image-Datei} rauskommt.
Nur dann stimmen die Daten ueberein. Dummerweise ist der Rueckgabewert nicht unterscheidbar von einer wirklichen Abweichung der Daten, daher empfiehlt sich eine Variante (
dd o.ae.) der folgenden Version:
Code: Alles auswählen
## Image, Pruefsummen besorgen
$ wget -q http://cdimage.debian.org/cdimage/release/current/amd64/iso-cd/debian-7.6.0-amd64-CD-1.iso
$ wget -q http://cdimage.debian.org/cdimage/release/current/amd64/iso-cd/SHA256SUMS.sign
$ wget -q http://cdimage.debian.org/cdimage/release/current/amd64/iso-cd/SHA256SUMS
## kontrollieren
$ gpg --verify SHA256SUMS.sign SHA256SUMS
gpg: Signature made Sun 13 Jul 2014 05:05:20 AM CEST using RSA key ID 6294BE9B
gpg: Good signature from "Debian CD signing key <debian-cd@lists.debian.org>"
Primary key fingerprint: DF9B 9C49 EAA9 2984 3258 9D76 DA87 E80D 6294 BE9B
$ grep debian-7.6.0-amd64-CD-1.iso SHA256SUMS | sha256sum -c -
debian-7.6.0-amd64-CD-1.iso: OK
## usb-stick ist ein simulierter USB-Stick...
$ cp debian-7.6.0-amd64-CD-1.iso usb-stick
## ... der nicht die Groesse des Images hat, sondern willkuerliche 4GB
$ truncate -s 4g usb-stick
$ cmp usb-stick debian-7.6.0-amd64-CD-1.iso; echo $?
cmp: EOF on debian-7.6.0-amd64-CD-1.iso
1
## nur den die Groesse des Images rausschneiden und hashen
$ head -c "$(stat -c %s debian-7.6.0-amd64-CD-1.iso)" usb-stick | sha256sum
28301be71660ccb6ce6587c2172409d92d09dc55844a98d1b57dde65a49b9f38 -
$ grep debian-7.6.0-amd64-CD-1.iso SHA256SUMS
28301be71660ccb6ce6587c2172409d92d09dc55844a98d1b57dde65a49b9f38 debian-7.6.0-amd64-CD-1.iso
## formatieren
$ head -c "$(stat -c %s debian-7.6.0-amd64-CD-1.iso)" usb-stick | sha256sum | awk -v image=debian-7.6.0-amd64-CD-1.iso '{sub(/-$/,image)}1' | grep -Ff- SHA256SUMS
28301be71660ccb6ce6587c2172409d92d09dc55844a98d1b57dde65a49b9f38 debian-7.6.0-amd64-CD-1.iso
## automatisieren
$ head -c "$(stat -c %s debian-7.6.0-amd64-CD-1.iso)" usb-stick | sha256sum | awk -v image=debian-7.6.0-amd64-CD-1.iso '{sub(/-$/,image)}1' | grep -Ff- -q SHA256SUMS && echo match || echo no match
match
$
Die letzten Zeilen sind interessant, der Rest ist nur Aufbau: Ich bestimme mit
stat -c %s die Groesse des Images in Bytes, welches ich per
-c an
head(1) weitergebe, was genau diese Menge Bytes vom USB-Stick liest [1]. Anschliessend wird gehasht und das der Output so formatiert, wie er in der
SHA256SUMS-Datei vorkommmt (oder eben nicht, bei Abweichungen).
Gruss Cae
[1] man koennte auch
dd bs=1 count="$(stat...)" nehmen, aber das ist ineffizienter, weil man das System zu ineffizient kleinen Blockgroessen zwingt. Alternativ muesste man aufwaendig bzw. fehleranfaellig umrechnen.
head(1) nimmt stattdessen Bloecke von
BUFSIZ Bytes (normalerweise 8k) und hat dann am Ende halt einen nicht ganz gefuellten Block drin.