
Я купил новый внешний жесткий диск USB 3.0WD Elements 2 ТБи решил проверить это
с помощьюдд,головаиmd5sumинструменты.
Сначала я обнулил весь жесткий диск:
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
После этого я попытался вычислить md5 сумму для него.
Однако когда я использовалголовакоманду, в которой я получил сообщение об ошибке чтения:
root@yurko-laptop:/home/yurko-laptop# head -c 2000365289472 /dev/sdb | md5sum
head: ошибка чтения «/dev/sdb»: Ошибка ввода/вывода
5132d3021b8570c6009877dfd132631f -
Я уже проделывал эту процедуру для USB-накопителей, и все прошло без ошибок и предупреждений.
Более того,md5sumрезультаты для /dev/sdb
и /dev/zero
были разными:
yurko-laptop@yurko-laptop:~$ head -c 2000365289472 /dev/zero | md5sum
2635e14edab6b044de7d63dd9a242273 -
Основная идея заключается в том, что после обнуления жесткого дискаmd5sumРезультаты должны быть идентичными.
Означает ли это, что этот жесткий диск неисправен или этот подход в данном случае бесполезен?
Обновлять:
В моем случае fdisk -l /dev/sdb
указано, что размер сектора составляет 512 байт:
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#
Так:
Всего 2000365289472 байта / 512 размеров секторов = всего 3906963456 секторов,
(20 * 1024 * 1024) байта / 512 размеров секторов = 40960 секторов,
всего 3906963456 секторов - 40960 секторов = 3906922496 секторов для пропуска.
Я обнулил последние 20 МБ диска и снова проверил md5-сумму,
однако она оказалась такой же, как и рассчитанная ранее. Может быть, есть какие-то
конкретные способыголовакоманда гласит /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#
Опять же, для USB-накопителей это сработало.
Когда я пытался использоватьсмартктр, я обнаружил, что этот жесткий диск не поддерживает технологию 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:/#
Тем не менее, я получил огромное удовлетворение от этого расследования.
решение1
Одна из проблем заключается в том, что ваш жесткий диск НЕ обязательно вмещает полные блоки по 16 МБ, и в результате последние, скажем, 15 МБ на диске, представляют собой случайные данные с завода или какой-то мусор от форматирования Windows, который генерирует другой md5.
Нет ничего в md5 от /dev/zero! Он виртуальный. Сначала проверьте, какой логический/физический размер сектора!
sudo fdisk -l /dev/sdb
Для нового диска это должно быть 4096. Это значит, что вы можете полностью заполнить свой диск 4096 блоками (размером блока) нулей, тогда:
dd if=/dev/zero of=/dev/sdb bs=4096 conv=notrunc,noerror & pid=$!
kill -USR1 $pidnumer
Вы можете опустить части "conv=notrunc,noerror & pid=$!"; kill -USR1 $pidnumer показывает, насколько далеко продвинулось обнуление. conv и noerror просто гарантируют, что каждый блок будет проверен, и в случае ошибки (ошибки отображаются в терминале) обнуление продолжится. more @
man dd
Вы также можете попробовать просто обнулить последние 20 МБ диска, вычислив, сколько секторов там есть и сколько нужно пропустить (проверьте fdisk -l для размера диска в байтах). 2 000 000 000 000 байт/4096=488281250 секторов всего. 20 000 768 байт/4096=4883секторов 488281250-4883=488276367 секторов для поиска
dd if=/dev/zero of=/dev/sdb bs=4096 seek=488276367 conv=notrunc,noerror & pid=$!
затем проверьте md5 снова. Если были ошибки ввода/вывода, dd бы их все равно показал. Лучшие инструменты для проверки hdd — smartmontools
smartctl -a /dev/sdb Посмотрите на Reallocated_sectors, количество перераспределенных секторов, неисправимые офлайн-секторы, ожидающие секторы. И журнал ошибок. Любые значения из вышеперечисленных — плохие новости, и вы можете отправить жесткий диск на гарантию. Также вы можете попробовать bonnie++, например, создать раздел на USB-диске (неважно, какой тип), отформатировать его и смонтировать, например, в /dev/sdb1
bonnie++ -u root -d /mnt/sdb1 -n 10:100000000:100:4096 -x 3 -m 5gb
И проверьте результаты bonnie, а также /var/log/syslog и другие журналы на наличие ошибок ввода-вывода.