![防止 Linux 嵌入式系统中的文件系统损坏](https://linux22.com/image/93180/%E9%98%B2%E6%AD%A2%20Linux%20%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%B3%BB%E7%BB%9F%E4%B8%AD%E7%9A%84%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E6%8D%9F%E5%9D%8F.png)
我这些天正在研究嵌入式系统。没有正常关机就需要断电。我们正在考虑将 Aufs 视为只读文件系统。但问题是应用程序中有一些可更新的数据,并且允许用户更改IP、日期时间等。因此,系统需要一个额外的R/W分区。
我有几个问题需要澄清。
- 我们如何防止突然断电时系统损坏?
- 我想知道,像这样的嵌入式系统最好的文件系统是什么?
- ext3/ext4 是否像日志文件系统一样可以自动恢复不完整的文件以始终备份?
- RAID1中的BTRFS是目前最好的解决方案吗?
- 嵌入式系统中是否还有其他广泛使用的解决方案来避免系统损坏?
答案1
从文件系统的角度来看,使用带有默认选项的 ext3 或 ext4 通常会为您提供足够的崩溃一致性。您当然不会遭受文件系统丢失或断电前尚未写入的任何文件的损坏。
关于如何处理任何文件系统上的崩溃一致性,有很多考虑因素。如果您的应用程序仅创建新文件,或者通过创建临时文件并通过重命名自动覆盖来覆盖现有文件,则 ext4 的默认 data=ordered 模式就可以了。尽管在文件和目录条目上对 fsync() 的调用完成之前,或者操作系统刷新其缓存之前,无法保证数据在电源故障后仍存在。这还假设您的存储设备支持 fsync()。
如果应用程序需要保证文件元数据和数据之间的一致性而不关心性能,则可以使用 data=journal ,以便记录对文件和文件系统元数据的所有更改,而不仅仅是元数据。这将避免不完整的写入情况,例如文件大小变大,但附加的数据丢失并被空字符替换。