如何检查存储介质(硬盘或闪存驱动器)的完整性?

我遇到过(个人或代理)一堆存储介质,这些介质在他们的生活中出现了物理问题。 一段时间后,硬盘,固态硬盘和其他闪存存储介质都会出现故障。 USB闪存驱动器和闪存卡的情况更糟,因为大量的供应商具有较差的闪存单元和闪存控制器质量。

如何可靠地检测存储驱动器是否遭受物理损坏?

请注意,此问题与文件系统完整性无关(可以使用fsck(8)进行检查)。

在整个答案中,我将假设存储驱动器在路径/dev/sdc处显示为块设备。 要在我们当前的设置中查找存储驱动器的路径,请使用:

  • Gnome磁盘 安装Gnome磁盘 (以前是Gnome Disk Utility,又名palimpsest ),如果GUI可用,或者
  • 在终端上查看lsblkls -l /dev/disk/by-id的输出,并尝试按大小,分区,制造商和型号名称查找正确的设备。

基本检查

  • 只能检测到完全没有响应的媒体
  • 几乎是瞬间的(除非介质被旋转或破碎)
  • 安全
  • 适用于只读媒体(例如CD,DVD,BluRay)

有时存储介质根本就拒绝工作。 它仍然作为内核和磁盘管理器的块设备出现,但它的第一个扇区保存分区表是不可读的。 这可以通过以下方式轻松validation:

 sudo dd if=/dev/sdc of=/dev/null count=1 

如果此命令导致有关“输入/输出错误”的消息,则我们的驱动器已损坏或无法按预期与Linux内核交互。 在前一种情况下,运气不错,拥有适当装备的实验室的数据恢复专家可以挽救其内容。 在后一种情况下,不同的操作系统值得一试。 (我遇到了在没有特殊驱动程序的情况下在Windows上运行的USB驱动器,但在Linux或OS X上却没有。)

SMART自检

  • 可调整的彻底性
  • 瞬间变慢或变慢(取决于测试的彻底性)
  • 安全
  • 警告在不久的将来可能会失败

可以通过SMART查询支持它的设备,或者指示它们执行不同彻底性的完整性自检。 这通常是最佳选择,但通常仅适用于(非古老)硬盘和固态硬盘。 大多数可移动闪存介质不支持它。

更多资源和说明:

  • 在这个问题上回答SMART
  • 如何在Ubuntu 14.04到16.10上检查驱动器的SMART状态?

只读检查

  • 仅检测一些闪存介质错误
  • 对硬盘非常可靠
  • 安全
  • 适用于只读媒体(例如CD,DVD,BluRay)

要在不写入的情况下测试整个设备的读取完整性,我们可以使用这样的badblocks(8)

 sudo badblocks -b 4096 -c 4096 -s /dev/sdc 

此操作可能需要很长时间,尤其是在存储驱动器实际损坏的情况下。 如果错误计数超过零,我们就会知道存在坏块。 如果我们对坏块的确切数量(可能是位置)不感兴趣,我们可以随时安全地中止操作(即使在电源故障期间也非常有力)。 使用选项-e 1可以在出错时自动中止。

高级用法注意事项:如果我们想重用e2fsck的输出,我们需要将块大小( -b )设置为包含文件系统的大小。 我们还可以调整一次测试的数据量( -c ,以块为单位)以提高吞吐量; 对于大多数设备,16 MiB应该没问题。

非破坏性读写检查

  • 非常彻底
  • 最慢
  • 非常安全(除非电源故障或间歇性内核恐慌)

有时 – 尤其是使用闪存介质 – 只有在尝试写入时才会出现错误。 (这不会可靠地发现(闪存)媒体,它宣传的尺寸比实际尺寸大;请使用Fight Flash Fraud 。)

  • 切勿装有文件系统的驱动器上使用它! badblocks无论如何都拒绝操作,除非你强迫它。

  • 不要强行中断此操作! Ctrl + C (SIGINT / SIGTERM)并等待优雅的提前终止是可以的,但killall -9 badblocks (SIGKILL)不是。 在强制终止时, badblocks无法恢复当前测试的块范围的原始内容,并将使其被垃圾数据覆盖并可能损坏文件系统。

要使用非破坏性读写检查,请在上面的badblocks命令中添加-n选项。

破坏性读写检查

  • 非常彻底
  • 慢点
  • 擦除驱动器上的所有数据

如上所述,但是在执行写入测试之后没有恢复先前的驱动器内容,因此它更快一些。 由于数据无论如何都被删除,强制终止仍然没有(额外的)负面后果。

要使用破坏性读写检查,请将-w选项添加到上述badblocks命令中。

IMO smartctl 安装smartctl 是一个更好的工具。

您可能必须先安装它

 sudo apt-get install smartmontools 

然后

 sudo smartctl -a /dev/sda | less 

打印驱动器运行状况数据,属性和可用的测试结果。 要减少退出,请键入q 。 另外

 sudo smartctl -H /dev/sda 

只打印健康数据。

在背景中开始新的短片(几分钟)或长片(长达数小时)自我测试:

 sudo smartctl -t [short|long] 

GSsmartControl 安装GSsmartControl 和Gnome磁盘 安装Gnome磁盘 如果您愿意,是图形前端。

http://gsmartcontrol.sourceforge.net/

也可以看看
https://help.ubuntu.com/community/Smartmontools
http://www.cyberciti.biz/tips/linux-find-out-if-harddisk-failing.html
http://www.techrepublic.com/blog/linux-and-open-source/using-smartctl-to-get-smart-status-information-on-your-hard-drives/

F3(Fight Flash Fraud)是另一个选项,它应该另外检测伪闪存驱动器(闪存驱动器的实际容量只是广告容量的一小部分):

  1. 插入您的驱动器
  2. 安装F3

     sudo apt-get install f3 
  3. 将测试数据写入驱动器上的可用空间

     f3write /media/$USER/D871-DD7C/ 
  4. 阅读测试数据

     f3read /media/$USER/D871-DD7C/ 

坏块运行良好,但它不是为检测虚假闪存驱动器而设计的, 可能不会为它们报告任何错误 。

您可以测试读取整个磁盘,同时显示进度指示器:

 time sudo pv /dev/sdc >/dev/null 

某些磁盘问题会表现为报告的I / O错误。 由于进度指示器,这比dd好一点,因为命令行界面更标准,并且更容易出错 。 请注意, pv基本上是cat增强版本。 它可能默认不安装,但可以使用sudo apt-get install pv

类似的方法是使用几个特别了解磁盘I / O错误的可用工具之一来读取磁盘 – 并具有“努力挽救数据”的function。 在包管理器中搜索ddrescue