Листинг 3 Ключевой фрагмент "реаниматора" 75-минутных CD-RW дисков Вообще-то, для приличия следовало бы скорректировать и поля PLBA (LBA-адрес связан с абсолютным адресом следующим соотношением: LBA == ((Min*60) + Sec)*75 + Frame, однако текущие версии работают исключительно с абсолютными адресами и LBA-адреса игнорируют. Теперь все, что находится между концом Lead-in области и началом первого сектора, и будет называться pre-gap. При "прожиге" диска область pre-gap остается нетронутой и позже может быть прочитана на секторном уровне (а это как раз то, что нам нужно!) Сказать по чести, чрезмерное увеличение pre-gap первого трека – не самая лучшая идея, т. к. не все приводы способны читать такой "жирный" pre-gap. С точки зрения совместимости было бы лучше увеличивать pre-gapвторого трека, однако при этом первый трек придется располагать в самом начале диска и его тело неизбежно затрет восстанавливаемые сектора. И хотя это не такая уж большая проблема (в первых секторах диска все равно ничего ценного нет), к такой мере без особой необходимости все же лучше не прибегать. На крайний случай действуйте так: запишите на диск две сессии и вместо стартового адреса point`a номер 0x01 меняйте стартовый адрес point`a номер 0x02 (он будет находится в разделе session=2).
Теперь наскоро очистим наш подопытный диск и до отвала забьем его какими-нибудь файлами (предпочтительнее всего использовать текстовики – т.к. в этом случае будет сразу видно: извлекается ли с восстановленного диска мусор или полезная информация). Записав файлы на диск, тут же выполним его быструю очистку.
Убедившись, что диск действительно очищен и его содержимое уже недоступно, запустим Clone CD и запишем только что созданным нами "лечебный" образ. Запись должна проводиться в режиме DAO, иначе ничего хорошего у вас не получится (поэтому прежде чем восстанавливать сколь-нибудь ценный диск на еще неизвестном вам приводе, попробуйте потренироваться на "кошках", – дисках, не содержащем ничего интересного).
Вот наконец мы держим в руках свежевосстановленный диск. Но действительно ли он восстановлен? А вот сейчас и убедимся! Вставляем "воскресшего из пепла" в привод NEC и с замиранием сердца пробуем прочитать один из наугад взятых секторов из середины диска (начальные сектора обычно содержат нули, потом – файловую систему и их очень легко принять за бессмысленный мусор). О чудо!!! Оригинальное содержимое очищенного диска читается, как ни в чем не бывало!!! Правда, при попытке прочесть оглавление диска средствами операционной системы, привод может впасть в глухую задумчивость, граничащую с полным зависанием (ведь стартовый адрес первого трека расположен не в начале диска, а совсем в другом месте), но это все ерунда! Главное, что на секторном уроне диск все-таки доступен, пускай и не на всех приводах. Так, в частности, ASUS вообще отказывается читать такой диск, возвращая ошибку, а PHILIPS читает один мусор (к счастью, этот мусор можно восстановить, – достаточно просто на битовом уровне выполнить EFM-перекодировку с более "правильной" позиции. Поскольку возможных позиций всего 14, перебор обещает не затягиваться на длительное время. Тем не менее, лучше не извращаться, а просто приобрести более качественный привод).
Остается лишь привести диск в состояние, пригодное для переваривания операционной системой (что толку в работе с диском на низком уровне?). Последовательно читая все сектора диска один за другим, мы будем собирать их в один img-файл, для определенности именуемый recover.img. Сектора, которые не удалось прочитать даже с нескольких попыток, мы будем просто пропускать. Теперь скопируем "лечебный" ccd-файл в recover.ccd и вернем стартовый адрес первого трека на прежнее место. Запишем сформированный образ диска на новую болванку и… (если все сделано правильно) любой привод должен читать ее правильно. Сеанс демонстрационного восстановления окончен, и мы, малость освоившись с этой технологией, можем приниматься за вещи куда как более серьезные. Например, откроем собственную компанию по восстановлению очищенных дисков. Шутка! Хотя… почему бы и нет?
Хорошо, а как быть, если очищенный диск был многосессионным? Ведь описанные выше приемы рассчитаны на работу лишь с одной сессией! На самом деле, можно восстановить и многосессионный диск. Это лишь чуть-чуть труднее. Но чтобы это сделать, мы должны предварительно познакомиться с остальными полями TOC`а. А это уже тема следующей статьи!
Постой, а если после очистки диска на него что-то писалось, – возможно ли тогда его восстановление или нет? Разумеется, непосредственно затертые места утеряны безвозвратно, но остальную часть информации по-прежнему можно спасти. Если диск до очистки был многосессионным, то нам даже не придется корпеть над восстановлением файловой системы, т. к. файловая система каждой последующей сессии обычно дублирует предыдущую ("обычно" - это в смысле "за исключением удаленных файлов"), и последняя сессия диска оказывается достаточно далеко от его начала, а потому и риск ее затирания – минимален (если, конечно, схватиться вовремя, а не тогда, когда весь диск перезаписан до отказа). Восстановление односессионных дисков с затертой файловой системой – намного более трудная, но все-таки разрешимая задача. Во-первых, этих файловых систем на типовом диске целых две: ISO-9660 и Joliet, правда, в силу их близкого географического положения при затирании диска они обычно гибнут обе. Во-вторых, указанные файловые системы не поддерживают фрагментации, и всякий файл, записанный на лазерный диск, представляет собой единый информационный блок. Все, что нужно для его восстановления – определить точку входа и длину. Точка входа в файл всегда совпадает с началом сектора, а подавляющее большинство типов файлов позволяют однозначно идентифицировать свой заголовок по уникальной сигнатуре (в частности, для zip-файлов характерна следующая последовательность: 50 4B 03 04). Конец файла, правда, определяется уже не так однозначно, и единственная зацепка – структура самого восстанавливаемого файла. Впрочем, большинство приложений довольно лояльно относится к "мусору" в хвосте файла и потому точность определения его длины с погрешностью в один сектор на практике оказывается вполне достаточной. Поскольку файлы располагаются на диске вплотную, без "зазоров", конечный сектор всякого файла надежно вычисляется путем вычитания единицы из стартового сектора следующего за ним файла.
Вообще же говоря, техника восстановления лазерных дисков намного проще и незатейливее искусства врачевания их прямых коллег – дискет и жестких дисков. Правда, поговорку "семь раз отмерь – один раз отрежь" еще никто не отменял, и одна из пренеприятнейших особенностей работы с CD-RW как раз и состоит в том, что вы не можете гарантированно управлять процессом происходящей записи. Дискеты и жесткие диски в этом смысле полностью прозрачны, – что вы пишете, то вы и получаете. Перезаписываемые же носители, напротив, представляют собой "черный ящик", и вы никогда не можете быть уверены в том, что данный конкретный привод будет правильно интерпретировать отдаваемые ему команды (увы, восстановление CD-RW дисков никак не вписывается в рамки Стандарта, а все нестандартные махинации могут интерпретироваться приводом неоднозначно). Единственно, что остается посоветовать – не пускайте все на самотек, а бесконечно экспериментируйте, экспериментируйте и еще раз экспериментируйте, накапливая бесценный опыт, который вам когда-то очень пригодиться.