
Compré un nuevo disco duro externo USB 3.0Elementos WD 2 TBy decidió comprobarlo
usandodd,cabezaysuma md5herramientas.
Primero puse a cero todo el disco duro:
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
Después de eso, intenté calcular la suma de md5.
Sin embargo, cuando usécabezacomando obtuve un mensaje sobre error de lectura:
root@yurko-laptop:/home/yurko-laptop# head -c 2000365289472 /dev/sdb | md5sum
head: ошибка чтения «/dev/sdb»: Ошибка ввода/вывода
5132d3021b8570c6009877dfd132631f -
Hice este procedimiento antes para memorias USB y funcionó sin errores ni advertencias.
Además,suma md5Los resultados para /dev/sdb
y /dev/zero
fueron diferentes:
yurko-laptop@yurko-laptop:~$ head -c 2000365289472 /dev/zero | md5sum
2635e14edab6b044de7d63dd9a242273 -
La idea principal es que después de poner a cero el disco durosuma md5los resultados deben ser idénticos.
¿Significa que este disco duro está defectuoso o que este enfoque no es útil en ese caso?
Actualizar:
En mi caso fdisk -l /dev/sdb
dije que el tamaño del sector es de 512 bytes:
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#
Entonces:
2000365289472 bytes en total / 512 tamaño de sector = 3906963456 sectores en total,
(20 * 1024 * 1024) bytes / 512 tamaño de sector = 40960 sectores,
3906963456 sectores en total - 40960 sectores = 3906922496 sectores a omitir.
Puse a cero los últimos 20 MB de la unidad y verifiqué la suma md5 nuevamente,
sin embargo, era la misma que la calculada antes. Tal vez haya alguna
manera específicacabezael comando dice /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#
Nuevamente, para memorias USB funcionó.
Cuando intenté usarsmartctr, descubrí que este disco duro no es compatible con la tecnología 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:/#
Aún así, obtuve mucha satisfacción de esta investigación.
Respuesta1
Un problema es que su disco duro NO necesariamente cabe en bloques completos de 16 MB y, como resultado, los últimos, digamos 15 MB del disco, son datos aleatorios de fábrica o alguna basura de formato de Windows, lo que genera un md5 diferente.
¡No hay nada para md5 desde /dev/zero! Es virtual. ¡Primero verifique cuál es el tamaño del sector lógico/físico!
sudo fdisk -l /dev/sdb
Para una unidad nueva, debería ser 4096. Esto significa que puede llenar su unidad con 4096 fragmentos (tamaño de bloque) de ceros por completo, entonces:
dd if=/dev/zero of=/dev/sdb bs=4096 conv=notrunc,noerror & pid=$!
kill -USR1 $pidnumer
Puede omitir "conv=notrunc,noerror & pid=$!" partes; Kill -USR1 $pidnumer le muestra hasta dónde ha progresado la puesta a cero. conv y noerror simplemente garantizan que se pruebe cada bloque y, en caso de error (los errores se muestran en la terminal), la puesta a cero continúa. más @
man dd
También puede intentar poner a cero los últimos 20 M de la unidad calculando cuántos sectores hay y cuántos necesita omitir (verifique fdisk -l para conocer el tamaño del disco en bytes). 2.000.000.000.000 bytes/4096=488281250 sectores en total. 20.000.768 bytes /4096=4883sectores 488281250-4883=488276367 sectores a buscar
dd if=/dev/zero of=/dev/sdb bs=4096 seek=488276367 conv=notrunc,noerror & pid=$!
luego verifique el md5 nuevamente. Si hubo errores de entrada/salida, dd lo mostraría de todos modos. Las mejores herramientas de prueba de disco duro son smartmontools
smartctl -a /dev/sdb Busque sectores_reasignados, recuento de sectores reasignados, sectores pendientes y sin conexión incorregibles. Y registro de errores. Cualquier valor de los mencionados anteriormente es una mala noticia y pone el disco duro en garantía. También puedes probar bonnie++, por ejemplo, crear una partición en el disco USB (no importa el tipo), formatearlo y montarlo, por ejemplo, en /dev/sdb1.
bonnie++ -u root -d /mnt/sdb1 -n 10:100000000:100:4096 -x 3 -m 5gb
Y verifique los resultados de bonnie y también /var/log/syslog y otros registros para detectar errores de entrada y salida.