2015-03-10 2 views
5

У меня есть жесткий диск SATA с кэшем записи отключенным:Работает ли fsync (fd) файл, созданный внешней программой?

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. Таким образом, на данный момент данные могут, вероятно, находиться в ОЗУ, где-то в кешах ядра/fs.

Примечание: метаданные еще не заняты: окончательные метаданные будут записаны и обработаны после Я убедился, что данные достигли дисковых табличек. Сами данные являются предметом озабоченности.

Итак, вопрос в том, как я могу помочь данным достичь реальных дисковых пластин?

Я думал о выполнении этой отдельной программы впоследствии:

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

Поможет ли промывать данные, или я должен использовать другой подход?

ответ

1

Будет ли эта помощь вровень данные,

Да будет, это не имеет значения, кто делает Fsync.

Обратите внимание, что вам, скорее всего, захочется fsync каталог, в котором находится файл, чтобы синхронизировать метаданные файла.

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.