我观看了演讲:“ PostgreSQL vs.fsync。PostgreSQL在20年内不正确使用fsync的可能性如何,我们将如何处理。”通过https://fosdem.org/2019/schedule/event/postgresql_fsync/并同时以https://lwn.net/Articles/752063/为背景。
如果调用fsync()却失败了,那么真正简短的摘要是关于Linux的,不要以为可以再次调用fsync()来解决它,因为第二次调用将成功并且您已损坏磁盘上的数据(在第一次失败的调用之后,失败的缓冲区高速缓存页面被标记为干净)。关于发生这种情况的原因,有很多详细信息(支持拔出USB的情况-您不想重试并保留永远无法成功的脏缓冲区高速缓存页面)。
在这种情况下FlushFileBuffers()的行为如何?我对通过CIFS访问文件的可能性特别感兴趣,因为CIFS更有可能发生故障。
此外,鉴于操作系统可以尝试在后台随时将脏缓冲区高速缓存页写入稳定的存储中,因此用户登陆程序如何通过Win32 API来解决这些故障?