Введение

Ошибки в компьютерных данных, приводящие к нежелательным изменениям исходных данных.

Повреждение данных – это ошибки в компьютерных данных, возникающие при записи, чтении, хранении, передаче или обработке, которые вносят нежелательные изменения в исходные данные. Компьютерные, передающие и системы хранения используют ряд мер для обеспечения целостности данных, то есть отсутствия ошибок. Как правило, при повреждении данных файл, содержащий эти данные, при обращении к нему системой или соответствующим приложением, выдает непредсказуемые результаты. Последствия могут варьироваться от незначительной потери данных до сбоя системы. Например, если файл документа поврежден, при попытке открыть его редактором документов пользователь может получить сообщение об ошибке, в результате чего файл может не открыться или откроется с поврежденными данными (или, в некоторых случаях, полностью поврежденным, делая документ нечитаемым). На прилегающем изображении показан поврежденный файл изображения, в котором большая часть информации утрачена. Некоторые типы вредоносного ПО могут намеренно повреждать файлы в качестве части своей полезной нагрузки, обычно перезаписывая их нерабочим или бессмысленным кодом, в то время как невредоносный вирус также может непреднамеренно повредить файлы при доступе к ним. Если вирус или троян, использующий подобный метод, удастся изменить файлы, критически важные для работы операционной системы компьютера или физического оборудования, вся система может стать неработоспособной. Некоторые программы могут предложить автоматическое восстановление файла (после обнаружения ошибки), а другие не смогут его восстановить. Это зависит от степени повреждения и встроенных возможностей приложения для обработки ошибки. Существует множество причин повреждения данных.

Обзор

Существует два типа повреждения данных, связанных с компьютерными системами: необнаруженное и обнаруженное. Необнаруженное повреждение данных, также известное как "тихое повреждение данных", приводит к наиболее опасным ошибкам, поскольку нет никаких признаков того, что данные некорректны. Обнаруженное повреждение данных может быть постоянным, с потерей данных, или временным, когда какая-то часть системы способна обнаружить и исправить ошибку; в последнем случае повреждения данных не происходит. Повреждение данных может возникать на любом уровне системы, от хоста до носителя информации. Современные системы пытаются обнаруживать повреждения на многих уровнях, а затем восстанавливать или исправлять их; это почти всегда удается, но очень редко информация, поступающая в системную память, оказывается поврежденной и может приводить к непредсказуемым результатам. Повреждение данных при передаче имеет различные причины. Прерывание передачи данных приводит к потере информации. Условия окружающей среды могут мешать передаче данных, особенно при использовании беспроводных методов передачи. Тяжелые облака могут блокировать спутниковые передачи. Беспроводные сети подвержены помехам от устройств, таких как микроволновые печи. Аппаратные и программные сбои – две основные причины потери данных. Фоновое излучение, повреждения головок и старение или износ носителя информации относятся к первой категории, в то время как программные сбои обычно возникают из-за ошибок в коде. Космические лучи вызывают большинство случайных ошибок в DRAM.

Тихо.

Некоторые ошибки остаются незамеченными, не обнаруживаемыми прошивкой диска или операционной системой хоста; эти ошибки известны как скрытая (молчаливая) коррупция данных. Существует множество источников ошибок, выходящих за рамки самой подсистемы хранения. Например, кабели могут быть слегка ослаблены, блок питания может быть ненадежным, внешние вибрации, такие как громкий звук, сеть может вносить незамеченную коррупцию, космическое излучение и многие другие причины возникновения ошибок мягкой памяти и т.п. В 39 000 проанализированных системах хранения ошибки в прошивке составляли 5–10% от общего числа сбоев хранения. В целом, частота ошибок, зафиксированная в исследовании CERN по скрытой коррупции, значительно превышает один случай на 10¹⁶ бит. Интернет-магазин Amazon.com подтвердил аналогично высокие показатели коррупции данных в своих системах. В 2021 году в публикациях Google и Facebook были выявлены неисправные процессорные ядра как дополнительная причина; неисправные ядра обнаруживались в количестве нескольких на тысячу ядер. Одна из проблем заключается в том, что емкость жестких дисков значительно возросла, но их частота ошибок осталась неизменной. Скорость коррупции данных всегда была примерно постоянной во времени, что означает, что современные диски не намного безопаснее старых. На старых дисках вероятность коррупции данных была очень мала, поскольку они хранили небольшие объемы данных. На современных дисках вероятность гораздо выше, поскольку они хранят гораздо больше данных, при этом не являясь более безопасными. Поэтому скрытая коррупция данных не вызывала серьезных опасений, пока устройства хранения оставались относительно небольшими и медленными. В настоящее время, с появлением дисков большей емкости и очень быстрых RAID-массивов, пользователи способны передавать 10¹⁶ бит за разумное время, тем самым легко достигая порогов коррупции данных. В качестве примера, создатель ZFS Джефф Бонвик заявил, что быстрая база данных в Greenplum, компании, специализирующейся на разработке программного обеспечения для баз данных, предназначенного для крупномасштабного хранения данных и аналитики, сталкивается со скрытой коррупцией каждые 15 минут. В качестве другого примера, реальное исследование, проведенное NetApp на более чем 1,5 миллионах жестких дисков за 41 месяц, выявило более 400 000 случаев скрытой коррупции данных, из которых более 30 000 не были обнаружены аппаратным RAID-контроллером (обнаружены только во время проверки). Другое исследование, проведенное CERN в течение шести месяцев с участием около 97 петабайт данных, показало, что около 128 мегабайт данных были безвозвратно повреждены где-то на пути от сети к диску. Скрытая коррупция данных может привести к каскадным сбоям, при которых система может работать в течение определенного периода времени с незамеченной первоначальной ошибкой, вызывающей все больше проблем, пока она не будет обнаружена. Например, сбой, затрагивающий метаданные файловой системы, может привести к частичному повреждению нескольких файлов или к полной их недоступности, поскольку файловая система используется в поврежденном состоянии.

