Очевидно, что кеш-файл Windows сбрасывает данные на диск асинхронно, даже при использовании синхронного API WriteFile(). Цитирование "File Caching" on MSDN:Какие ошибки могут возникнуть при сбое диска с файловым кэшем системного файла (Windows)? как они сообщаются?
По умолчанию, [...] операции записи записи данных файлов в кэш файловой системы , а не на диске, и этот тип кэша называется кэш обратной записи.
Если предположить, что записи через и не буферные флаги не используются, что произойдет, если фактическая запись на диск не удастся? Могут ли клиенты получать уведомления о таких сбоях? Какова ожидаемая модель обработки ошибок клиента для таких сбоев? «Огонь и забыть» и «Написать и молиться» приходят на ум, но, возможно, есть что-то еще.
Второй вопрос: существуют ли определенные классы ошибок, которые гарантированно будут обнаружены раньше? Например. будет ли WriteFile() всегда возвращать ошибку, если диск заполнен? - даже если фактическая запись на диск будет отложена?
Я хотел бы знать, как писать надежный файл, который отвечает на эти ошибки, не отключая Файловый кэш Windows.
Бонусные баллы: обрабатывается ли это по-другому в других операционных системах? Можете ли вы порекомендовать хороший ресурс по этой теме?
Клиент может закрыть дескриптор файла и выйти до того, как произойдет реальная запись на диск, поэтому разумно, что в этой ситуации нет обратной связи с клиентом. Он обрабатывается на более низком уровне. –
Даже * с * установленными флажками записи и без буферизации, диск может лежать о том, действительно ли он передал данные на диск; он все равно может находиться в буферном кеше на самом диске (или на RAID-контроллере). –
@ EricBrown Да, была [интересная ссылка относительно этого] (http://disruptivesql.wordpress.com/2012/05/08/sata-and-write-through/), размещенная на странице MSDN, о которой я упоминал. Мой вопрос об ошибках и сообщениях об ошибках на уровне Windows. Предположительно, лёгкие диски имеют довольно высокую уверенность в своей способности в конечном итоге передавать данные на диск (отключение электроэнергии). Не знаете, как ОС может сделать такие предположения. –