在嵌入式Linux上安全地写入紧凑型闪存

前端之家收集整理的这篇文章主要介绍了在嵌入式Linux上安全地写入紧凑型闪存前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在开发一个从紧凑型闪存和tmpfs运行的嵌入式 Linux系统.闪存以只读方式安装,通常应保持这种状态,但偶尔我需要向闪存写入内容.

写入闪存(通过PATA接口)时应该采取哪些预防措施?由于我无法回忆的原因,我正在使用一个安装了barrier = 1的ext4文件系统,data = ordered,nodelalloc,noatime,ro这是一个可怕的想法吗?系统需要在零干预的情况下快速启动.我很想做tune2fs -c 0 -i 0.这是一个更糟糕的主意吗?

另外,当我写东西时,我显然需要重新安装flash读写,执行写操作,然后重新装入只读.问题是有几个不同的进程(包括c二进制和shell脚本)可能需要这样做.很明显,让每个进程不加选择地重新安装文件系统只读它是一个坏主意.

协调这个的最佳方法是什么?羊群看起来很有希望;这是最好的方式,我需要担心什么?我不希望过时的锁阻止写入或使文件系统无限期写入.

澄清:通过“偶尔”写作,我的意思是系统可以使用多年而不需要写任何东西.什么东西写的,它可能是几百字节.与此同时,系统需要承受不可预测的电源循环而无需任何干预.

解决方法

使ext4安全

ext4对此并不是很理想;最糟糕的情况是,当你的分区是RW并破坏文件系统时,电源会出现故障.

尽管它们是为原始NAND设备设计的,但像jffs2或yaffs这样的日志文件系统可能仍然有用.它们具有有用的特性,即它们的磁盘格式看起来更像是列表而不是树,因此更新的数据往往更紧密地打包,因此不太可能丢弃文件系统的相对静态部分.

在这种情况下,我无法评论如何使ext4’安全’;文件系统结构和fsck都不知道闪存设备的常见故障模式(特别是,在任何写入期间,整个数据块无效的时间很长.)这种行为当然是特定于控制器上的CF卡,所以无论如何它都不是很可预测的.

我能想到的最安全,最可预测的方法是在较小的嵌入式设备中使用相同的翻转缓冲数据布局.也就是说,您有两个可写区域(两个分区).在任何给定时间,它们中至少有一个必须一致.当你想写时,选择两者中较老的一个.如果启动并检测缓冲区A中的不一致,请复制缓冲区B的内容(同时不允许对B进行任何写入.)

管理mount / remount

我会写一个代表系统上所有进程管理unmount / remount的守护进程.这有许多优点:

>你将umount / remount逻辑分开,只需实现一次>想要写入的进程不需要root权限>你可以构建某种看门狗,以确保分区不会长时间留在RW.如果是,您可以终止违规流程(可能会回滚)和重新安装RO.>您可以测量您安装RW的时间长度,这可以让您了解每次更新所涉及的风险

猜你在找的Linux相关文章