Прежде чем перезаписывать данные в файле, я хотел бы быть уверенным, что старые данные хранятся на диске. Это потенциально очень большой файл (несколько GB), поэтому необходимы обновления на месте. Обычно записи будут иметь размер 2 МБ или больше (мой план состоит в том, чтобы использовать размер блока 4 КБ).
Вместо (или в дополнение к) вызова fsync() я хотел бы сохранить (не перезаписывать) старые данные на диске, пока файловая система не напишет новые данные. Основными причинами, по которым я не хочу полагаться на fsync(), является: большинство жестких дисков относятся к вам о выполнении fsync.
Итак, что я ищу, это типичная максимальная задержка для файловой системы, операционной системы (например, Windows), жесткого диска, пока данные не будут записаны на диск, без использования fsync или подобных методов. Я хотел бы иметь реальные числа, если это возможно. Я не ищу совета для использования fsync.
Я знаю, что нет 100% надежного способа сделать это, но я хотел бы лучше понять, как работают операционные системы и файловые системы в этом отношении.
То, что я нашел до сих пор: 30 секунд является/по умолчанию для /proc/sys/vm/dirty _expire_centiseconds. Затем " грязные страницы сбрасываются (записываются) на диск... (когда) прошло слишком много времени, так как страница осталась грязной" ( но там я не мог найти время по умолчанию). Поэтому для Linux 40 секунд, похоже, находятся в безопасности. Но верно ли это для всех файловых систем/дисков? Как насчет Windows, Android и т.д.? Я хотел бы получить ответ, который относится ко всем распространенным операционным системам/файловой системе/дискам, включая Windows, Android, обычные жесткие диски, твердотельные диски и т.д.