【问题标题】:fsync, sync: does it really do what its supposed to? [closed]fsync,sync:它真的做它应该做的吗? [关闭]
【发布时间】:2012-09-04 11:20:30
【问题描述】:

我想对 Linux (2.6.31) 中的 sync(8) 和 fsync 函数的功能有更多说明。它是否确保将文件写入相应的存储?

【问题讨论】:

标签: linux filesystems linux-device-driver embedded-linux


【解决方案1】:

http://linux.die.net/man/8/sync

它不能确保将文件写入相应的存储。它只确保缓存/缓冲数据刷新到磁盘设备。不管这是 SD 卡还是其他什么的都没有关系。

【讨论】:

  • 更准确的说是flush数据到设备,但是设备通常有自己的缓存层,所以flush后可能仍然不在持久化存储中(即可能在磁盘的缓存但尚未在盘片/闪存上)。这意味着,如果您断电,您仍可能会丢失数据。
  • 更准确地说,这取决于。如果你有一个支持屏障的 fs,并且启用了这些屏障,sync()/fsync() 和其他一些操作将导致适当的 CACHE FLUSH (ATA) 或 SYNCHRONIZE CACHE (SCSI) 命令发送到设备;明智地执行这些命令当然取决于设备。
  • 如果有问题的设备(SD 卡/MMC 驱动程序)维护自己的缓存层,它会在哪里?我可以调试这一层吗?
  • 我的第一句话应该澄清,根据经验,我可以告诉专业解决方案的磁盘驱动器上的缓存也有电池能够将缓存写入介质。普通的磁盘驱动器很少会做智能缓存,它们只是使用缓冲区有一个恒定的写入时间,几秒钟后数据会被写入,使用 fsync 就可以完成这项工作,这就是为什么它用于重启,关机等。
  • fsync 告诉操作系统将其缓冲区/缓存刷新到物理媒体。因此,从 API 的角度来看,它确保将文件写入相应的存储。但是在存储介质控制器层,也可能存在 chaching。
猜你喜欢
  • 1970-01-01
  • 2011-09-28
  • 2020-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多