Я купил новый внешний USB 3.0 жесткий диск WD Elements 2 ТБ и решил проверить его
используя инструменты dd, head и 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 для этого.
Однако, когда я использовал команду head, я получил сообщение об ошибке чтения:

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

Я делал эту процедуру раньше для флешек, и она работала без каких-либо ошибок или предупреждений.

Более того, результаты 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,
однако это было так же, как рассчитано ранее. Может быть, есть некоторые
как команда 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#

Опять же для флешек все заработало.

Когда я попытался использовать smartctr, я обнаружил, что этот жесткий диск не поддерживает технологию 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 ответ1

2

Одна из проблем заключается в том, что ваш жесткий диск НЕ ОБЯЗАТЕЛЬНО помещается в полные блоки по 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 = $!"parts; 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 все равно показывал бы его. Лучшими инструментами для тестирования жестких дисков являются 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 и других журналов на наличие ошибок ввода-вывода.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .