fsync,sync:它们是否真正执行了其预期的功能?

9

我希望能更清楚地了解Linux(2.6.31)中sync(8)和fsync函数的功能。它们是否确保文件被写入到相应的存储介质中?


自从我写入SD卡后,我的设备出现了问题。以下是链接:http://stackoverflow.com/questions/12262044/sd-card-data-sometimes-not-seen-on-pc-when-connected-in-usb-mass-storage-mode-v - spitfire88
1个回答

8

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

它不能确保文件被写入相应的存储设备,仅能确保缓存/缓冲数据被刷新到磁盘设备。无论这是SD卡还是其他类型设备,都适用。


4
更精确地说,它将数据刷新到设备上,但设备通常有其自己的缓存层,因此即使在刷新后(例如,可能在磁盘缓存中,但尚未存储在物理介质/闪存中),它仍然可能不在持久性存储中。这意味着如果电源断开,您可能仍会丢失数据。 - Michał Kosmulski
3
更准确地说,这取决于情况。如果您的文件系统支持障碍并启用了它们,那么执行sync() / fsync()和其他一些操作将会导致适当的CACHE FLUSH(ATA)或SYNCHRONIZE CACHE(SCSI)命令发送到设备;当然,设备需要合理地实现这些命令。 - janneb
1
我的第一句话应该澄清,从经验来看,专业解决方案的磁盘缓存也有电池,以便将缓存写入介质。普通磁盘驱动器很少进行智能缓存,它们只是使用缓冲区以获得恒定的写入时间,几秒钟后数据将被写入,使用fsync将完成工作,这就是为什么在重新启动、关机等操作中使用它。 - Oliver
调用 fsync 后数据仍未显示。尝试了 sync 也不行。 - spitfire88
3
fsync 告诉操作系统将其缓存冲洗到物理介质。从 API 的角度来看,它确保文件被写入相应的存储器。然而,在存储介质控制器层面上,也可能存在缓存。 - Adil
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接