![如何验证紧凑型闪存设备的读/写完整性?](https://linux22.com/image/1247560/%E5%A6%82%E4%BD%95%E9%AA%8C%E8%AF%81%E7%B4%A7%E5%87%91%E5%9E%8B%E9%97%AA%E5%AD%98%E8%AE%BE%E5%A4%87%E7%9A%84%E8%AF%BB%2F%E5%86%99%E5%AE%8C%E6%95%B4%E6%80%A7%EF%BC%9F.png)
我有一堆紧凑型闪存卡,在专业照片和视频拍摄中大量使用。
我担心其中一个文件会损坏,因为我看到文件(大多数是视频,但偶尔是照片)以难以预测的方式损坏。我绝对肯定这与在取出卡之前卸载卡无关 - 从相机中正确取出卡后,损坏情况立即可见。
问题是,我不知道哪张卡有问题,而且这个问题似乎是间歇性的,所以我不能把它们装满,然后寻找坏文件(即使这样,损坏也并不总是显而易见的——如果坏位在文件的数据部分,它可能不明显)。这个问题很少见,我无法可靠地重现它(除非有客户的工作涉及绝对不能丢失的文件——那么它肯定会发生)。
我可以在保修期内将它们全部 RMA(它们都是 Sandisk 产品,具有终身保修),但我不想这样做(我如何证明发送一批 5 张卡是合理的?在它们送达的那个月我会用什么?)。
我正在寻找一个可以修复这些问题的工具。具体来说,我需要一个可以对整个卡进行写入/读取/写入/读取循环的工具,最好进行完全格式化以删除任何坏位,并让我知道状态(一张卡是否特别坏?其他卡是否都很好?我通常看到的错误级别是多少?)。
我知道这个badblocks
工具,但希望找到更适合 CF 的工具(如果只有几位,希望它能让我映射出不使用的坏区)。如果可能的话,我更喜欢非 Windows 工具。
有没有其他人解决了这个问题,而不是盲目地更换设备?一些可疑的卡还很新。
答案1
可能有更好的工具,但如果您想要简单和免费的,那么你想要 dd。
假设您的非 Windows 是某种 Linux 或 Unix,并且您的卡上没有任何您想要保留的数据,那么您可以尝试以下操作:
将 CF 卡安装到读卡器中,并获取其设备名称。为了回答这个问题,我假设它是 /dev/CF。以 root 身份登录。
将随机数据写入卡中
dd if=/dev/random of=/dev/CF bs=1k
您可以这样做几次(多少次由您决定),如果在完成整张卡之前出现错误,那么就是卡有问题。
您可以通过这种方式检查卡的读取功能:
dd if=/dev/CF of=/dev/null bs=1k
它应该能够准确无误地读取整张卡。
完成后,您需要重新格式化卡。首先,在卡中写入全零,以便可以在相机中格式化它:
dd if=/dev/zero of=/dev/CF bs=1k
这样应该可以无错误地写入整张卡。
我个人的意见是,如果出现任何错误,请将卡退回原厂。我不会尝试通过重新映射坏块来重新使用它。
请注意,即使卡通过了上述测试,也并不意味着它们一定没问题。它可能意味着间歇性错误,而错误出现的时间比您想象的要长一些。另一方面,如果它失败了,那么您就有一些数据可以作为 RMA 决定的依据,还有一些支持文档可以提供给 Sandisk 来证明 RMA 的合理性。
答案2
如果你可以访问 Windows 机器,你可以尝试检查闪存。此链接仅供参考,并附有精美截图(实际网站为俄语)
我个人没有使用过它,但假设截图/评论是真实的,它似乎是测试闪存驱动器的合理方法。