据我所知,在大多数日志模式为“data=ordered”的ext3系统上,fsync不仅会同步fd指定的文件,还会同步文件系统上的所有文件,这个问题在内核2.6之前还没有修复.30
我有一个问题,那就是,msync 和 fsync 做的事情一样吗?
谢谢。
这不是一个错误,这是一个功能。Ext3 是一个日志文件系统。data=ordered 表示您要求对文件系统的更改按照它们进行的顺序写入。
因此,当您要求将更改同步到特定文件时,您必须提交所有以前的更改,无论是该文件还是其他文件,或者您正在破坏指令以保持数据有序。出于这个原因,我怀疑 msync 的行为方式相同,尽管我没有检查过。
事实上,有人可能会争辩说,如果不是这样,那就是文件系统错误......
阅读各种文章,我认为这根本不是真的。如果您执行一次 fsync,它不会将所有脏数据刷新到磁盘。它只刷新属于同一文件的元数据。
此外,使用 data=ordered 描述的问题似乎是它等待对同一设备的其他待处理 IO 请求,即使它在逻辑上应该具有更高的优先级。并非所有脏数据都被刷新(如 sync())。
我想做一个实验来找出答案。