Запись дисков под Linux

Новый, но пока еще мало используемый стандарт записи дисков предоставляет гораздо больше возможностей и существенно легче в использовании. Подробно о том, как записывать диски по-новому под 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 или других): во-первых, их состав и организация довольно сильно отличается от того, что доступно на http://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. Пока данная программа очень нестабильна, и авторы не советуют ей пользоваться.

Для проверки дисков есть программа chkudf, пока только проверяющая целостность записи. В будущем планируется и udffck, которая будет восстанавливать запись. А теперь посмотрим, как все это работает:

  1. Берем чистый CD-RW и форматируем его (считая, что CD-RW - это sr0):
    # cdrwtool -d /dev/sr0 -q
  2. Создаем /dev/pktcdvd0, если его не существует:
    # mknod /dev/pktcdvd0 b 97 0
  3. Устанавливаем ваш cd-rw рекордер:
    # pktsetup /dev/pktcdvd0 /dev/sr0
  4. Теперь, можете смонтировать /dev/pktcdvd0 и копировать на него файлы!
    # mount /dev/pktcdvd0 /cdrom -t udf -o,rw,noatime

Хочу сразу заметить, что ни я, как автор статьи, ни Jens Axboe, как автор драйвера пакетной записи, не несут ответственности за любой вред, причиненный вашей системе (сбой, потеря данный etc), приводу CD-RW или диску. Это только тестовая версия и готовьтесь к худшему!

В "светлом будущем" компьютерных технологий не будет разрозненных островков информации и несовместимых носителей. Мир хайтека стремится к большей абстракции и этот процесс неизбежен. UDF, VFS, UTF - это только начало. Вы готовы к будущему? =)

APPENDIX A Сборка модуля ядра для чтения udf дисков

Внимание! Этот модуль предназначен только для чтения udf CD-RW/CD-R дисков! Он не читает DVD-video диски. Если вы хотите читать именно такие диски, воспользуйтесь специализированными программами (например, с сайта http://go.to/doom9). Тем более, с помощью этого модуля вы не сможете смотреть DVD (лучше попробуйте xine - очень красивый, быстрый и бесплатный dvd/vcd проигрыватель или mplayer - самый быстрый и "всеядный" мультимедиа проигрыватель.)

Сначала вы должны сконфигурировать свою систему:

  1. Удостоверьтесь, что у вас есть исходный код ядра (или хотя бы его заголовки), и что его версия >= 2.1.70
  2. Если у вас система, основанная на glibc-2.2 (а это RH7 или Mandrake 8.x), то проверьте ваш компилятор - обычно, по умолчанию это gcc-2.96, который не годится для сборки, установите kgcc, служащий для сборки ядра.
  3. Скачайте и распакуйте исходники модуля
  4. Сконфигурируйте процесс сборки:
    # ./Configure

Расшифрую процесс настройки:

Linux source directory [/usr/src/linux]: <-- указываете каталог, где установлен исходный код ядра

Alternate target install directory []: <-- можете просто нажать Enter, если вас устраивает расположение исходных текстов

C compiler name [gcc]: <-- ваш компилятор C (gcc в дистрибутивах на GLIBC2.1, kgcc для новых дистрибутивов - RH7, Mandrake 8.0

Linker name [ld -m elf_i386]: <-- параметры конечной сборки

UDF Write Support (y/n) [y]: n <-- укажите n, если вы не хотите поддержки записи

Внимание! Если вы хотите записывать udf диски, скажите y!

Compiler flags for debugging [-g]: <-- Если вы хотите отлаживать модуль, нажмите Enter, если нет введите пробел

(далее происходит выяснение параметров ядра)

Теперь можно набрать make udf.o; make install и если вы все правильно указали, модуль udf.o будет скомпилирован и установлен. Проверить его работоспособность можно просто попробовав смонтировать какой-нибудь UDF диск:

Загружаем модуль:

$ modprobe udf
Монтируем CD-ROM с указанными параметрами:
$ mount -t udf -o ro /dev/cdrom /mnt/cdrom

Далее с таким диском можно обращаться и как с обычным CD-ROM'ом.

APPENDIX B Подготовки к записи udf диска под Linux

  1. Удостоверьтесь, что у вас есть исходный код ядра (и что оно скачано с официального сайта kernel.org), и что его версия 2.4.4 или 2.4.5-pre1
  2. Если у вас система, основанная на glibc-2.2 (а это RH7 или Mandrake 8.x), то проверьте ваш компилятор - обычно, по умолчанию это gcc-2.96, который не годится для сборки, установите kgcc, служащий для сборки ядра.
  3. Скачайте и распакуйте исходники.
  4. Установите патч к ядру: # cd /usr/src/linux # patch -p1 < ~/<патч пакетной записи>
  5. Установите UDF патч (не следует применять udf из проекта linux-udf, т.к он развивается независимо от packet-cd) # patch -p1 < ~/udf-patch
  6. В меню конфигурации ядра, выберите "packet support" в секции "Block devices" (не забудьте включить поддержку записи UDF в секции "Filesystems").
  7. Соберите и установите новое ядро, перезагрузите систему.
    # make menuconfig
     # make dep install modules modules_install
     # reboot 
  8. Соберите cdrwtool, pktsetup (из проекта linux-udf):
    # cd ~/src/linux-udf/udf
     # ./Configure
     # make tools
     # cp tools/pktsetup mkudf cdrwtool /usr/sbin

Теперь вы готовы к записи!

APPENDIX С Запись udf дисков во FreeBSD

К сожалению, во FreeBSD пока не реализована поддержка udf, ее модуль cd поддерживает только DVD-RAM и CD-RW только на уровне чтения/записи по стандарту ISO-9660. Единственный возможный вариант записи udf диска в этой OS - создание udf-образа c помощью mkudf, который функционирует в силу совместимости FreeBSD c Linux, а затем его запись cdrecord. Естественно, при это теряете в удобстве.

Но не все так грустно. Судя по разговорам в конференциях hackers.freebsd, как только linux реализация более-менее станет стабильной, она будет портирована в текущую ветку и тогда для системных администраторов настанет хорошее время: благодаря "пакетной записи", станет возможным ведение syslog'ов, коротые невозможно стереть (если носитель CD-R), систем с "нуля", размером с DVD-RAM, конфигурируемых по-вашему вкусу и... Просто дух захватывает, что еще можно будет сделать :) Stay informed!



    * Сайт разработчиков отраслевого стандарта ECMA 167, ранее известного как ISO/IEC 13346 (описывает общую структуру записи на CD-R и CD-RW), являющегося базовым для UDF 2.0
    * Часто задаваемые вопросы по записи CD-R (CD-R FAQ)
    *Сайт Optical Storage Technogy Association, авторов рекомендации UDF
    *Техническая спецификация UDF
    *Сайт проекта Linux UDF
    *Коммерческие реализации UDF для Windows9x/NT/2k и MacOS
    *Проект по реализации пакетной записи для Linux (автор Jens Axboe)
    *Сайт, полностью посвященный DVD и вокруг него
    *Поддержка DVD под Linux
    *Очень красивый, быстрый и свободный (GPL) DVD/VCD проигрыватель для Linux/FreeBSD

    [Источник Softterra.ru]

    [ опубликовано 22/10/2001 ]

    Константин Лепихов - Запись дисков под Linux   Версия для печати