Константин Лепихов,
СофтТерра
Новый, но пока еще мало используемый стандарт записи дисков предоставляет гораздо больше возможностей и существенно легче в использовании. Подробно о том, как записывать диски по-новому под linux и пойдет речь в этой статье. Плюс немного о FreeBSD.
Любой владелец привода CD-ROM - это счастливый владелец, подтвердит
любой, у кого этот привод ломался, и кто почувствовал всю прелесть
существования в современном компьютерном мире без этого привода =) Но
это может и сказать владелец пишущего CD устройства. Особенно, если он
никогда не записывал диск под UNIX/Linux. Тому, кто работал с
графическими программами в Windows, очень сложно привыкнуть к
"спартанской" обстановке в мире *NIX. Да и сама процедура записи на
компакт-диск, пришедшая к нам из стародавних времен, больше походит на
пляску шамана у костра. Ее главный недостаток (многими расценивается
как достоинство) - неудобство создания записей и длительность их
создания.
Приход CD-RW (перезаписываемого компакт-диска), не ознаменовал
ничего нового для пользователя в смысле удобства записи: по-прежнему
приходилось создавать сессию, а до этого еще долго форматировать
болванку. В минусе была и низкая скорость записи на CD-RW (2x-4х против
8х-12х). Все начало меняться с приходом DVD. Для него была создана своя
файловая система UDF (Universal Disk Format), учитывающая его большую
емкость и скорость. Ведь стандарт iso9660 был создан еще в 1987 году,
и совершено не годился для нового носителя информации из-за
ограничений на объем и размещение данных. Изначально основной задачей
UDF была лишь непрерывность видеопотока и совместимость с обычной
файловой системой (т.н. Bridged UDF, в которой видеопотоки записывались
в двух видах - UDF и ISO9660). В последующих версиях системы добавилась
поддержка записи на CD-R и CD-RW диски. Это было большим шагов вперед
для обычных пользователей. Появился реальный конкурент ZIP дискам и
магнитооптике. Перечислю преимущества нового стандарта записи:
- низкая стоимость носителей и устройства записи
- возможность перезаписи/удаления "на лету"
- удобство записи, сравнимое с пользованием дискеты или любого другого сменного носителя информации
- более эффективное использование дискового пространства
- более быстрый доступ к информации
- надежность сохранности данных, как у обычных CD-R дисков
- самое главное - возможность чтения таких дисков на обычном CD-ROM
приводе (правда он должен быть выпущен не раньше 1998 года)
Новинка была сразу подхвачена фирмами Adaptec и CeQadrat, лидерами на
рынке программ для записи CD (теперь их продукты продаются под торговой
маркой Roxio). Adaptec разработала свою реализацию UDF, назвав ее
DirectCD, а CeQuadrat свою, назвав ее PacketCD. Названия как бы
подчеркивали доступность и компактность, "packed" - это от метода
записи на диск, в основе которого лежал принцип записи "пакетами" -
маленькими (32-64кб) блоками данных. Именно из-за этого обеспечивалась
большая гибкость при записи. Пропали проблемы "переполнения буфера"
записи. Появилась возможность "лечить" диски, на которых появились
плохие сектора: можно было или просто переформатировать диск, или
переписать тот участок, на котором возник сбой. Еще одно удобство
такой записи - диск можно не "закрывать" (finalize), до тех пор, пока
вас не устроит результат (сравните с CD-R, который нередко приходилось
перезаписывать по-новой из-за неправильно собранного "образа"). На
заре создания этого стандарта лишь малое количество CD рекордеров
поддерживало пакетную запись, но скоро ситуация начала выправляться -
производители приняли UDF и packed writing. На сегодняшний день все CD
рекордеры имеют поддержку пакетной записи.
"А как это реализовано на практике?", спросите вы. Спецификация OSTA UDF
подробно затрагивает это, и тут все зависит от разработчиков: под
Windows это драйвер, под Linux это модуль ядра. Есть также и драйвер для
MacOS 8.1 от Roxio. Реализация UDF под другие платформы мне не известна,
но в OSTA UDF заявлена поддержка под OS/2 и Unix(xBSD,VMS,HP-UX). По
крайней мере, FreeBSD, начиная с 4.2STABLE, официально поддерживает
запись на CD-RW, в 4.3STABLE добавлена поддержка DVD-RAM (см.
Приложение C). Наиболее удобно в Windows: поддержка сделана в виде
драйвера, который добавляет возможность чтения для CD-ROM привода и
записи для рекордера. Еще есть возможность изменения скорости
чтения/записи данных (что очень удобно и в обычных условиях, т.к обычно
CD-RW диск читается на той же скорости, что и записан). К сожалению,
из-за отсутствия у меня CD-RW, приходится говорить "возможно" и "я так
думаю". Весь процесс записи под Windows очень прост
- вы просто форматируете диск, как дискету (обычно это занимает ~ 20
минут), затем просто в "Проводнике" или вашем любимом файловом
менеджере копируете файлы на диск. Если что-то не так, или вы
передумали, просто стираете и записываете новый. Как говорится,
"доступно даже младенцу" =) DirectCD входит в Easy CD Creator, PackedCD
есть в WinOnCD. Из дополнительных возможностей под Windows реализована
компрессия данных, что позволяет разместить на диске 700Мб около 1 Гб
информации! Конечно, информация должна хорошо сжиматься и сам носитель
быть достаточно хорошим, иначе возможны сбои при чтении. Из личного
опыта хочу заметить, что DirectCD более стабилен и наиболее близок к
"идеальной OSTA UDF", а PackedCD более "наворочен" с точки зрения
функциональности, но с ним чаще сбои при записи из-за качества
носителей. К тому же PackedCD не совместим с реализацией UDF под Linux и
его не читает DirectCD, в общем достаточно закрытый и проблемный
продукт получился.
С Linux все сложнее...Здесь нормально реализовано только чтение дисков,
файловая система UDF официально входит в ядро, начиная с версии 2.3.7 и
доступна для предыдущих версии как дополнительный модуль. Большинство
дистрибутивов, кроме ASPLinux и RedHat, имеют поддержку UDF в ядрах 2.2
(это не касается 2.4, куда udf входит официально). util-linux также
знают эту файловую систему. Если у вас нет этого модуля (udf.o), то
его исходный код можно скачать с сайта linux-udf.sourceforge.net или
http://www.csc.calpoly.edu/~bfennema/udf.html (это страница Ben
Fennema, одного из разработчиков UDF для Linux) в виде архива, а затем
собрать самостоятельно (см. приложение А). В текущей версии драйвера -
0.9.4, доступной через CVS, добавлена опция iocharset, наконец-то
позволяющая видеть каталоги в кодировке, отличной от iso8859-1. Как уже
говорилось выше, с помощью этого модуля можно успешно читать UDF диски,
созданные на базе UDF 2.0 или 1.50 - это DirectCD и InCD.
К сожалению, запись udf дисков "на лету", пока находится в альфа
состоянии, но все равно, оптимизм автора (Jens Axboe) патча для
поддержки пакетной записи очень вдохновляет: уже сейчас можно свободно
записывать на CD-RW, скоро планируется поддержка CD-R, а затем
поддержка пакетной записи будет интегрирована в ядро 2.4. И это при том,
что версия еще 0.0.2k! Конечно, не все так безоблачно - еще не решен
вопрос с записью больших файлов, не до конца отработан алгоритм
восстановления после сбоя. Но как говорится, "it's sucks, but it's
works". Патчи для поддержки пакетной записи под ядро 2.4.5-pre1 можно
скачать с сайта или
через SourceForge . На сайте
SourceForge есть и CVS репозиторий, через который можно получить самую
свежую версию. Т.к вся поддержка предоставляется в виде патчей к ядру,
для сборки вам понадобится и само ядро =) Его также можно скачать с
ftp.kernel.org/pub/linux/kernel/v2.4 или любых общедоступных зеркал
(Chg, например). Я не советую использовать ядра из всевозможных
дистрибутивов (RedHat, Mandrake или других): во-первых, их состав и
организация довольно сильно отличается от того, что доступно на
www.kernel.org. Во-вторых, всевозможные добавления могут конфликтовать с
патчами. В-третьих, вам просто не удасться правильно "наложить" патч.
Это относится и к версиям от Alan Cox и других kernel maintainers.
Используйте только ядро от Linus Torvals, если вам не нужна лишняя
головная боль! После того, как вы установили и собрали ядро с поддержкой
пакетной записи (см. приложение B), самое время подумать, как и чем
записывать CD-RW диски =) К сожаление стандартные программы записи
дисков под Linux (cdrecord и mkisofs) здесь бессильны - поддержка udf в
них только планируется, так что приходится пользоваться средствами,
которые предлагают разработчики проекта linux-udf. В пакете для этого
предусмотрены 3 программы:
- pktsetup, служит для установки связи с packet device (т.е CD-RW приводом),
- cdrwtool, нужна для начальной разметки/форматирования диска CD-RW.
- mkudf, служит для создания udf-образов на нестандартные носители (dvd, dvdram,
cd-r). Запись таких образов производится cdrecord. Пока данная
программа очень нестабильна, и авторы не советуют ей пользоваться.