【问题标题】:Does msync sync all files on the filesystem to the disk like fsync on ext3?msync 是否像 ext3 上的 fsync 一样将文件系统上的所有文件同步到磁盘?
【发布时间】:2011-10-10 06:21:03
【问题描述】:

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

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

谢谢。

【问题讨论】:

  • 您能否提供描述此行为的来源的引用?这不是我的理解。
  • 到 MarkR 你可以用谷歌搜索“linux ext3 firefox 3”,你可以找到很多关于这个的文章

标签: linux ext3 fsync


【解决方案1】:

这不是错误,而是功能。 Ext3 是一个日志文件系统。 data=ordered 表示您要求对文件系统的更改按照它们进行的顺序写入

因此,当您要求将更改同步到特定文件时,您必须提交所有先前的更改,无论是对该文件还是其他文件,或者您违反了保持数据有序的指令。出于这个原因,我怀疑 msync 会以相同的方式运行,尽管我没有检查过。

事实上,人们可以争辩说,如果不是这样,那就是文件系统错误......

【讨论】:

  • 嗨 gby,感谢您的解释我想我只是误解了 ext3 的行为
【解决方案2】:

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

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

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

【讨论】:

  • 嗨 MarkR 我读了另一篇文章,似乎在 ext3 上使用 data=ordered,fsync 将同步指定文件的脏页和该文件系统上的所有日志日志 =-=-=- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- =-=-=--= kerneltrap.org/node/14148 fsync() 的全部意义在于它应该只同步一个文件,并避免同步所有其他正在发生的事情,而 ext3 违反了这一点,因为它最终有同步整个日志,或类似的东西。 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- =-=-=-=-=-=--=
  • 我仍然很确定它不会同步 fs 上的所有脏块。也许它会同步所有元数据 - 如果您启用了 atime 并且最近读取了很多文件,这可能会很糟糕。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-12
  • 2016-12-06
  • 2012-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
相关资源
最近更新 更多