Повышение надёжности архивов.

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

  1. Назначение и цели утилиты
  2. Инструкция по эксплуатации
  3. Технологические подробности
  4. Лицензия
  5. Скачать

Назначение и цели утилиты

Я сделал эту простенькую программку для собственных нужд, но думаю, что она может оказаться полезной и другим людям. При поверхностном поиске в интернете мне не удалось найти что-то подобное существующее.
Я периодически делаю резервное копирование своих файлов на оптические носители (DVD-диски), чего и вам советую. Прежде всего это касается файлов, произведённых мной самим. Файлов, которые невозможно будет откуда-то скачать после их утраты. Это могут быть фотографии, снятые мною или близкими, моя работа, письма... Это следует делать потому, что жёсткий диск, на котором хранится вся информация в компьютере, не вечен, и рано или поздно обязательно выдет из строя. Это случится вдруг, и совершенно неожиданно. При этом вся хранящаяся на диске информация будет утеряна. Есть средства, позволяющие извлечь информацию со сгоревшего диска, но это не делается в домашних условиях, и стоит очень дорого. Гораздо легче и дешевле - делать периодическое резервное копирование.
Кто-то сказал мне, что предпочитает иметь второй жёсткий диск, и копировать важную информацию на него (определить его как зеркало, или просто периодически копировать файлы). Это неплохое решение, но оно имеет пару недостатков. Во-первых, это дороже: и удельная цена мегабайта места на жёстком диске выше, чем на DVD болванке, и необходимость изначальных крупных вложений. Во-вторых, такой способ будет приводить к периодическому удалению старых данных, которые могут когда-нибудь понадобиться. К примеру, однажды нам заказали создание сайта для нового бизнеса. Но, к моменту, когда сайт был готов, заказчик передумал открывать этот бизнес, и даже не востребовал у нас файлы сайта (хотя полностью оплатил работу). Я хранил эти файлы на своём жёстком диске около года, и затем удалил их. Спустя ещё год заказчик объявился, и попросил передать ему файлы сайта. Я в течении 10 минут нашёл их на старых DVD, которые я записывал в период после создания сайта. И мне, и заказчику, было очень приятно. Если бы я использовал резервное копирование на втором жёстком диске, то я давно бы уже удалил эти старые архивы, чтобы высвободить место для чего-то более востребованного.

Но копирование на оптические носители - тоже не идеально, так как DVD и CD диски тоже не вечны. Пишут, что их средний срок жизни составляет 3 - 5 лет. Лично мне уже приходислось рвать на себе волосы от досады, когда я не смог прочесть со старого CD старые фотографии, хранивщиеся только там, которые мне очень хотелось кому-то показать.
Можно делать по 2 копии каждого диска. Это действительно существенно повысит надёжность архивов, но это удвоит материальные затраты, и удвоит необходимое место для хранения архивных дисков. Иными словами, дублирование дисков являестя добавлением 50% избыточной информации, что представляется мне слишком затратным. Я задался целью сократить процент необходимой избыточности, при сохранении повышения надёжности архива.
В широко распространённом архиваторе RAR имеется возможность задать произвольный процент избыточности (по умолчанию 10%). Это может быть полезным при скачивании архивного файла с интернета, когда может потеряться один из пакетов (маленьких частей) файла, и архив окажется повреждён. Тогда с помощью этой избыточности можно восстановить утерянную часть файла. Но это не подходит для случая с копированием на CD и DVD, так как когда мы считываем файл с CD или DVD, то он либо считывается (если диск не испорчен), либо не считывается целиком. И никакая избыточность, "вшитая" в этот файл, не поможет нам прочесть его с испорченного диска.
Подходящей технологией мне представилось нечто похожее на технологию, используемую в RAID-5. Я сделал программку, которая прочитывает информацию с нескольких файлов (томов архива) и создаёт для них отдельный файл избыточности, того же размера, что и каждый том. Теперь я могу безболезненно потерять любой из имеющихся томов архива. Имеющийся файл избыточности позволит мне восстановить любой из утраченных томов. Важно сразу уточнить: безболезненной будет утрата только одного тома, не более.
Выбор размеров томов, и их количества остаётся за конечным пользователем (за вами). Я лишь постараюсь объяснить, из каких соображений следует исходить. Если мы делаем мало томов большого размера, к примеру всего 2 тома, то файл избыточности будет составлять треть (33%) от общего объёма получившегося архива. Это очень много избыточности. Зато это защищает от потери половины всей имеющейся полезной информации. Если мы делаем 100 томов, то том избыточности добавит всего 1% объёма. Но в таком случае, вероятность утери более чем одного тома становится довольно высокой, и соответсвенно высока опасность невозможности восстановления архива. В случае, если архив достаточно большой, занимает несколько DVD дисков, то интуиция подсказывает использовать тома, по размеру равные объёму диска, то есть по одному тому на диск. В таком случае, наш диск избыточности защитит нас от утраты любого одного из дисков архива. Но, остаётся открытым вопрос (если кто знает достоверный ответ на него, буду благодарен если сообщите): что ялвяется более вероятным - полная порча целого DVD диска (невозможность прочесть с него ничего), или частичная порча (невозможность прочесть только некоторые файлы). Если верно первое, то действительно стоит делать по одному тому на диск. Если второе - то наверно стоит разбить архив на более мелкие тома, и добавлять по одному небольшому файлу избыточности на каждый диск. Выбор за вами, моя утилита лишь позволяет вам создавать файлы избыточности, равные по размеру размеру тома.

