使用Linux对SD卡进行压力测试
昨天,我与某人就我的回答的逻辑和/或准确性进行了一次小辩论,即,在体面(GB +)大小的SD卡上记录和维护fs元数据可能永远不足以使卡磨损在合理的时间内(数年和数年)。反驳的理由似乎是我一定错了,因为网上有很多关于SD卡磨损的故事。 由于我的设备中确实装有SD卡,其中包含24/7保留的rw根文件系统,因此我之前对前提条件进行了测试,令我感到满意。我对测试进行了一些调整,重复了一下(实际上是使用同一张卡片),并在这里进行介绍。我有两个核心问题: 是我曾经试图破坏该卡可行的,记住它的目的是不断重现的影响,重新编写方法小数据量? 我用来验证卡的方法仍然可行吗? 我将问题而不是SO或SuperUser放在这里,因为对第一部分的异议可能必须断言我的测试并未真正按照我确定的方式写入卡,并且断言这需要一些时间linux的特殊知识。 [也可能是SD卡使用某种类型的智能缓冲或高速缓存,因此对同一位置的重复写入将在不太容易磨损的位置进行缓冲/高速缓存。我在任何地方都没有发现任何迹象,但是我正在SU上询问有关问题] 测试背后的想法是将卡上的同一小块写入数百万次。这远远超出了此类设备可以维持多少个写入周期的任何要求,但是假定损耗均衡是有效的,如果卡的大小合适,那么数百万次此类写入仍然无关紧要,因为“同一块”会字面上不是同一个物理块。为此,我需要确保每次写入都确实刷新到硬件和相同的外观位置。 为了刷新到硬件,我依靠POSIX库调用fdatasync(): #include <stdio.h> #include <string.h> #include <fcntl.h> #include <errno.h> #include <unistd.h> #include <stdlib.h> // Compile std=gnu99 #define BLOCK 1 << 16 int main (void) { int in = open ("/dev/urandom", O_RDONLY); if (in < 0) { fprintf(stderr,"open in %s", strerror(errno)); exit(0); } …