Pet*_*720 5 c linux fsync embedded-linux ext4
如何在不需要我的程序等待慢速物理媒体(例如 with fsync)的情况下自动更新文件?
我希望操作系统可以在 RAM 中“缓冲”典型fsync和rename操作,然后在方便时以正确的顺序将它们写入磁盘。
我正在开发在带有ext4文件系统的自定义嵌入式 Linux 环境中运行的软件。该程序定期更新磁盘上的文件。我需要在不牺牲应用程序性能的情况下保持该文件的完整性。
根据我的阅读,安全更新文件的公认做法如下:
fsync() 临时文件 fsync() 包含目录这个过程对我来说很有意义,但在我的特定应用程序中,我想避免对fsync(). 我不在乎数据何时写入磁盘,只要文件始终处于有效状态即可。如果文件已过期,那没关系。
似乎已经有相当多的讨论ext4和正确使用fsync. 如果我理解正确,我可能可以放弃使用fsyncif auto_da_allocis enabled for my filesystem ( link ),但我不相信这是最好的解决方案。
小智 0
我发现 Linux 文件系统非常有弹性和可靠。我对大多数 2009 年的 ext4 问题讨论持怀疑态度。Linux 信息已经过时。
也就是说,如果要求保证您使用文件的最新正确版本,请添加一个步骤来检查文件是否正确。一种方法是使用 Linux 工具生成文件的哈希值。也许有一种更快的方法可以处理您的特定数据,例如查找特定的文件长度。
完成后,您的算法可以是:
现在,当您启动或每次使用该文件时,您都可以检查哈希值,如果失败,则恢复到最新的旧副本。
该计划的优点是散列将保护您免受任何文件损坏源的影响,而不仅仅是 ext4 文件系统问题。