问题
如何在不需要我的程序等待慢速物理介质(例如 with fsync
)的情况下自动更新文件?
我希望操作系统可以“缓冲”RAM中的典型fsync
和操作,然后在方便时以正确的顺序rename
将它们写入磁盘。
背景
我正在开发在带有ext4
文件系统的自定义嵌入式 Linux 环境中运行的软件。该程序定期更新磁盘上的文件。我需要在不牺牲应用程序性能的情况下保持此文件的完整性。
根据我的阅读,安全更新文件的公认做法如下:
- 创建一个新的临时文件
- 将数据写入临时文件
fsync()
临时文件- 将临时文件重命名为适当的名称
fsync()
包含目录
这个过程对我来说很有意义,但在我的特定应用程序中,我想避免阻塞调用fsync()
. 我不在乎数据何时写入磁盘,只要文件始终处于有效状态即可。如果文件已过期,那没关系。
到目前为止我学到了什么
似乎已经有相当多的讨论ext4
和正确使用fsync
. 如果我理解正确,我可能会放弃使用fsync
if auto_da_alloc
is enabled for my filesystem ( link ),但我不相信这是最好的解决方案。