Инструкция по эксплуатации

Утилита расчитана на использование в качестве архиватора очень хорошей, набирающей популярность, бесплатной программы с открытыми источниками 7-zip.
В скачанном архиве утилиты содержатся бэч-файлы для запуска утилиты: make.bat - для создания файла избыточности, и restore.bat - для восстановления недостающего тома архива.
Утилита не требует инсталяции, следует просто распаковать все файлы в ту же папку, где хранятся тома архива. При создании архива следует назвать его именем archive, так чтобы тома имели имена archive.7z.001, archive.7z.002, archive.7z.003...
Для удобства, архив утилиты так же содержит файл archive.bat, который запускает архиватор 7-Zip в режиме коммандной строки (при необходимости можно скорректировать путь к архиватору) на архивацию файлов и папок, перечисленных в текстовом файле files.txt (files.txt включён для примера, вам необходимо будет скорректировать его в соответствии с вашими нуждами).

Итак, по порядку. Для того, чтобы восползоваться утилитой повышения надёжности архивов, следует:

  1. Если у вас не установлен архиватор 7-zip, то скачать и установить его.
  2. Скачать и распаковать в отдельную папку утилиту повышения надёжности архивов (см. ссылки внизу).
  3. Отредактировать файл files.txt, заменив в нём пути и названия файлов и папок, подлежащих архивации (по одному пути в каждой строке файла).
  4. При желании, отредактировать файл archive.bat следующим образом:
    -mx=1 - здесь 1 - это степень сжатия архива. Чем выше степень сжатия, тем меньше будет объём архива (в зависимости от "сжимаемости" ваших файлов), и тем дольше будет идти архивация. Возможные значения: 0(без компрессии), 1, 3, 5, 7, 9
    -v500m - здесь 500m - размер тома 500Мб. Можно использовать b(байты), k(килобайты), m(мегабайты), g(гигабайты).
  5. Запустить файл archive.bat. Это создаст многотомный архив, и сразу вслед за этим, создаст дополнительный том избыточности с именем chksum.bin. Кроме этого, будет создан очень маленький файл sizes.txt, хранящий размеры каждого тома. Этот файл необходим для восстановления утраченного тома.
    Теперь, если хотите, вы можете поэкспериментировать: удалить любой из томов, и запустить файл restore.bat. Удалённый файл будет восстановлен. Для его проверки вы можете распаковать ваш архив, и убедиться, что все файлы успешно распаковались.
  6. Записать тома архива, файл chksum.bin и файл sizes.txt на оптические носители (CD или DVD болванки).

Технологические подробности

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

Утилита написана на языке PHP. Это скриптовый язык, предназначенный для создания активных интернет-сайтов. Он совершенно не предназначен для создания подобных утилит. Однако, тем не менее, он позволяет это сделать, и программа работает достаточно быстро. Выбор пал на PHP просто потому, что это мой первый за много лет эксперимент прикладного (не веб-ориентированного) программирования. Я просто не помню (и не имею на компьютере компиляторов) других языков.
PHP - это интерпретируемый язык. Это означает, что сама программа распространяется в виде исходного кода, и выполняется на компьютере с помощью интерпретатора PHP (файлы php.exe и php5ts.dll). Это так же означает, что если у вас уже установлен PHP (например в составе Денвера), то вам не нужно повторно скачивать интерпретатор, и размер утилиты для скачивания для вас будет горазо меньшим. Но не забудьте скорректировать (при необходимости) пути к вашему PHP в бэч файлах. В поставляемых файлах предполагается путь, устанавливаемый по умолчанию Денвером: Z:\usr\local\php5\

Лицензия

Утилита распространяетя по лицензии GNU GPL. Утилита свободна и бесплатна. Это, однако, не лишает вас права отблагодарить меня любой суммой по вашему усмотрению, кое право вы можете осуществить посредством системы PayPal, кликнув по ниже-стоящей кнопке (там справа сверху можно выбрать русский язык).

Скачать

Скачать полную версию (включая интерпретатор PHP) 1,56Мб
Скачать базовую версию (без интерпретатора PHP) 1,24Кб



С удовольствием отвечу на интересующие вас вопросы по