linux - 超过一分钟未提交到磁盘的小文件

标签 linux caching embedded disk xfs

我有一个嵌入式 Linux 应用程序,它以相当慢的速度写入文件(50 字节/秒左右)。该文件位于硬盘驱动器 XFS 文件系统上。该文件是通过调用 write() 而不是 fwrite() 写入的。

如果我重新启动系统并检查文件,超过一分钟的数据丢失了。我认为默认的 Linux 行为是每 5s 同步磁盘缓存(我可以容忍 5s 丢失数据,所以他们对此没有问题)。我应该检查什么以了解为什么它很长时间没有同步? /proc/sys/vm/dirty_writeback_centisecs500。我应该检查其他可变的东西吗?它看起来肯定是磁盘缓存问题 - 如果我 ls -l 文件,大小符合预期,并且在电源循环之后它小于以前。

最佳答案

五秒行为仅适用于 ext3/ext4 文件系统,您可以通过提交挂载选项(默认为 commit=5)来控制它。我不知道 XFS 的行为如何。

您的意思可能是 VM 子系统中的 30 秒限制。默认情况下,Linux 最多可以等待 30 秒来写入数据。您可以使用以下方式获取/设置限制:

# cat /proc/sys/vm/dirty_expire_centiseconds
3000

显示成百上千秒。

关于linux - 超过一分钟未提交到磁盘的小文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11884650/

相关文章:

c - 从 Linux 内核模块的文件描述符获取文件名/路径?

linux - 为 ARM 架构使用 objdump : Disassembling to ARM

c - fork() 函数在这个程序中是如何工作的?

angularjs - 使用 Restangular 取消对服务器的 GET 请求

embedded - 计算样条曲面上的点

linux - 在哪里可以找到函数 argp_parse 的源代码?

java - 检测对象是否存储状态或是否可以共享

ruby-on-rails - 在 Rails 4 中缓存静态页面的最佳方法是什么?

c - 通过单个 GPIO 引脚转储闪存

STM32驱动开发中的C编译错误