Когда вы сохраняете текстовый файл, меняете его содержимое, сохраняете снова и нажимаете кнопку аппаратной перезагрузки, у файла есть высокий шанс испортиться (!) (весь контент превратился в \0 символов). Я могу воспроизвести это на разных машинах, используя Windows 7, 8.1 и 10, даже если я подожду несколько секунд, закрою файл или даже закрою приложение. Я пробовал это делать с помощью Блокнота, Блокнота ++, Paint, копирования файлов в проводнике и наивного приложения для чтения / записи файлов UWP. Я был озадачен, когда впервые увидел такое поведение, и не понимаю, почему в 2017 году вы все еще не можете рассчитывать на сохранение ваших файлов после внезапной потери питания.

  • Стоит ли ожидать, что файлы будут повреждены при внезапном отключении питания?
  • Когда и как вы узнаете, сохранился ли файл «по-настоящему» на жестком диске?
  • Почему файлы по-прежнему так портятся и какие сети безопасности должны это предотвратить?
  • Если при каких обстоятельствах будут задействованы сети безопасности, могут ли они выйти из строя?

Я предполагаю, что файлы на самом деле не записываются в назначенное им место при использовании операции file_write(), потому что происходит некоторое кэширование и журналирование, и в конце операционная система и / или контроллер диска решают, когда это будет сделано. Но я думал, что, в частности, журнал был изобретен, чтобы предотвратить это. А фактическая запись в файл должна происходить при вызове операции file_flush() или file_close().

Обновление: в Windows есть опция -> Диспетчер устройств -> Дисководы -> MyDiskDrive -> Свойства -> Политики -> [x] Включить кэширование записи на устройстве

Повышение производительности системы за счет включения кэширования записи на устройстве, но перебои с питанием или отказ оборудования могут привести к потере или повреждению данных

Это точно соответствует описанному выше поведению, за исключением того, что даже если я отключу кэширование записи, произвожу чистую перезагрузку и снова проверяю, файлы по-прежнему повреждаются. WTF?

1 ответ1

1

Инженер Microsoft Раймонд Чен написал две статьи о флажке, который вы спрашиваете:

Тем не менее, существует несколько уровней кэширования, некоторые из которых находятся вне контроля операционной системы, настолько, что без выполнения команды выключения невозможно быть уверенным, что данный файл записан.

Если вы беспокоитесь о сохранности ваших данных, купите ИБП. Это решит проблему сбоя питания.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .