我有一个嵌入式Linux应用程序以相当慢的速率写入文件( 50 字节/秒左右)。该文件位于硬盘驱动器XFS文件系统上。正在通过调用write()
而不是fwrite()
来写入文件。
如果我重新启动系统并检查文件,则会丢失超过一分钟的数据。我认为默认的Linux行为是每隔 5s同步磁盘缓存(我可以容忍 5s 值得丢失的数据,因此它们没有问题)。我应该检查一下为什么它不会长时间同步? /proc/sys/vm/dirty_writeback_centisecs
500 。我应该检查其他可变的东西吗?它肯定看起来是一个磁盘缓存问题 - 如果我ls -l
文件,大小是预期的,并且在电源循环后它比以前少。
答案 0 :(得分:1)
五秒行为仅适用于ext3 / ext4文件系统,您可以通过commit mount选项控制它(默认为commit = 5)。我不知道XFS是如何表现的。
您可能意味着VM子系统中有30秒的限制。默认情况下,Linux可以在写入数据时等待30秒。您可以使用以下方式获取/设置限制:
# cat /proc/sys/vm/dirty_expire_centiseconds
3000
展示了第二个人的爱好。
答案 1 :(得分:0)
总之,发生在你身上的是预期的行为。
如果你想超越缓存,我相信你需要使用fsync,O_SYNC或O_DIRECT。或者在安装文件系统时应用'sync'选项,这应该可以全局解决问题。
答案 2 :(得分:0)
嗯,XFS因这种“失败”而闻名。问题与写缓存有关。有关XFS FAQ的更多信息。