Контрмеры

Когда повреждение данных проявляется как пуассоновский процесс, при котором каждый бит данных имеет независимо малую вероятность изменения, повреждение данных обычно можно обнаружить с помощью контрольных сумм и часто исправить с использованием кодов коррекции ошибок (ECC). В случае обнаружения неисправимого повреждения данных могут быть применены такие процедуры, как автоматическая повторная передача или восстановление из резервных копий. Определенные уровни RAID-массивов дисков способны хранить и проверять биты четности для данных на наборе жестких дисков и восстанавливать поврежденные данные при выходе из строя одного или нескольких дисков, в зависимости от реализованного уровня RAID. Некоторые архитектуры процессоров используют различные прозрачные проверки для обнаружения и смягчения повреждения данных в кэше процессора, буферах процессора и конвейерах команд; примером является технология Intel Instruction Replay, доступная на процессорах Intel Itanium. Многие ошибки обнаруживаются и исправляются жесткими дисками с использованием кодов ECC, хранящихся на диске для каждого сектора. Если жесткий диск обнаруживает множественные ошибки чтения на секторе, он может создать копию поврежденного сектора на другой части диска, переназначив поврежденный сектор на резервный без участия операционной системы (хотя это может быть отложено до следующей записи в сектор). Этот "скрытый ремонт" можно отслеживать с помощью S.M.A.R.T. и инструментов, доступных для большинства операционных систем, для автоматической проверки жесткого диска на предмет надвигающихся сбоев, отслеживая ухудшение параметров SMART. Некоторые файловые системы, такие как Btrfs, HAMMER, ReFS и ZFS, используют внутренние контрольные суммы данных и метаданных для обнаружения скрытого повреждения данных. Кроме того, если повреждение обнаружено и файловая система использует интегрированные механизмы RAID, обеспечивающие избыточность данных, такие файловые системы также могут прозрачно восстанавливать поврежденные данные. Такой подход обеспечивает улучшенную защиту целостности данных, охватывающую все пути передачи данных, что обычно называют сквозной защитой данных, в отличие от других подходов к обеспечению целостности данных, которые не охватывают различные уровни в стеке хранения и допускают повреждение данных при прохождении данных между этими уровнями. Очистка данных (data scrubbing) – это еще один метод снижения вероятности повреждения данных, поскольку ошибки диска обнаруживаются и устраняются до того, как накопится множество ошибок и превысится количество битов четности. Вместо проверки четности при каждом чтении, четность проверяется во время регулярного сканирования диска, часто выполняемого как фоновый процесс с низким приоритетом. Операция очистки данных активирует проверку четности. Если пользователь просто запускает обычную программу, которая считывает данные с диска, то проверка четности не будет выполняться, если проверка четности при чтении поддерживается и включена в подсистеме диска. При использовании соответствующих механизмов для обнаружения и устранения повреждения данных можно обеспечить целостность данных. Это особенно важно в коммерческих приложениях (например, в банковском деле), где необнаруженная ошибка может повредить индекс базы данных или изменить данные, что может серьезно повлиять на остаток на счете, а также при использовании зашифрованных или сжатых данных, где даже небольшая ошибка может сделать большой набор данных непригодным для использования.