Sprawdzanie dysku twardego za pomocą narzędzi dd i md5sum

0

Kupiłem nowy zewnętrzny dysk twardy USB 3.0 WD Elements 2 TB i postanowiłem to sprawdzić
za pomocą narzędzi dd , head i md5sum .

Najpierw wyzerowałem wszystkie dyski twarde:

root@yurko-laptop:/home/yurko-laptop# dd if=/dev/zero of=/dev/sdb bs=16M
dd: запись «/dev/sdb»: На устройстве кончилось место
119232+0 записей считано
119231+0 записей написано
скопировано 2000365289472 байта (2,0 TB), 91532,5 c, 21,9 MB/c

Następnie próbowałem obliczyć dla niego sumę md5.
Jednak gdy użyłem polecenia head , otrzymałem komunikat o błędzie odczytu:

root@yurko-laptop:/home/yurko-laptop# head -c 2000365289472 /dev/sdb | md5sum
head: ошибка чтения «/dev/sdb»: Ошибка ввода/вывода
5132d3021b8570c6009877dfd132631f  -

Zrobiłem już tę procedurę dla pamięci USB i działała bez żadnych błędów i ostrzeżeń.

Ponadto wyniki md5sum dla /dev/sdbi /dev/zerobyły różne:

yurko-laptop@yurko-laptop:~$ head -c 2000365289472 /dev/zero | md5sum
2635e14edab6b044de7d63dd9a242273  -

Główną ideą jest to, że po wyzerowaniu dysku twardego wyniki md5sum muszą być identyczne.

Czy to oznacza, że ​​ten dysk twardy jest zły lub takie podejście nie jest przydatne w takim przypadku?


Aktualizacja:

W moim przypadku fdisk -l /dev/sdbpowiedział, że rozmiar sektora wynosi 512 bajtów:

root@yurko-laptop:/home/yurko-laptop# fdisk -l /dev/sdb

Disk /dev/sdb: 2000.4 GB, 2000365289472 bytes
255 heads, 63 sectors/track, 243197 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/sdb doesn't contain a valid partition table
root@yurko-laptop:/home/yurko-laptop#

Więc:

2000365289472 bajtów ogółem / rozmiar sektora 512 = 3906963456 sektorów ogółem,
(20 * 1024 * 1024) bajtów / rozmiar sektora 512 = 40960 sektorów,
3906963456 sektorów ogółem - 40960 sektorów = 3906922496 sektorów do pominięcia.

Wyzerowałem ostatnie 20 MB dysku i ponownie sprawdziłem sumę md5,
jednak była ona taka sama, jak wcześniej obliczona. Może jest jakiś
konkretny sposób, w jaki brzmi polecenie head/dev/sdb :

root@yurko-laptop:/home/yurko-laptop# dd if=/dev/zero of=/dev/sdb seek=3906922496
dd: запись в «/dev/sdb»: На устройстве кончилось место
40961+0 записей считано
40960+0 записей написано
скопировано 20971520 байт (21 MB), 4,05176 c, 5,2 MB/c
root@yurko-laptop:/home/yurko-laptop# head -c 2000365289472 /dev/sdb | md5sum
head: ошибка чтения «/dev/sdb»: Ошибка ввода/вывода
5132d3021b8570c6009877dfd132631f  -
root@yurko-laptop:/home/yurko-laptop#

Ponownie, w przypadku pendrive'a zadziałało.

Kiedy próbowałem użyć smartctr , dowiedziałem się, że ten dysk twardy nie obsługuje technologii SMART:

root@yurko-laptop:/# smartctl -a -d scsi /dev/sdb
smartctl 5.40 2010-07-12 r3124 [i686-pc-linux-gnu] (local build)
Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net

Device: WD       Elements 10B8    Version: 1007
Serial number: WX21AB3Y5219    
Device type: disk
Local Time is: Sun Aug 17 14:42:49 2014 EEST
Device does not support SMART

Error Counter logging not supported
No self-tests have been logged
root@yurko-laptop:/# 

Mimo wszystko czerpałem wiele satysfakcji z tego śledztwa.

Jurko
źródło

Odpowiedzi:

2

Jednym z problemów jest to, że dysk twardy niekoniecznie mieści się w pełnych 16 MB blokach, w wyniku czego ostatnim, powiedzmy 15 MB dysku, są losowe dane z fabryki lub jakieś śmieci formatujące okna, które generują inny md5.

Nie ma nic do md5 z / dev / zero! Jest wirtualny. Najpierw sprawdź, jaki jest rozmiar sektora logicznego / fizycznego!

 sudo fdisk -l /dev/sdb

W przypadku nowego dysku powinno to być 4096. Oznacza to, że możesz całkowicie wypełnić swój dysk 4096 fragmentami (rozmiar bloku) zer, a następnie:

dd if=/dev/zero of=/dev/sdb bs=4096 conv=notrunc,noerror & pid=$!
kill -USR1 $pidnumer

Możesz pominąć „conv = notrunc, noerror & pid = $!” Części; pidnumer kill -USR1 $ pokazuje, jak daleko posunęło się zerowanie. conv i noerror po prostu zapewnia, że ​​każdy blok jest sprawdzany, a po błędzie (błędy są wyświetlane w terminalu) zerowanie jest kontynuowane. więcej @

man dd

Możesz także spróbować wyzerować ostatnie 20 MB dysku, obliczając, ile jest sektorów i ile trzeba pominąć (sprawdź rozmiar dysku w bajtach na fdisk -l). 2 000 000 000 000 bajtów / 4096 = 488281250 sektorów ogółem. 20 000 776 bajtów / 4096 = 4883 sektorów 488281250-4883 = 488276367 sektorów do wyszukania

 dd if=/dev/zero of=/dev/sdb bs=4096 seek=488276367 conv=notrunc,noerror & pid=$!

następnie sprawdź ponownie md5. Jeśli wystąpiły błędy wejścia / wyjścia, dd i tak by je pokazał. Lepsze narzędzia do testowania dysku twardego to smartmontools

smartctl -a / dev / sdb Poszukaj Reallocated_sectors, ponownie przydzielonej liczby sektorów, niemożliwych do naprawienia offline, sektorów oczekujących. I dziennik błędów. Wszelkie wartości wyżej wymienionych są złymi wiadomościami i powodują, że dysk twardy jest objęty gwarancją. możesz także spróbować bonnie ++, na przykład utworzyć partycję na dysku USB (nie ważne jaki typ), sformatować ją i zamontować na przykład na / dev / sdb1

bonnie++ -u root -d /mnt/sdb1 -n 10:100000000:100:4096 -x 3 -m 5gb

I sprawdź wyniki Bonnie, a także / var / log / syslog i innych dzienników pod kątem błędów danych wyjściowych.

DebianJunkie
źródło