如何检查存储介质(硬盘或闪存驱动器)的完整性?
我遇到过(个人或代理)一堆存储介质,这些介质在他们的生活中出现了物理问题。 一段时间后,硬盘,固态硬盘和其他闪存存储介质都会出现故障。 USB闪存驱动器和闪存卡的情况更糟,因为大量的供应商具有较差的闪存单元和闪存控制器质量。
如何可靠地检测存储驱动器是否遭受物理损坏?
请注意,此问题与文件系统完整性无关(可以使用fsck(8)
进行检查)。
在整个答案中,我将假设存储驱动器在路径/dev/sdc
处显示为块设备。 要在我们当前的设置中查找存储驱动器的路径,请使用:
- Gnome磁盘 (以前是Gnome Disk Utility,又名
palimpsest
),如果GUI可用,或者 - 在终端上查看
lsblk
和ls -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 是一个更好的工具。
您可能必须先安装它
sudo apt-get install smartmontools
然后
sudo smartctl -a /dev/sda | less
打印驱动器运行状况数据,属性和可用的测试结果。 要减少退出,请键入q
。 另外
sudo smartctl -H /dev/sda
只打印健康数据。
在背景中开始新的短片(几分钟)或长片(长达数小时)自我测试:
sudo smartctl -t [short|long]
GSsmartControl 和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)是另一个选项,它应该另外检测伪闪存驱动器(闪存驱动器的实际容量只是广告容量的一小部分):
- 插入您的驱动器
-
安装F3
sudo apt-get install f3
-
将测试数据写入驱动器上的可用空间
f3write /media/$USER/D871-DD7C/
-
阅读测试数据
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
。