Вообще говоря, нет, если вы настаиваете на том, чтобы не влиять на производительность.
Для повышения производительности файловой системы данные и метаданные хранятся в буферном кеше в ОЗУ. Данные и метаданные периодически синхронизируются с диском. Когда происходит сбой системы, данные, находящиеся в ОЗУ в это время, очевидно, теряются.
Это имеет два аспекта. Фактические данные файла, которые являются содержимым файла, и метаданные файла, которые представляют файл в файловой системе и способствуют внутренней согласованности файловой системы. Что вы можете сделать, так это синхронизировать данные и / или метаданные с вашей собственной периодичностью. Скажем, каждый большой блок данных, который вы пишете. Таким образом, вы можете потерять только последнюю часть данных файла, но большая часть файла будет там.
Пожалуйста, посмотрите на fsync(2)
, fdatasync(2)
, sync(2)
, fsync(2)
,и посмотрите, можете ли вы использовать одну или несколько из этих (или аналогичных) функций в зависимости от ваших потребностей.