21 мая 2008 г.

ECC и UUE

Садитесь, дети, на свои места. Тема сегодняшнего урока на доске. Сегодня мы будем изучать ECC и UUE. Начнем с ECC.



Предположим, что у вас есть одна дискетка (3,5”). Емкость дискетки 1,38 MB. Требуется перенести на ней 1 файл размером 825 Кб. Все было бы просто. Но дополнительно известно, что на дискете 30 сбойных кластеров (распределены приблизительно равномерно, каждые 50 Кб).



Самое простое решение – это сжать файл архиватором. И переносить уже меньший файл. Но искомый файл и есть архив, сжатый 7zip.



Если точнее я взял 6,7 Мб текста (plain-text) и сжал zip-ом до 1,65 МБ, rar-ом до 890 Кб, 7zip-ом до 825 Кб. Я использую в дальнейшем 7zip архив. Так как лучше всех сжал текст 7zip, то его архив в дальнейшем практически несжимаем.



Носить несколько раз в надежде, что хоть раз, да и перенесем – пустая затея. В сложившейся ситуации лучший выход ECC (http://www.ice-graphics.com/ICEECC/IndexE.html). Программа распространяется бесплатно. ECC (Error Correction Code) позволяет по имеющемуся файлу создать файл с избыточной информацией для восстановления.


Запускаем ECC. Выбираем “Create”. Размер кластера на дискете 512 байт. Поэтому нам потребуется не менее 15 Кб избыточной информации (512x30). Ставим “Block size”=4096. “Number of recovery blocks”=207 (исходное количество блоков) + 100 (восстанавливаемое количество блоков) = 307. И через 12 секунд получаем файл весом 1,27 Мб. С его помощью мы сможем восстановить до 100 сбойных кластеров на дискете. Естественно, что на целевом компьютере тоже должен быть ЕСС для извлечения файла.


Кроме устаревших дискетных носителей ECC окажется и полезным при записи DVD+R носителей (также как и всех других, известных вам носителей). Согласитесь лучше создать для каждого DVD диска своей коллекции восстановительный файл в размере 400 МБ. И тогда 1 диск с восстановительными записями будет гарантировать целостность данных на 11 других дисках. Для этого надо выбрать “Redundancy”=10%, “Source block count”=32767. Если у вас медленный компьютер, то следует снижать второй параметр вплоть до 4096, пока время вычислений не станет приемлемым.


Похожее решение предлагает Winrar. Но его “восстановительная запись” подвержена многим ограничением и плохо настраивается. Посему и годится только для носителей с малым количеством повреждений (пару кластеров). Коммерческий Winrar нельзя противопоставить бесплатной связке 7zip-ECC.


Альтернативное решение – сделать две копии файла на два (три) носителя. И восстановить используя целые участки каждого файла, используя nscopy (freeware, http://dmitrys.nm.ru). Но этот вариант слишком расточителен на носители. Нам придется носить около 100% избыточных данных, хотя хватило бы 10%.


Сверить исходный и целевой файл можно, используя md5. Для этого в мире Windows есть утилита md5sum. Или воспользоваться функционалом Total Commander-а (Файл->Посчитать CRC-суммы->md5). Каждый файл будет представлен записью вида (md5-хэш + имя файла):



6769aa5bea2f6beff49f353a2d6d8b36 *1.7z



Если на другом компьютере md5-сумма совпадет то с вероятностью 100% (точнее 100%-7,27x10^-37%) мы донесли файл в исходном виде (не обязательно запоминать md5-хэш, в тех же программах есть функции автоматической сверки md5-сумм).



Теперь о UUE.


Передать текстовый файл через интернет очень легко:






    • его можно послать в виде письма;

    • его можно послать в виде сообщения чата, интернет-пэйджера;

    • разместить содержимое файла на форуме в сообщениях;

    • разместить как веб-страницу в интернете на бесплатном хостинге (таком как www.blogspot.com).



Но есть проблема с байтовыми файлами.


Согласитесь, что разместить текстовое сообщение в интернете проще, чем файл или программу. Не все хостинги бесплатно принимают на хранение файлы всех типов с неограниченным сроком хранения.


Раздать файл можно, в этом случае, используя UUE. Смысл UUE в том, что файл превращается в текстовый. Для этого есть утилита uuencode. Можно воспользоваться и функционалом Total Commander-a (Файл->Кодировать->UUencode). Сжатие текста в UUE увеличивает размер файла на 40%. Поэтому не вредно перед UUE-кодированием применять архивирование.


UUE-файл на выходе будет похож на текстовое сообщение. А уже текст разместить в интернете гораздо проще.



Приведу пример.


Возьмем файл весом 6,7 Кб, содержащий 1000 наиболее часто употребляемых немецких слов (файл текстовый, хотя на его примере, должен быть байтовый). Сжатие 7zip-ом превратило его в архив (3,1 Кб). Кодирование в UUE дало на выходе 4,4 Кб файл.


Вот он:




begin 644 top1000de.7z

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

-0\@!%08!`"``````````

`

end

sum -r/size 9922/3163


Суммарно, процесс был таким: 7zip->UUE. Значит, для восстановления файла надо выполнить всё в обратном порядке.


Если вы хотите точно быть уверенным в том, что файл восстанавливается точно, то вот вам в помощь md5-сумма исходного файла:



5af59091f6a4c52cbe625363bfefa1d7 *top1000de.txt



Удачи в начинаниях.

Комментариев нет: