我们有许多要求,其驻留在闪存存储与块设备仿真文件系统R / W访问嵌入式系统。我们的大平台上的紧凑型闪存中运行,这些系统已使用超过3年没有一个单一的fsck在启动过程中运行,到目前为止,我们没有失败归因于文件系统或CF。

在我们最新的平台,我们使用的USB闪存初始生产,现在迁移到磁盘上模块R / W存储。前阵子我们曾与一些文件系统的问题上有很多对USB存储运行的设备,所以我启用的e2fsck为了看看是否会有帮助。事实证明,我们收到了不好的闪存出货所以一旦这些被替换的问题就走了。我因为残疾e2fsck的,因为我们没有任何迹象表明它所做的任何系统更可靠,历史上我们一直罚款没有它。

现在,我们已经开始把在磁盘模块上的单位我已经开始再次见到文件系统错误。突然,系统无法读取/写入某些文件,如果我尝试从紧急控制台访问该文件,我只是得到“的输入/输出错误的”。我再次启用e2fsck的所有文件进行修正。

O'Reilly的“构建嵌入式Linux系统的”建议运行在ext2文件系统的e2fsck但没有提到它相对于ext3的,所以我有点困惑,以我是否应启用与否。

什么是你需要在嵌入式系统上运行fsck的?我们正在考虑把二进制文件上的AR / O分区,只有这对AR / W分区进行修改,同一个闪存设备上,因此fsck可以永远不小心删除重要的系统二进制文件,没有任何人有那种设置的任何经验(好/坏)?

有帮助吗?

解决方案

我想回答你的问题更多的涉及到什么类型的一致性要求,你的应用具有相对于它的数据。也就是说,是什么地方,如果电源没有系统的正式关机失去了保障?在一般情况下,没有一个桌面操作系统类型的文件系统处理这一切良好,没有特定的应用程序关闭/磁盘缓存等。在应用程序的关键交易点的文件和冲洗的同步,以确保您需要维护是什么事实上致力于媒体。

运行fsck的修复文件系统,但没有上面的照顾,没有你所做的修改担保实际上将被保留。即:它不完全确定什么,你会失去作为停电的结果。

我同意把你的二进制文件或其他重要的只读数据在一个单独的只读分区并帮助确保他们无法获得错误抛出由于fsck的修正文件系统结构。作为最低限度,把它们放在一个不同的子目录关闭根比在该R / W保持数据会有所帮助。但是,在这两种情况下,如果你支持的软件更新,你仍然需要有计划,以应对反正写的“只读”的地方。

在我们的应用程序,我们实际上维护的东西一对目录的像二进制文件和系统设置是引导从两个地区之一。在软件更新过程中,我们更新的第一个目录,同步所有媒体和移动到第二个副本的更新之前验证磁盘上的MD5校验码。在引导过程中,如果MD5校验是不错的,他们只使用。这样可以确保总是引导相干图像。

其他提示

戴夫,

我总是建议了许多的重新引导之后运行的fsck,但不是每一次。

的原因是,ext3的是轴颈-ED。所以,除非您启用了回写(日记少),那么大多数的时候,你的元数据/文件系统表应当与您的数据(文件)同步。

但是,像杰夫提到的,它并不能保证文件系统之上的层。这意味着,你仍然可以得到“损坏”的文件,因为某些记录可能没有被写入到文件系统。

我不知道你正在运行什么嵌入式设备,但多久它得到重新启动? 如果它控制的重启,你总是可以做到“同步;同步;同步”。重启之前

我一直在使用CF自己多年,非常难得的机会我得到了文件系统错误。 fsck将帮助在这种情况下。

和有关分离你的分区,我怀疑它的优势。对于文件系统上的每个数据/文件,还有一个与之相关的元数据。大多数时候,如果你不改变文件,例如:。二进制/系统文件,那么这个元数据应该不会改变。除非你有一个有缺陷的硬件,如串扰写入和读出,那些只读文件应该是安全的。

当你有什么可写的大多数问题出现的时候,也不管你把这个,它可能会导致问题,如果应用程序没有处理好。

希望有所帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top