如何检测即将发生的 MTD 设备故障

如何检测即将发生的 MTD 设备故障

我们编写在第三方设备上运行的软件。在我们支持的设备之一上,制造商告诉我们不要写入闪存驱动器,否则我们将面临耗尽其支持的有限写入操作的风险。不幸的是,我们应用程序的要求之一是在启动过程中保留一些数据,我们没有其他选择。

我不知道设备内部的驱动器是什么,也不知道它是如何配置的,所以一个问题是我如何才能找到这些信息?我设法找到的一些信息: bash-3.2$ df | grep mtd /dev/mtdblock5 65536 7824 57712 12% /apps

bash-3.2$ dmesg | grep -i mtd Kernel command line: root=/dev/mtdblock4 rootfstype=jffs2 rw ip=none console= mem=128M init=/sbin/init mtdparts=mtd:512k(bootloader),512k(env),2M(kernel_a),2M(kernel_b),59M(filesystem),64M(user) loglevel=3 panic=5 reboot=h 6 cmdlinepart partitions found on MTD device <NULL> Creating 6 MTD partitions on "<NULL>":

我查看了 proc 和 sysfs,没有发现任何有用的东西。设备环境没有安装任何我能找到的有用工具,例如 hdparam、lshw 等。

另一个问题是是否有任何启发式软件可以用来检测“写入限制”是否正在接近?

最后,在写入磁盘时是否可以观察到任何最佳实践以限制负面影响?例如,小突发写入是否比持续写入操作更好?是数据吞吐量的问题还是文件系统的问题?如果我打开一个文件而不关闭它并继续在那里传输数据,这是否比我为每条新数据打开、写入和关闭更好?

非常感谢您提供的任何帮助,丹。

答案1

如果我打开一个文件而不关闭它并继续在那里传输数据,这是否比我为每条新数据打开、写入和关闭更好?

否。关闭或不关闭缓冲输出的文件对于是否/何时可以从文件中读取数据产生影响,但这与是否/何时将其物理写入磁盘不同。

换句话说,当您刷新文件句柄(例如通过关闭它)时,从同一文件读取的单独进程现在将能够读取您刷新到文件的数据,但这并不一定意味着文件已经被写入由内核输出。如果它正在使用,则它可能已被缓存,并且可能只有该缓存受到影响。

sync当在整个文件系统上调用时,系统磁盘缓存将被刷新(-> 写出到设备) 。 AFAIK 对于单个文件没有办法做到这一点。

另一个问题是是否有任何启发式软件可以用来检测“写入限制”是否正在接近?

我非常怀疑这一点,特别是因为您对该设备不太了解。这样的数字将是近似和保守的,这就是为什么我的图像设备通常不会在预定义的点发生故障:它们在发生故障时就会发生故障,并且因为它们可以如果在任何时候失败,您不妨尽您所能检查并防止因此造成的损失,而不是假设在~N次操作之前一切都很好。

只要可行就运行fsck(在挂载文件系统之前)。如果这是一个长时间运行的设备,请确定一种在系统空闲时定期卸载和进行 fsck 的方法。

相关内容