在我拥有的嵌入式系统上,使用 44 针 Transcend 工业闪存,一段时间后,我会注意到无法读取任何文件或写入磁盘。我使用的是 3.2.0.* BPO i686 SMP PAE 内核。这有时伴随着反向移植内核的冻结,但它总是导致默认 Debian 6 内核的整个系统冻结。当我尝试在此时重新启动时,它总是会冻结,如果我关闭电源(这通常是正常的,因为这是一个只读根系统),我通常会在 fsck 上卡住,抱怨其中一个可写分区未完全卸载。fsck /dev/... -y 总是可以修复它。
当我注意到这一点时,我修改了我们的主要应用程序,使其仅在启动时从 IDE 读取数据,并且仅在客户端调用 WriteConfigurationToDisk 函数时写入配置文件。这大大改善了问题,但是,过了一段时间,同样的事情又开始发生。这似乎并不是普遍发生的,只有大约 10% 的产品才会发生。
这是一个只读根系统。每个分区都是一个日志文件系统。此外,只有操作系统才会将任何内容写入磁盘——而且大部分都是在启动时。有什么想法我应该检查什么吗?
更新 我做了一些研究,似乎 ext3 可能会毁掉我的闪存驱动器,因此冻结的读/写是闪存损坏的结果。我是否应该切换到 JFSS2?
答案1
在 SSD 上,您可以尝试使用 ext4 文件系统,然后使用丢弃选项挂载它。在 fstab 中:
UUID=XXXXXXXXXXXX / ext4 discard 0 1
添加您想要的任何其他选项,例如 noatime 或 errors=remount-ro。
丢弃选项可能会启用 SSD 中的 TRIM,从而延长其使用寿命,https://ext4.wiki.kernel.org/index.php/Ext4_Howto#Ext4_code_implements_discard.2FTRIM
然而,这只有在其他(底层)系统也支持的情况下才会起作用。
我不确定你的闪存盘是否支持 TRIM,因为它不是芯片本身的一部分,而是包含芯片的驱动器逻辑的一部分。我需要确切地知道它是什么类型的设备。
但仅仅改变文件系统本身可能会缓解问题,我更喜欢 xfs。ext3 文件系统对于许多用途来说已经足够好了,但相比其他文件系统(例如 xfs),它有更多恢复问题(需要 fsck -y),我发现 xfs 从未帮助过我。
将其设置为/etc/default/rcS在启动时自动修复(ext3)文件系统,无需按“y”:
FSCKFIX=yes
更新:我检查了该设备的规格,似乎不支持 TRIM,不过它是一款相当不错的小设备。您对日志的说法是正确的,如果不支持 TRIM,使用 ext2 文件系统或其他非日志文件系统可能会获得更好的可靠性。