如果我打开一个带有O_DIRECT
标志的文件,是否意味着每当对该文件的写入(阻塞模式)返回时,数据都在磁盘上?
答案 0 :(得分:0)
(这个答案与Linux有关 - 其他操作系统可能有不同的警告)
让我们从子问题开始:
如果我打开一个带有O_DIRECT标志的文件,是否意味着每当对该文件的写入(阻塞模式)返回时,数据都在磁盘上?
否(如@michael-foukarakis commented) - 如果您需要保证您的数据是非易失性存储,则必须使用/添加其他内容。正如您所提到的那样,“保证数据”(而非元数据)可能正在寻找ArrayList<Integer> arr
/ O_DSYNC
?如果您想保证元数据也是如此,则必须查看fdatasync()
/ O_SYNC
。
O_DIRECT究竟意味着什么?
提示您希望I / O绕过 Linux内核的缓存。实际发生的事情取决于:
上面的列表并非详尽无遗。
看起来你的建议可能会在某些情况下发生,但改变一些事情(例如使用Ext4文件系统而不是XFS)会削弱所做的事情。在调用返回后,使用裸fsync()
脏写入数据仍然可以在缓存(例如磁盘的易失性缓存或甚至Linux内核页缓存)中滚动。