如何在 Linux 中检查 U 盘的物理健康状况?

val*_*lpa 106 linux usb-flash-drive

如何检查U盘的健康状态?

我如何知道 USB 损坏无法修复或可修复?

Bre*_*man 83

无法在 USB 记忆棒中查询类似 SMART 的参数;我不知道有任何记忆棒支持这样做,即使是通过公开可用的专有软件。您能做的最好的事情是检查您是否可以使用 badblocks.

https://en.wikipedia.org/wiki/Badblocks

您想指定其中一个写入测试,它将擦除棒上的所有数据;先备份。

dmesg插入U盘后通过查看找到设备;您将看到设备名称(最有可能是 sd_,即 sdc、sdd 等)和制造商信息。确保您使用的是正确的设备!

如果棒是用有效的文件系统格式化的,您可能必须先使用unmount它。

示例语法,对于枚举为 /dev/sdz 的 U 盘,输出进度信息,数据破坏性写入测试和错误日志写入 usbstick.log:

sudo badblocks -w -s -o usbstick.log /dev/sdz
Run Code Online (Sandbox Code Playgroud)

假设它通过了,您需要在之后重新分区和重新格式化棒;此测试将擦除棒上的所有内容。任何故障都表明设备的内存控制器出现故障,或者它已用完备用块以重新映射故障块。在这种情况下,设备的任何区域都不可信。

  • badblocks 可能是最好的选择。说“不值得”的评论完全错过了一些非常需要的情况(例如,一家公司可能购买了商品闪存驱动器,并想看看他们被骗的程度......) (26认同)
  • 正如链接的维基百科文章中所指出的,还有“e2fsck -c”使用“坏块”并有效地将这些坏块从文件系统中隐藏起来,从而避免损坏的写入。但是应该注意的是,如果磁盘有新的坏块,它可能会损坏,新的可能会在以后出现,这意味着它的寿命正在缩短,您应该考虑更换它。 (2认同)

sda*_*aau 24

通过[ubuntu] Error Check USB Flash Drive,我最终找到了这个,这可能会有所帮助:

我访问了博客 Fight Flash Fraud 和 SOSFakeFlash,它们推荐了软件 H2testw(请参阅此处或此处)来测试闪存。我下载了 H2testw 并发现它有两个问题:(1)它仅适用于 Windows,以及(2)它不是开源的。然而,它的作者很友好地包含了一个文本文件来解释它的作用;这个页面是关于我对该算法的 GPLv3 实现。
我的实现既简单又可靠,我不知道 F3 与 H2testw 相比究竟如何,因为我从未运行过 H2testw。我将我的实现称为 F3,它是 Fight Flash Fraud 或 Fight Fake Flash 的缩写。

@pbhj 的附录:F3 位于 Ubuntu 存储库中。它有两部分,f3write 将 1GB 文件写入设备,f3read 尝试在之后读取它们。通过这种方式测试写入和有效读取数据的容量和能力。

  • @Zaz 据我所知,[坏块不是为检测假闪存驱动器而设计的](http://oss.digirati.com.br/f3/#users_notes) 并且[可能不会为他们报告任何错误]( http://osdir.com/ml/zfs-discuss/2014-10/msg00312.html)。 (5认同)
  • F3 与“坏块”相比有什么优势吗? (4认同)
  • 我看到了典型用户的一些优势:(1)它(快速)检测到假闪存,正如 @bmaupin 提到的,坏块不能可靠地(也不能快速)做到这一点,并且能够“修复”假闪存,(​​2 )来检查整个驱动器的运行状况,它与坏块相当,但它不需要root权限,并且它提供了稍微更细致的输出,(3)如果您不需要检查所有扇区,则不必完全擦除并重新格式化驱动器。 (2认同)

Mat*_*ons 14

我想这取决于故障模式。它们便宜是有原因的。

作为 USB 设备,通过 Windows 中的设备管理器或 Linux 中的 dmesg 输出观察总线会告诉您该设备是否被识别为已插入。如果不是,则是板上的控制器或物理连接坏了。

如果设备被识别为已插入,但没有被识别为磁盘控制器(我不知道这是怎么发生的,但是......)那么控制器就会被击中。

如果它被识别为磁盘驱动器,但您无法挂载它,则可以通过 fdisk 修复它并重写分区表,然后创建另一个文件系统。

如果您正在寻找SMART的等价物,那么您将找不到它。拇指驱动器控制器很便宜。它们是商品存储,并不意味着具有现代驱动器所具有的正常故障保护和智能。


Lee*_*bar 6

一路走到今天,这个线程提出了一些问题。

-这需要多长时间(暗示让它在一夜之间运行的讨论)。

我目前正在使用 测试 USB 3.0 128G Sandisk sudo badblocks -w -s -o,它连接到我在较旧的 Athlon 64x2 中的 USB 3/USBC PCIe 卡。因此,在 PCIe 上将 USB3 转换为 USB3 应该相当快。

这是我完成 33% 时的控制台命令行:

Testing with pattern 0xaa: 33.35% done, 49:47 elapsed. (0/0/0 errors)

再后来:

Testing with pattern 0xaa: 54.10% done, 1:17:04 elapsed. (0/0/0 errors)

接下来是这个部分:

Reading and comparing: 43.42% done, 2:23:44 elapsed. (0/0/0 errors)

这个过程重复 oxaa,然后是 0x55、0xff,最后是 0x00。

ArchLinux 给出了一个不合格的声明:

For some devices this will take a couple of days to complete.

注意:测试是在晚上8:30左右开始的,测试在第二天早上8:45之前完成,我的情况大约在12小时内完成。

-破坏性测试不是唯一可能的方法。

维基百科提供了这样的声明:

badblocks -nvs /dev/sdb This would check the drive "sdb" in non-destructive read-write mode and display progress by writing out the block numbers as they are checked.

我当前的发行版手册页确认 -n 是非破坏性的。

-n Use non-destructive read-write mode. By default only a non- destructive read-only test is done.

最后, 这是不值得的。陈述。

总结一下,基于一个闪存芯片中数十亿个存储站点的情况,故障是一个单元已经被写入和擦除了数万次,现在正在发生故障。当一项测试显示一个单元出现故障时,请记住您添加和删除的每个文件都在运行这些周期。

这里的想法是,当 1 个单元发生故障时,更多的单元也会达到相同的故障点。今天有一个单元发生故障,但您正常使用它一段时间后,又有 3 个单元发生故障,然后又有 24 个单元发生故障,然后是 183 个,不知不觉中,内存阵列布满了坏点。在您的可用容量开始下降并最终迅速下降之前,只有这么多细胞会死亡。你怎么知道更多的细胞失败了?所以,这里的帖子通过说一旦你有一个坏的单元,你就完成了值得信赖的存储,从而保护你的数据。您的使用时间可能仍会持续数月。

这是你的数据。

HTH