【问题标题】:Does syncfs wait until disc write finished?syncfs 会等到磁盘写入完成吗?
【发布时间】:2013-12-20 17:28:47
【问题描述】:

新的 syncfs 系统调用是否在返回之前等待磁盘写入完成,就像 fsync 的情况一样? 另外,如果在修改文件后,为此文件描述符调用syncfs是否也会更新包含的directoy条目?

【问题讨论】:

  • syncfsfsync有什么区别?
  • syncfs写入包含文件描述符的分区的所有缓冲数据和元数据,fsync只写入文件描述符的修改数据和元数据。
  • 很有趣,谢谢。这使得syncfs 成为一个可能非常昂贵的电话。大概这种刷新会影响该分区中带有脏数据的每个进程,无论他们喜欢与否?还是仅限于syncfs-ing 进程打开的文件?
  • @Duck 它比同步所有已安装分区的同步更好。同样在某些情况下,我们希望在修改分区中的许多文件后同步分区一次,因此在每个文件上调用 fsync 可能比单个 syncfs 更昂贵(如果没有其他进程修改分区)

标签: c linux io


【解决方案1】:

syncfs 从超级块开始写出所有脏页。磁盘可能具有写入缓存,因此这并不能保证所有数据都已保存。例如,您可以在不调用关机的情况下关闭电源。

【讨论】:

  • 有没有办法保证/检查磁盘写入缓存是否完成?
  • 向磁盘发送 STOP UNIT 命令。它将刷新其缓存并降低磁盘转速。有一些屏障命令,但并非所有磁盘都支持。
  • 从内核创建一个 SCSI CDB 并使用 SCSI 命令调用。用户空间一般是不允许直接访问磁盘的,但是可以使用system来执行sg_start。
猜你喜欢
  • 1970-01-01
  • 2013-03-25
  • 1970-01-01
  • 2011-11-10
  • 2010-09-23
  • 1970-01-01
  • 1970-01-01
  • 2018-03-17
  • 2018-02-14
相关资源
最近更新 更多