使用 dd 和 md5sum 工具检查硬盘

使用 dd 和 md5sum 工具检查硬盘

我买了新的外置 USB 3.0 硬盘WD Elements 2 TB并决定
使用以下方法检查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 MB 归零,然后再次检查 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

一个问题是您的硬盘不一定能容纳完整的 16MB 块,因此,最后的 15MB 是来自工厂的随机数据或一些 Windows 格式化垃圾,从而生成不同的 md5。

/dev/zero 中没有任何东西需要进行 md5 操作!它是虚拟的。首先检查逻辑/物理扇区大小!

 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 $pidnumeric 显示归零的进展情况。conv 和 noerror 仅确保尝试每个块,并且一旦出现错误(错误显示在终端中),归零将继续。更多 @

man dd

您还可以尝试通过计算有多少个扇区以及需要跳过多少个扇区来将驱动器的最后 20M 清零(检查 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 和其他日志中的输入输出错误。

相关内容