Повреждение данных при включенном кэшировании записи на диск

Повреждение данных при включенном кэшировании записи на диск

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

Вот некоторый контекст моей установки:

Операционная система: Windows Server 2012 R2

Тип диска: SATA 3.0 HDD

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

В ходе моего исследования я обнаружил следующие детали в этомСтатья, они упомянули: «Повреждение данных происходит без ведома пользователя, когда активный кэш записи на диск включен и диск выполняет упреждающее чтение (RLA), которое преждевременно завершается». Я не смог понять точный смысл этого утверждения.

Возникают ли случаи повреждения данных/файлов после включения кэширования записи, даже если на момент отключения питания запись данных не производилась?

решение1

Современные файловые системы (XFS, ZFS, JFS, ext4, APFS, NTFS и т. д.) используют журналирование, так что да, вы потеряете некоторые данные (последние фиксации и то, что еще не зафиксировано и хранится в кэше, это очевидно), но нет, вы не столкнетесь с каким-либо повреждением данных.

Вот полезная статья с большим количеством диаграмм и подробных объяснений по JFS от IBM. Все, что написано в статье, на 100% актуально и для других журналируемых файловых систем:

https://www.ibm.com/docs/en/aix/7.2?topic=types-journaled-file-system-jfs

В любом случае... Вам придется делать резервные копии! Так называемое «правило резервного копирования 3-2-2» — это то, чему вы должны следовать.

https://www.starwindsoftware.com/blog/3-2-1-backup-strategy-why-your-data-always-survives

Надеюсь, это помогло!

решение2

Укороченная версия:нет, используя современный диск SATA и журналируемую файловую систему невозможно повредить подтвержденные (т.е. синхронизированные) записи, даже если включен кэш диска. С другой стороны, несинхронизированные (буферизированные) записи могут быть потеряны/повреждены в случае отключения питания. Однако статья, на которую вы ссылаетесь, оконкретная проблема прошивкии не говорит об общем поведении при использовании кэширования диска:

При выполнении упражнений с расширенным дисковым тестомобнаружена скрытая проблема прошивки.

Длинный ответ:Могут быть выполнены два вида записей:

  • синхронные записи, которые гарантируют сохранение (и упорядочивание) за счет использования ATA FLUSH или FUA;
  • несинхронизированные (буферизованные) записи, которые могут кэшироваться, агрегироваться и переупорядочиваться кэшем DRAM на диске.

При работе с жесткими дисками и потребительскими твердотельными накопителями синхронные записи очень медленные: процесс очистки любой отдельной записи означает, что задержка per-IO оплачивается при каждой отдельной записи. Таким образом, синхронные записи обычно резервируются для самых важных операций ввода-вывода: фиксация журнала, базы данных, доставка электронной почты и т. д. Все остальные менее важные записи (например, копирование файлов пользователя) выдаются как кэшированные/буферизованные записи, и данные будут потеряны, если в нужный момент произойдет отключение питания (вплоть до 30-60 с после исходной записи).

Обратите внимание, что старые диски PATA и SATA лгали ОС, делая вид, что соблюдают синхронизацию, на самом деле отбрасывая требуемое поведение очистки. Это привело к предложению полностью отключить кэш DRAM на диске (или установить его в режим только для чтения), чтобы все записанные данные действительно хранились на (долговременных) пластинах диска. Диск с отключенным кэшем фактически обрабатывает каждую запись как синхронизацию, обеспечивая максимальные гарантии безопасности за счет больших затрат производительности.

Обратите внимание, что это не такнетозначает, что буферизованные записи не могут быть потеряны: если сбой произойдет до того, как ОС очистит свои буферы, все несинхронизированные данные будут потеряны. По этой причине, а также учитывая, что современные (после 2008 г.) диски поддерживают ATA FLUSHes или (после 2015 г.) FUAs, в настоящее время общепринятым советом является включение кэша диска и ожидание, что ОС очистит важные записи.

SSD-накопители и карты HW RAID с защитой от сбоев питанияИзбежать этого компромисса между производительностью и безопасностью можно с помощью встроенной схемы безопасного кэшированиялюбойзаписывает (даже синхронные). В любом случае, при использовании карты HW RAID, то, как будет управляться кэш диска, зависит от реализации (т. е.: PERC отключает его для дисков SAS, но не для дисков SATA).

Связанный контент