Parchive ( сокращение от parity archive , официально известное как Parity Volume Set Specification [1] [2] ) — это система стирающего кода , которая создает файлы par для проверки контрольной суммы целостности данных , с возможностью выполнения операций по восстановлению данных , которые могут исправить или регенерировать поврежденные или отсутствующие данные.
Parchive изначально был написан для решения проблемы надежного обмена файлами в Usenet , [3] но его можно использовать для защиты любых данных от повреждения данных , сбоя диска , сбоя битов и случайного или злонамеренного повреждения. Несмотря на название, Parchive использует более продвинутые методы (в частности, коды исправления ошибок ), чем упрощенные методы четности обнаружения ошибок .
По состоянию на 2014 год PAR1 устарел, PAR2 готов к широкому использованию, а PAR3 — это прекращенная экспериментальная версия, разработанная автором MultiPar Ютакой Савадой. [4] [5] [6] [7] Исходный проект SourceForge Parchive неактивен с 30 апреля 2015 года. [8] Новая спецификация PAR3 разрабатывается с 28 апреля 2019 года автором спецификации PAR2 Майклом Нахасом. Альфа-версия спецификации PAR3 была опубликована 29 января 2022 года [9], в то время как сама программа находится в стадии разработки.
Parchive был предназначен для повышения надежности передачи файлов через группы новостей Usenet . Usenet изначально был разработан для неформальных бесед, а базовый протокол NNTP не был предназначен для передачи произвольных двоичных данных. Другим ограничением, приемлемым для бесед, но не для файлов, было то, что сообщения обычно были довольно короткими по длине и ограничивались 7-битным текстом ASCII . [10]
Были разработаны различные методы для отправки файлов через Usenet, такие как uuencoding и Base64 . Позднее программное обеспечение Usenet допускало 8-битный Extended ASCII , что позволяло использовать новые методы, такие как yEnc . Большие файлы разбивались, чтобы уменьшить эффект поврежденной загрузки, но ненадежная природа Usenet сохранялась.
С появлением Parchive можно было создавать файлы четности, которые затем загружались вместе с исходными файлами данных. Если какой-либо из файлов данных был поврежден или утерян при распространении между серверами Usenet, пользователи могли загрузить файлы четности и использовать их для восстановления поврежденных или отсутствующих файлов. Parchive включал создание небольших индексных файлов (*.par в версии 1 и *.par2 в версии 2), которые не содержат никаких данных для восстановления. Эти индексы содержат хэши файлов , которые можно использовать для быстрой идентификации целевых файлов и проверки их целостности.
Поскольку файлы индекса были такими маленькими, они минимизировали объем дополнительных данных, которые приходилось загружать из Usenet для проверки того, что все файлы данных присутствуют и не повреждены, или для определения того, сколько томов четности требовалось для исправления любых повреждений или восстановления любых отсутствующих файлов. Они были наиболее полезны в версии 1, где тома четности были намного больше, чем короткие файлы индекса. Эти большие тома четности содержат фактические данные восстановления вместе с дублирующей копией информации в файлах индекса (что позволяет использовать их самостоятельно для проверки целостности файлов данных, если нет доступного небольшого файла индекса).
В июле 2001 года Тобиас Рипер и Стефан Велюс предложили спецификацию Parity Volume Set, и при содействии других участников проекта версия 1.0 спецификации была опубликована в октябре 2001 года. [11] Par1 использовал коррекцию ошибок Рида-Соломона для создания новых файлов восстановления. Любой из файлов восстановления может быть использован для восстановления отсутствующего файла из неполной загрузки .
Версия 1 получила широкое распространение в Usenet, но имела некоторые ограничения:
В январе 2002 года Говард Фукада предложил разработать новую спецификацию Par2 со значительными изменениями, согласно которым проверка и восстановление данных должны работать с блоками данных, а не с целыми файлами, и что алгоритм должен перейти на использование 16-битных чисел вместо 8-битных чисел, которые использовались в PAR1. Майкл Нахас и Питер Клементс взяли эти идеи на вооружение в июле 2002 года с дополнительным вкладом Пола Неттла и Райана Галлахера (которые оба написали клиенты Par1). Версия 2.0 спецификации Parchive была опубликована Майклом Нахасом в сентябре 2002 года. [14]
Затем Питер Клементс написал первые две реализации Par2, QuickPar и par2cmdline. Заброшенный в 2004 году, Пол Хоул создал phpar2 для замены par2cmdline. Ютака Савада создал MultiPar для замены QuickPar. MultiPar использует par2j.exe (который частично основан на методах оптимизации par2cmdline) для использования в качестве внутреннего движка MultiPar.
Версии 1 и 2 формата файла несовместимы. (Однако многие клиенты поддерживают обе.)
Для Par1, файлов f1 , f2 , ..., fn , Parchive состоит из индексного файла ( f.par ), который является файлом типа CRC без блоков восстановления, и ряда «томов четности» ( f.p01 , f.p02 и т. д.). Учитывая все исходные файлы, за исключением одного (например, f2 ), можно создать отсутствующий f2, учитывая все остальные исходные файлы и любой из томов четности. В качестве альтернативы можно воссоздать два отсутствующих файла из любых двух томов четности и т. д. [15]
Par1 поддерживает до 256 исходных файлов и файлов восстановления.
Файлы Par2 обычно используют эту систему именования/расширений: filename.vol000+01.PAR2 , filename.vol001+02.PAR2 , filename.vol003+04.PAR2 , filename.vol007+06.PAR2 и т. д. Число после "+" в имени файла указывает, сколько блоков он содержит, а число после "vol" указывает номер первого блока восстановления в файле PAR2. Если индексный файл загрузки указывает на отсутствие 4 блоков, самый простой способ восстановить файлы — загрузить filename.vol003+04.PAR2 . Однако из-за избыточности filename.vol007+06.PAR2 также приемлем. Существует также индексный файл filename.PAR2 , он идентичен по функциям небольшому индексному файлу, используемому в PAR1.
Спецификация Par2 поддерживает до 32 768 исходных блоков и до 65 535 блоков восстановления. Входные файлы разбиваются на несколько блоков одинакового размера, так что файлы восстановления не обязательно должны быть размером с самый большой входной файл.
Хотя Unicode упоминается в спецификации PAR2 как опция, большинство реализаций PAR2 не поддерживают Unicode.
Поддержка каталогов включена в спецификацию PAR2, но большинство или все реализации ее не поддерживают.
Первоначально планировалось, что спецификация Par3 будет опубликована как улучшение спецификации Par2. Однако на сегодняшний день [ когда? ] она остается закрытой по исходному коду владельцем спецификации Ютакой Савадой.
Обсуждение нового формата началось в разделе проблем GitHub поддерживаемого форка par2cmdline 29 января 2019 года. Обсуждение привело к новому формату, который также называется Par3. Новая спецификация формата Par3 опубликована на GitHub, но по состоянию на 28 января 2022 года остается черновиком альфа-версии. Спецификация написана Майклом Нахасом, автором спецификации Par2, при содействии Ютаки Савады, animetosho и malaire.
Новый формат, как утверждается, имеет ряд преимуществ по сравнению с форматом Par2, в том числе:
Программное обеспечение для операционных систем, соответствующих стандарту POSIX :
Первоначальная идея этого проекта заключалась в предоставлении инструмента для применения концепций возможностей восстановления данных RAID-подобных систем к размещению и восстановлению многочастных архивов в Usenet.