我应该在embedded式系统上使用ext3吗?

我们有一些embedded式系统需要通过块设备模拟来访问驻留在闪存上的文件系统。 我们最老的平台运行在紧凑型闪存上,并且这些系统已经使用超过3年,在启动过程中没有运行单个fsck,到目前为止我们没有归档文件系统或CF的故障。

在我们最新的平台上,我们使用USB闪存进行初始生产,现在正在迁移到磁盘模块以存储r / w。 前段时间,我们在USB存储上运行的很多设备上都遇到了文件系统问题,所以我启用了e2fsck来查看是​​否有帮助。 事实certificate,我们收到了一批糟糕的闪存,所以一旦被更换,问题就消失了。 我自从禁用了e2fsck以来,我们没有任何迹象表明它使系统更加可靠,而且历史上我们没有这个系统就没有问题。

现在我们已经开始放入磁盘模块单元,我又开始看到文件系统错误了。 突然系统无法读取/写入某些文件,如果我试图从紧急控制台访问文件,我只是“ input/输出错误 ”。 我又启用了e2fsck,所有的文件都被修正了。

O'Reilly的“ 构buildembedded式Linux系统 ”build议在ext2文件系统上运行e2fsck,但是没有提及ext3,所以我有点困惑我是否应该启用它。

你在embedded式系统上运行fsck有什么意义? 我们正在考虑把二进制文件放在ar / o分区上,只有在同一个闪存设备上的ar / w分区上需要修改的文件,这样fsck永远不会意外删除重要的系统二进制文件,没有人有任何关于这种设置的经验(好坏)?

我认为你的问题的答案更多地涉及你的应用程序相对于它的数据的一致性要求。 也就是说,如果在没有正式关闭系统的情况下断电,那么必须保证什么? 通常,在应用程序中的关键事务点处,没有特定的应用程序关闭/同步文件和刷新磁盘缓存等,桌面操作系统类型文件系统都不能处理这一点,以确保您需要维护的是事实上致力于媒体。

运行fsck可以修复文件系统,但是如果没有上述的注意,就不能保证你所做的更改实际上会保留下来。 即:由于电力故障,你将失去什么并不完全确定。

我同意将您的二进制文件或其他重要的只读数据放在一个单独的只读分区上,确保它们不会由于文件系统结构的fsck更正而被错误地抛出。 至少,把它们放在一个不同于R / W数据的根目录下的子目录将会有所帮助。 但是,在这两种情况下,如果您支持软件更新,您仍然需要有方案来处理写入“只读”区域。

在我们的应用程序中,我们实际上为二进制文件保留了一对目录,并且系统被设置为从两个区域中的任何一个启动。 在软件更新期间,我们更新第一个目录,将所有内容同步到介质,并在转到第二个副本的更新之前验证磁盘上的MD5校验和。 在启动时,只有在MD5校验和好的情况下才能使用。 这确保了您始终启动连贯的图像。

戴夫,

我总是建议在多次重启之后运行fsck,但不是每次都运行。

原因是,ext3是journal-ed。 因此,除非启用回写(无日志),否则大多数情况下,元数据/文件系统表应与您的数据(文件)保持同步。

但是就像Jeff所说的那样,它并不能保证文件系统上面的图层。 这意味着,你仍然得到“损坏”的文件,因为有些记录可能没有写入文件系统。

我不确定你正在运行什么嵌入式设备,但它重新启动的频率是多少? 如果重新启动受控,则可以在重新启动之前始终进行“同步;同步;同步”。

我一直在使用CF多年,非常罕见的情况下,我得到了文件系统的错误。 fsck确实帮助了这种情况。

而关于分离你的分区,我怀疑它的优点。 对于文件系统上的每个数据/文件,都有一个与其关联的元数据。 大多数情况下,如果您不更改文件,例如。 二进制/系统文件,那么这个元数据不应该改变。 除非你的硬件有问题,比如交叉读写,这些只读文件应该是安全的。

当你有一些可写的东西时,大多数的问题就出现了,不管你把它放在哪里,如果应用程序处理不好,它可能会引起问题。

希望有所帮助。