Piktogramm
Admiral
- Registriert
- Okt. 2008
- Beiträge
- 8.849
Soll:
Script soll Blöcke auf Laufwerk schreiben und danach lesen. Die Hashes der gelesenen Blöcke berechnen und ausgeben. Dazu wird ein 512B Zufallsblock aus urandom genutzt der zu einem 4MiB Block zusammengesetzt wird (data.bin). Diese Zufallsblock wird geschrieben und anschließend gelesen sowie gehasht. Bei Funktionierenden Laufwerken sollten alle Hashes über alle Blöcke konstant sein.
Ist:
Der "Witz" ist jedoch, dass die Blöcke beim lesen nicht die selben Hashes liefern
ergibt:
Probleme
Script soll Blöcke auf Laufwerk schreiben und danach lesen. Die Hashes der gelesenen Blöcke berechnen und ausgeben. Dazu wird ein 512B Zufallsblock aus urandom genutzt der zu einem 4MiB Block zusammengesetzt wird (data.bin). Diese Zufallsblock wird geschrieben und anschließend gelesen sowie gehasht. Bei Funktionierenden Laufwerken sollten alle Hashes über alle Blöcke konstant sein.
Ist:
Der "Witz" ist jedoch, dass die Blöcke beim lesen nicht die selben Hashes liefern
Code:
#!/bin/bash
#writesize in MB
writesize=4
writesize=$(( ${writesize} * 1024 * 1024))
blocksize=$((512 * 1024))
#blocksize=$(blockdev --getbsz ${1})
devsize=$((128 * 1024 * 1024))
#devsize=$(blockdev --getsize64 ${1})
cnt=$(($writesize / $blocksize))
rnd=$(dd if=/dev/urandom bs=$blocksize count=1 2>/dev/null)
rm data.bin 2>/dev/null
for ((i=1; i<=${cnt}; i++))
do
cat <<< "$rnd" >> data.bin
done
sha256sum -b data.bin > hash.sha256
cnt=$((${devsize}/${writesize}))
for ((i=0; i<=${cnt}; i++))
do
echo "write $i of $cnt" 1>&2
dd if=data.bin of=${1} bs=$writesize seek=$i count=1 oflag=sync 2>/dev/null
done
sync
echo "initial hash $(cat data.bin | sha256sum -b)"
for ((i=0; i<=${cnt}; i++))
do
echo "loop $i $(dd if=${1} bs=$writesize count=1 skip=$i oflag=sync 2>/dev/null | sha256sum -b)"
done
ergibt:
Code:
$ sudo ./checkSD.sh /dev/sdb
./checkSD.sh: line 12: warning: command substitution: ignored null byte in input
write 0 of 32
[*]
write 32 of 32
initial hash e1bcf90573d5c006def1a372a25177181f84d3df4fb942cff6d1603431540b96 *-
loop 0 6372241bc253916fa5c958b4b10709767b4836d556d02f6067b713e70a9f83e6 *-
[*]
loop 8 6372241bc253916fa5c958b4b10709767b4836d556d02f6067b713e70a9f83e6 *-
loop 9 3283f693210a0e0305d78f7ba087c770490a14da09713ecbabae83b7060532e4 *-
loop 10 5a440fb8e54242dc95d18654bb16256d5c42cd79e69b37bc5e7773dd006d58d2 *-
[*]
loop 18 5a440fb8e54242dc95d18654bb16256d5c42cd79e69b37bc5e7773dd006d58d2 *-
loop 19 b79fca8b0aae76939a4f274cc6ca6e1e64cb1020e6eb6871c0dbc61c0a52c7cf *-
loop 20 5a440fb8e54242dc95d18654bb16256d5c42cd79e69b37bc5e7773dd006d58d2 *-
loop 21 5a440fb8e54242dc95d18654bb16256d5c42cd79e69b37bc5e7773dd006d58d2 *-
loop 22 5a440fb8e54242dc95d18654bb16256d5c42cd79e69b37bc5e7773dd006d58d2 *-
loop 23 153f4d00817f520e8cbc1c6bd76963e6b8194e0bf7234bf35df0e0f673c864a9 *-
loop 24 5a440fb8e54242dc95d18654bb16256d5c42cd79e69b37bc5e7773dd006d58d2 *-
loop 25 5a440fb8e54242dc95d18654bb16256d5c42cd79e69b37bc5e7773dd006d58d2 *-
loop 26 5a440fb8e54242dc95d18654bb16256d5c42cd79e69b37bc5e7773dd006d58d2 *-
loop 27 5a440fb8e54242dc95d18654bb16256d5c42cd79e69b37bc5e7773dd006d58d2 *-
loop 28 5a440fb8e54242dc95d18654bb16256d5c42cd79e69b37bc5e7773dd006d58d2 *-
loop 29 5a440fb8e54242dc95d18654bb16256d5c42cd79e69b37bc5e7773dd006d58d2 *-
loop 30 5a440fb8e54242dc95d18654bb16256d5c42cd79e69b37bc5e7773dd006d58d2 *-
loop 31 bbcb72c59d04eeea6ab6a45832d708ac970e0099010aa26087794d81e6e0532c *-
loop 32 5a440fb8e54242dc95d18654bb16256d5c42cd79e69b37bc5e7773dd006d58d2 *-
Probleme
- Der Hash über data.bin passt zu keinem Hash vom Laufwerk. Beim direkten Vergleich vom hexdumb von data.bin und
dd if=/dev/sdb bs=$((4 * 1024 * 1024)) count=1 | hexdump -C
wird auch deutlich wieso. Der Hexdumb ist zum Ende hin je ein Anderer.
Ich würde gern wissen, wie ich wirklich 1 zu 1 die Daten aus data.bin auf Laufwerke bekomme - Die Hashes über die Blöcke des Laufwerkes bleiben im Verlauf nicht konstant, jedoch manchmal schon. Wenn da jemand eine Erklärung/ein Fix fürs Script hat wäre ich dankbar!