У меня есть промышленный ПК (Windows posready 7), на котором запущено серверное приложение, которое слишком часто повреждает файлы, когда компьютер внезапно выключается (нехватка электроэнергии), и я обнаружил, что изменение моего кода для установки флага FILE_WRITE_THROUGH решило проблему, когда файл был написано моим приложением.
Проблема в том, что когда я копирую + вставляю какой-то файл в систему, жду 5 секунд, затем выключаю (отсоединяю) машину, файлы по-прежнему всегда повреждаются, открыв поврежденные файлы в шестнадцатеричном редакторе, я вижу, что начиная с половины файла, все его байты были установлены в 0.
Есть ли способ предотвратить этот эффект? Можно ли изменить значение по умолчанию для FILE_WRITE_THROUGH на системном уровне, чтобы все файловые операции начали вести себя как мое приложение?
Купите ИБП для этой системы и установите / настройте прилагаемое программное обеспечение для плавного выключения системы в случае сбоя. Это предотвратит проблемы, которые возникают у вас и у многих других.
Помимо установки ИБП (который вы действительно должен), есть параметр, который вы можете использовать, чтобы сообщить системе, что все данные немедленно записываются на диск, а не хранятся в системном кеше:
Конечно, отключение кэширования диска снизит производительность системы. Но, например, это автоматически выполняется Windows на контроллерах домена, что абсолютно должен убедитесь, что обновление каталога действительно записано в базу данных AD, когда контроллер домена считает, что это так.