msync是否像ext3上的fsync一样将文件系统上的所有文件同步到磁盘上?



据我所知,在大多数使用日志模式"data=ordered"的ext3系统上,fsync不仅会同步与fd指定的文件,还会同步文件系统上的所有文件,这个问题在内核2.6.30之前没有修复

我有一个问题,msync和fsync做的是一样的吗?

谢谢。

这不是一个bug,这是一个特性。Ext3是一个日志文件系统。Data =ordered意味着您要求按照对文件系统的更改进行写入的顺序。

所以,当你要求同步对一个特定文件的更改时,你必须提交所有以前的更改,无论是对该文件还是其他文件,否则你就会破坏保持数据有序的指令。由于这个原因,我怀疑msync也会以同样的方式运行,尽管我还没有检查过。

阅读了各种各样的文章,我认为这根本不是真的。如果执行一次fsync,它不会将所有脏数据刷新到磁盘。它只刷新属于同一文件的元数据。

此外,data=ordered描述的问题似乎是,它等待对同一设备的其他挂起的IO请求,即使它在逻辑上应该具有更高的优先级。不是所有脏数据都要被刷新(比如sync())。

我想做一个实验来找出答案。

最新更新