嵌入式Raspberry Pi本地登录策略?

时间:2018-02-03 17:19:10

标签: raspberry-pi embedded-linux

我的公司使用Raspberry Pi 3作为产品中的嵌入式控制器。用户不会优雅地关闭电源,只需拨动开关即可。为避免损坏,/ boot和/ root文件系统是只读的。这似乎是防弹的 - 我们已经使用测试装置一遍又一遍地“拉动插头”(2000多个周期)而没有任何问题。

我们正在开发一项需要本地日志记录的新功能。为此,我们在SD卡上创建了一个额外的ext4读/写分区(我们目前在8GB卡上使用大约2GB)用于日志文件。为了减少磨损,应用程序缓冲日志数据并每分钟只写一次卡。日志文件在写入之间关闭。没有其他人使用该分区。当应用程序处于可能表示用户即将关闭的状态时,不会写入日志文件。

在测试中,我们发现尽管我们使用了相当保守的方法,但读/写分区在重新启动后始终标记为“脏”,经常包含文件系统错误,并且经常出现损坏日志文件。我们还有许多卡遭受不可恢复的错误,导致设备无法启动。

丢失最后一组日志条目不是问题。

日志文件丢失是不可取的,但可以接受。

对/ root和/ boot文件系统的损坏是不可接受的,卡的物理损坏(标准NAND闪存除外)也是如此。

如果没有添加UPS以正常关闭Pi,是否有任何方法可以安全地进行读/写操作?

是否存在SD卡分区“几何”的配置,以确保没有两个分区与一个闪存擦除块重叠?

2 个答案:

答案 0 :(得分:1)

只是一些观点:

脏标志:我猜你没有卸载文件系统,对吧?这是在每次不洁净重启后看到脏标志的可能原因。另一种(可能更好的方法)是在写入之后将文件系统切换到只读模式,并在写入文件之前使其成为读写。

BT,ext4延迟写入磁盘。文件close()并不表示文件已写入磁盘,您需要拨打额外的fsync()sync(请参阅Does Linux guarantee the contents of a file is flushed to disc after close()?)。所以最好让系统真正写出文件。

答案 1 :(得分:0)

我建议使用UBIFSJFFS2YAFFS2。它最好的实践方式。我也听说过LogFS。

所有时间安装和写入都没有延迟,因为这个FS设计用于硬关机。

https://superuser.com/questions/248078/choice-of-filesystem-for-gnu-linux-on-an-sd-card

复制粘贴的浏览量

JFFS2

  • 包括压缩和优雅的磨损均衡保护。

YAFFS2

  • 唯一能与众不同的东西:成功卸载后的安装时间短。
  • 实现一次写入属性:一旦将数据写入一个块,就不需要重写它。这很重要,因为它可以减少磨损。

LogFS

  • 不是很成熟,但已经包含在Linux内核树中。
  • 支持比JFFS2 / YAFFS2更大的文件系统而不会出现问题。

UBIFS

  • 比LogFS更成熟
  • 编写缓存支持
  • 关于可扩展性:[文章] [3]。在大型磁盘上,性能优于JFFS2

EXT4

  • 如果没有驱动程序或卡(例如SSD驱动器确实有内部磨损均衡,至少通常是手柄磨损均衡),则ext4不是最佳选择,因为它不适用于原始闪存使用。