В вычислительной технике дедупликация данных — это метод устранения дубликатов повторяющихся данных. Успешная реализация этого метода может улучшить использование хранилища, что, в свою очередь, может снизить капитальные затраты за счет сокращения общего объема носителей, необходимых для удовлетворения потребностей в емкости хранилища. Его также можно применять к сетевым передачам данных для сокращения количества байтов, которые необходимо отправить.
Процесс дедупликации требует сравнения «кусков» данных (также известных как «байтовые шаблоны»), которые являются уникальными, непрерывными блоками данных. Эти куски идентифицируются и сохраняются в процессе анализа и сравниваются с другими кусками в существующих данных. Всякий раз, когда происходит совпадение, избыточный кусок заменяется небольшой ссылкой, которая указывает на сохраненный кусок. Учитывая, что один и тот же байтовый шаблон может встречаться десятки, сотни или даже тысячи раз (частота совпадений зависит от размера куска), объем данных, которые необходимо сохранить или передать, может быть значительно сокращен. [1] [2]
Связанная техника — хранилище одного экземпляра (данных) , которое заменяет несколько копий контента на уровне целого файла одной общей копией. Хотя это можно комбинировать с другими формами сжатия и дедупликации данных, это отличается от новых подходов к дедупликации данных (которые могут работать на уровне сегмента или подблока).
Дедупликация отличается от алгоритмов сжатия данных, таких как LZ77 и LZ78 . В то время как алгоритмы сжатия выявляют избыточные данные внутри отдельных файлов и кодируют эти избыточные данные более эффективно, цель дедупликации заключается в проверке больших объемов данных и выявлении больших разделов — таких как целые файлы или большие разделы файлов — которые идентичны, и замене их общей копией.
Например, типичная система электронной почты может содержать 100 экземпляров одного и того же вложенного файла размером 1 МБ ( мегабайт ). Каждый раз, когда платформа электронной почты резервируется, все 100 экземпляров вложения сохраняются, требуя 100 МБ дискового пространства. При дедупликации данных фактически сохраняется только один экземпляр вложения; последующие экземпляры ссылаются на сохраненную копию для коэффициента дедупликации примерно 100 к 1. Дедупликация часто сочетается со сжатием данных для дополнительной экономии хранилища: дедупликация сначала используется для устранения больших фрагментов повторяющихся данных, а затем сжатие используется для эффективного кодирования каждого из сохраненных фрагментов. [3]
В компьютерном коде дедупликация выполняется, например, путем сохранения информации в переменных , так что их не нужно записывать по отдельности, а можно изменять все сразу в центральном ссылочном месте. Примерами являются классы CSS и именованные ссылки в MediaWiki .
Дедупликация данных на основе хранилища уменьшает объем хранилища, необходимый для заданного набора файлов. Она наиболее эффективна в приложениях, где на одном диске хранится много копий очень похожих или даже идентичных данных. В случае резервного копирования данных, которое обычно выполняется для защиты от потери данных, большинство данных в данной резервной копии остаются неизменными по сравнению с предыдущей резервной копией. Обычные системы резервного копирования пытаются использовать это, пропуская (или жестко связывая ) файлы, которые не изменились, или сохраняя различия между файлами. Однако ни один из подходов не охватывает все избыточности. Жесткое связывание не помогает с большими файлами, которые изменились только незначительно, такими как база данных электронной почты; различия находят избыточности только в соседних версиях одного файла (рассмотрите раздел, который был удален и позже добавлен снова, или изображение логотипа, включенное во многие документы).
Дедупликация сетевых данных в режиме реального времени используется для уменьшения количества байтов, которые необходимо передать между конечными точками, что может снизить требуемую пропускную способность. Для получения дополнительной информации см. раздел Оптимизация WAN .
Виртуальные серверы и виртуальные рабочие столы выигрывают от дедупликации, поскольку она позволяет номинально отдельным системным файлам для каждой виртуальной машины объединяться в единое пространство хранения. В то же время, если данная виртуальная машина настраивает файл, дедупликация не изменит файлы на других виртуальных машинах — то, чего не предлагают альтернативы, такие как жесткие ссылки или общие диски. Резервное копирование или создание дубликатов виртуальных сред также улучшается.
Дедупликация может происходить «в процессе» передачи данных или «после их записи».
При постпроцессной дедупликации новые данные сначала сохраняются на устройстве хранения, а затем процесс в более позднее время анализирует данные в поисках дубликатов. Преимущество заключается в том, что нет необходимости ждать завершения вычислений хэша и поиска перед сохранением данных, тем самым гарантируя, что производительность хранилища не ухудшится. Реализации, предлагающие работу на основе политик, могут предоставить пользователям возможность отложить оптимизацию для «активных» файлов или обрабатывать файлы на основе типа и местоположения. Одним из потенциальных недостатков является то, что дублированные данные могут ненужно храниться в течение короткого времени, что может быть проблематично, если система приближается к полной емкости.
В качестве альтернативы, вычисления хэша дедупликации могут быть выполнены в режиме in-line: синхронизированы по мере поступления данных на целевое устройство. Если система хранения идентифицирует блок, который она уже сохранила, сохраняется только ссылка на существующий блок, а не весь новый блок.
Преимущество дедупликации в режиме реального времени перед дедупликацией в режиме постобработки заключается в том, что она требует меньше хранилища и сетевого трафика, поскольку дублированные данные никогда не сохраняются и не передаются. С другой стороны, вычисления хэшей могут быть вычислительно затратными, что снижает пропускную способность хранилища. Однако некоторые поставщики с дедупликацией в режиме реального времени продемонстрировали оборудование, которое выполняет дедупликацию в режиме реального времени с высокой скоростью.
Методы постобработки и встроенной дедупликации часто вызывают жаркие споры. [4] [5]
Словарь SNIA выделяет два метода: [2]
Другой способ классификации методов дедупликации данных — по месту их возникновения. Дедупликация, происходящая вблизи места создания данных, называется «исходной дедупликацией». Когда она происходит вблизи места хранения данных, она называется «целевой дедупликацией».
Дедупликация источника гарантирует, что данные на источнике данных дедуплицированы. Обычно это происходит непосредственно в файловой системе. Файловая система периодически сканирует новые файлы, создавая хэши и сравнивая их с хэшами существующих файлов. Когда обнаруживаются файлы с такими же хэшами, копия файла удаляется, а новый файл указывает на старый файл. Однако, в отличие от жестких ссылок , дублированные файлы считаются отдельными сущностями, и если один из дублированных файлов впоследствии изменяется, то с помощью системы, называемой копированием при записи, создается копия этого измененного файла или блока. Процесс дедупликации прозрачен для пользователей и приложений резервного копирования. Резервное копирование дедуплицированной файловой системы часто приводит к дублированию, в результате чего резервные копии становятся больше исходных данных. [6] [7]
Источник дедупликации может быть объявлен явно для операций копирования, так как не требуется никаких вычислений, чтобы узнать, что копируемые данные нуждаются в дедупликации. Это приводит к новой форме «связывания» в файловых системах, называемой reflink (Linux) или clonefile (MacOS), где один или несколько inode (записей информации о файле) создаются для совместного использования некоторых или всех своих данных. Он назван аналогично жестким ссылкам , которые работают на уровне inode, и символическим ссылкам , которые работают на уровне имени файла. [8] Отдельные записи имеют поведение копирования при записи, которое не является псевдонимом, т. е. изменение одной копии после этого не повлияет на другие копии. [9] ReFS от Microsoft также поддерживает эту операцию. [10]
Целевая дедупликация — это процесс удаления дубликатов, когда данные не были созданы в этом месте. Примером этого может служить сервер, подключенный к SAN/NAS. SAN/NAS будет целью для сервера (целевая дедупликация). Сервер не знает о какой-либо дедупликации, сервер также является точкой генерации данных. Вторым примером может быть резервное копирование. Обычно это будет хранилище резервных копий, такое как репозиторий данных или виртуальная ленточная библиотека .
Одна из наиболее распространенных форм реализации дедупликации данных работает путем сравнения фрагментов данных для обнаружения дубликатов. Для этого каждому фрагменту данных назначается идентификатор, вычисляемый программным обеспечением, как правило, с использованием криптографических хэш-функций. Во многих реализациях делается предположение, что если идентификация идентична, то данные идентичны, хотя это не может быть верно во всех случаях из-за принципа ящика ; другие реализации не предполагают, что два блока данных с одинаковым идентификатором идентичны, но фактически проверяют, что данные с одинаковым идентификатором идентичны. [11] Если программное обеспечение либо предполагает, что заданный идентификатор уже существует в пространстве имен дедупликации, либо фактически проверяет идентичность двух блоков данных, в зависимости от реализации, то оно заменит этот дублирующий фрагмент ссылкой.
После дедупликации данных, при обратном чтении файла, где бы ни была найдена ссылка, система просто заменяет эту ссылку на указанный фрагмент данных. Процесс дедупликации должен быть прозрачным для конечных пользователей и приложений.
Коммерческие реализации дедупликации различаются методами фрагментации и архитектурой.
На сегодняшний день дедупликация данных в основном использовалась с вторичными системами хранения. Причины этого двоякие: во-первых, дедупликация данных требует накладных расходов на обнаружение и удаление дублированных данных. В первичных системах хранения эти накладные расходы могут повлиять на производительность. Вторая причина, по которой дедупликация применяется к вторичным данным, заключается в том, что вторичные данные, как правило, имеют больше дублированных данных. В частности, приложения резервного копирования обычно генерируют значительные порции дублированных данных с течением времени.
Дедупликация данных успешно применялась в первичном хранилище в некоторых случаях, когда конструкция системы не требует значительных накладных расходов или не влияет на производительность.
Хранилище с одним экземпляром (SIS) — это способность системы брать несколько копий объектов контента и заменять их одной общей копией. Это средство устранения дублирования данных и повышения эффективности. SIS часто реализуется в файловых системах , программном обеспечении сервера электронной почты , резервном копировании данных и другом программном обеспечении, связанном с хранением данных. Хранилище с одним экземпляром — это простой вариант дедупликации данных. В то время как дедупликация данных может работать на уровне сегмента или подблока, хранилище с одним экземпляром работает на уровне объекта, устраняя избыточные копии объектов, таких как целые файлы или сообщения электронной почты. [12]
Хранилище с одним экземпляром может использоваться вместе с другими методами дублирования или сжатия данных (или наслаиваться на них) для повышения производительности в обмен на увеличение сложности и (в некоторых случаях) незначительное увеличение требований к пространству хранения.
Один из методов дедупликации данных основан на использовании криптографических хэш-функций для определения дублирующихся сегментов данных. Если два разных фрагмента информации генерируют одно и то же значение хэша, это известно как коллизия . Вероятность коллизии зависит в основном от длины хэша (см. атака дня рождения ). Таким образом, возникает опасение, что может произойти повреждение данных , если произойдет коллизия хэшей , и не используются дополнительные средства проверки для проверки того, есть ли разница в данных или нет. Как встроенная, так и постобрабатывающая архитектура могут предлагать побитовую проверку исходных данных для гарантированной целостности данных. Используемые хэш-функции включают такие стандарты, как SHA-1 , SHA-256 и другие.
Интенсивность вычислительных ресурсов процесса может быть недостатком дедупликации данных. Для повышения производительности некоторые системы используют как слабые, так и сильные хеши. Слабые хеши вычисляются намного быстрее, но существует больший риск коллизии хешей. Системы, использующие слабые хеши, впоследствии вычислят сильный хеш и будут использовать его в качестве определяющего фактора того, являются ли они фактически теми же данными или нет. Обратите внимание, что системные накладные расходы, связанные с вычислением и поиском значений хеша, в первую очередь являются функцией рабочего процесса дедупликации. Восстановление файлов не требует этой обработки, и любое дополнительное снижение производительности, связанное с повторной сборкой фрагментов данных, вряд ли повлияет на производительность приложения.
Еще одной проблемой является взаимодействие сжатия и шифрования. Целью шифрования является устранение любых различимых шаблонов в данных. Таким образом, зашифрованные данные не могут быть дедуплицированы, даже если базовые данные могут быть избыточными.
Хотя это и не является недостатком дедупликации данных, имели место утечки данных, когда недостаточные процедуры безопасности и проверки доступа использовались с большими репозиториями дедуплицированных данных. В некоторых системах, как это типично для облачного хранилища, [ требуется цитата ] злоумышленник может получить данные, принадлежащие другим, зная или угадывая хэш-значение желаемых данных. [13]
Дедупликация реализована в некоторых файловых системах, таких как ZFS или Write Anywhere File Layout , а также в различных моделях дисковых массивов . [ необходима ссылка ] Это служба, доступная как на NTFS , так и на ReFS на серверах Windows.