fsync(fd)是否适用于外部程序创建的文件?

时间:2015-03-10 11:45:03

标签: linux ext4 fsync sata

我有一个禁用写入缓存的SATA硬盘:

hdparm -W0 /dev/foo

我在ext4分区上运行这些挂载选项(以及其他):

data=ordered
auto_da_alloc

Linux内核版本为2.6.32-5-686

现在,我有一个我无法修改的外部程序,但我知道以下列方式创建文件:

int fd = open(path);
write(fd, data, data_size);
close(fd);

即。在关闭之前它没有fsync。所以在这一点上,数据可能在RAM中,在kernel / fs缓存中的某个地方。

注意:元数据还不是一个值得关注的问题:最终的元数据将被写入并在 后确认数据已经到达磁盘盘片。数据本身就是问题所在。

所以问题是,如何帮助数据到达实际的磁盘盘片?

之后我想过运行这个单独的程序:

int fd = open(path);
fsync(fd);
close(fd);

这有助于刷新数据,还是应该使用其他方法?

2 个答案:

答案 0 :(得分:1)

  

这有助于刷新数据,

是的,fsync的用户并不重要。

请注意,您可能希望同步文件所在的目录,以便同步文件的元数据。

答案 1 :(得分:0)

来自man fsync

Calling fsync() does not necessarily ensure that the entry in the
directory containing the file has also reached disk.  For that an
explicit fsync() on a file descriptor for the directory is also
needed.