Запись CD-R/RW в UDF формате

Статья о том, как работать с технологией DirectCD в Linux

[Дмитрий Налдаев]

Запись CD-R/RW в формате UDF

Оглавление документа

  1. Введение
  2. Что такое UDF
  3. UDF и Linux
  4. Немного истории
  5. Ядро 2.4.23
  6. Не все так радужно, как хотелось бы
  7. И все-таки она работает !
  8. И как оно читается на других компах?
  9. Выводы

Введение

Итак, по просьбам телезрителей, требующих поделиться опытом обуздания UDF, дабы и другие могли ее использовать, решил таки написать маленький отчет. В общем я решил, не писать инструкцию по образу и подобию разных HowTo и FAQов, а просто рассказать что, как и почему делал, и на какие грабли при этом наступил... Сразу предупреждаю, что писака из меня никакой, так что просьба ногами не пинать. Может действительно уже пришло время открыть настоящую охоту на капризную Музу?

Что такое UDF

С появлением CD-writer приводов стало возможно не только только читать CD диски на компьютере, но и записывать их на специальные CD-R диски, в народе именуемые болванками. А с появлением CD-RW болванок, диски стало можно не только записывать, но и перезаписывать.

К сожалению классическая технология записи на CD-R(W) обладает существенным недостатком сначала нужно создать образ диска, который потом будет прошит на болванку. Такой подход имеет ряд существенных недостатков, и в частности требуется место для образа диска, а кроме того данные на диске нельзя оперативно обновлять те CD-RW диск можно стереть за раз и... в лучшем случае можно дописать новые данные в новую сессию...

А почему собственно говоря нельзя записывать данные на CD-RW как на обычную дискету? Ведь классическая запись через образ возникла из-за ограничений, налагаемых технологией записи на простой CD-R диск, когда в течении сессии нельзя гасить лазер...

В результате была разработана технология произвольной записи на CD-RW диск, получившая название DirectCD (на сколько я понимаю это торговая марка или что-то типа того) и известная среди специалистов, как пакетная запись на CD. А UDF это файловая система, используемая при пакетной записи на CD. По этому UDF диск - это Direct CD диск, и работать с таким диском можно как с обычной дискетой только очень большого объема...

UDF и Linux

При конфигурировании ядра Linux серии 2.4 в разделе файловые системы появились опции для поддержки UDF. Но help к этой опции гласит: Due to lack of support for writing to CDR/CDRW's, this option is only supported for hard discs, DVD-RAM, and loopback files. те поддержка записи на CD отсутствует в принципе :-( но читать UDF диски уже можно и то в перед. В принципе писать на UDF диск тоже можно, но по старинке те через образ, но при этом теряются все преимущества UDF, так что этот метод я не буду рассматривать дальше... У меня даже было желание выбить из начальства DVD-RAM чтобы получить возможность нормально писать на UDF.

Немного истории

UDF диски я использую довольно давно раньше резак стоял на соседнем компьютере под управлением какой-то там версии Виндовс, и DirectCD к нему прикрутили при первой же возможности, и что самое главное, хозяин этого компа постоянно следил тобы тама все работало (поскольку он сам тоже пользовался UDF дисками). В общем, когда мне нужно было что-нибудь записать на UDF диск, я кидал этот диск к нему в привод, и заливал туда все что мне было нужно через Самбу, а читать такие диски, как я уже отмечал выше, можно было и под линуксом...

Но не так давно этот человек уволился, и его привод перекочевал ко мне... Конечно у нас в комнате есть еще один пишущий привод, но он постоянно кочует между разными компьютерами, а поскольку кроме меня похоже больше нет активных пользователей UDF в нашей комнате, то записывать на этом приводе, точно так же как я записывал раньше на другом, получается далеко не всегда...

Совсем недавно в списке рассылки debian-russian промелькнул вопрос http://lists.debian.org/debian-russian/2003/debian-russian-200310/msg01026.html и очень любопытный ответ в конце соответствующего треда http://lists.debian.org/debian-russian/2003/debian-russian-200310/msg01153.html

Ядро 2.4.23

Так уж получилось, что выход ядра 2.4.23 совпал с сообщением об дыре в более ранних ядрах, через которую поломали сервера Debian. К тому же мне нужно было прикрутить привод, который достался мне после ухода коллеги. В результате я решил обновить ядро, а за компанию посмотреть, на сколько реально получить поддержку записи на UDF диск под линуксом...

Я снова нашел письмо в архиве списка рассылки debian-russian, в котором говорилось, что при наличии соответствующего патча UDF диски не только читаются но и пишутся под линуксом и пошел по ссылкам, с начала на http://w1.894.telia.com/~u89404340/patches/packet/2.4/ а потом стал исследовать этот сайт и в результате нашел небольшую страничку, http://w1.894.telia.com/~u89404340/packet.html посвященную пакетной записи на CD под линуксом и небольшое HowTo по этому вопросу http://cvs.linuxfromscratch.org/index.cgi/hints/Attic/cdrw-hint.txt?rev=1.3

После изучения документации я вытащил патч http://w1.894.telia.com/~u89404340/patches/packet/2.4/packet-2.4.23-pre8.patch.bz2 (Бонус для пользователей Perm9 - это патч доступен по адресу ftp://ftp.linux.perm.ru/people/dima/kernel/packet-2.4.23-pre8.patch.bz2 ) который встал на ядро 2.4.23 без лишних вопросов. Я ставил этот патч командой

       
       bzcat /home/dima/packet-2.4.23-pre8.patch.bz2 |patch -Np1
из корневого каталога дерева исходников ядра 2.4.23

Дальше, кроме стандартных телодвижений, необходимых для получения поддержки обычной записи на CD, я поставил галочки при конфигурировании ядра напротив опций

       
       <<Packet writing on CD/DVD media>> 
в разделе "Block devices" (эта опция становится доступна после наложения указанного выше патча) и
       
       <<UDF file system  support (read only)>> 
       <<UDF write support (DANGEROUS)>> 
в разделе "File systems". После чего я собрал новое ядро, инсталировал его, и перезагрузил компьютер с новым ядром... Не забудьте создать файлы устройств:
       
AirGate:~# for i in 0 1 2 3; do mknod /dev/pktcdvd$i b 97 $i; \
           chown root.cdrom /dev/pktcdvd$i; chmod 660 /dev/pktcdvd$i; done

Не все так радужно, как хотелось бы

Для начала я разобрался с обычной записью на диск, и после того, как скопировал один CD на болванку, вплотную занялся UDF. Для начала я решил примонтировать свой старый UDF диск, который был создан в M$ Windows и до этого прекрасно читался:

       
AirGate:~# mount /dev/cdrom /cdrom -t udf
mount: block device /dev/cdrom is write-protected, mounting read-only
AirGate:~# ls -l /cdrom
ls: /cdrom/XF86: No such file or directory
ls: /cdrom/debian: No such file or directory
ls: /cdrom/hmm: No such file or directory
ls: /cdrom/kernel: No such file or directory
ls: /cdrom/unsorted: No such file or directory
ls: /cdrom/win-unknown: No such file or directory
ls: /cdrom/wine: No such file or directory
ls: /cdrom/mmedia: No such file or directory
ls: /cdrom/music: No such file or directory
ls: /cdrom/debian-2: No such file or directory
ls: /cdrom/OOo_1.1rc5_LinuxIntel_ruRU_install_alt1.tar.gz: No such file or directory
ls: /cdrom/meetings: No such file or directory
итого 0
AirGate:~#

Бррр. Странно дело как зовут файл он вроде бы знает, а самого файла нет. С таким я еще по-моему не встречался... Но может я чего делаю неправильно? Еще раз перечитываю HowTo, после чего говорю

       
AirGate:~# apt-get install udftools
соответствующий пакет на удивление оказался в woody... Если у вас другой дистрибутив, и в него не входят udftools, скачать их исходные тексты можно например здесь: ftp://alpha.linux.perm.ru/people/dima/kernel/udftools_1.0.0b2.orig.tar.gz Читаю документацию к пакету. теперь у меня следующая попытка:
       
AirGate:~# pktsetup /dev/pktcdvd0 /dev/cdrom
AirGate:~# mount /dev/pktcdvd0 /cdrom -t udf
AirGate:~# ls -l /cdrom
ls: /cdrom/XF86: No such file or directory
ls: /cdrom/debian: No such file or directory
ls: /cdrom/hmm: No such file or directory
ls: /cdrom/kernel: No such file or directory
ls: /cdrom/unsorted: No such file or directory
ls: /cdrom/win-unknown: No such file or directory
ls: /cdrom/wine: No such file or directory
ls: /cdrom/mmedia: No such file or directory
ls: /cdrom/music: No such file or directory
ls: /cdrom/debian-2: No such file or directory
ls: /cdrom/OOo_1.1rc5_LinuxIntel_ruRU_install_alt1.tar.gz: No such file or directory
ls: /cdrom/meetings: No such file or directory
итого 0
AirGate:~#
Как говорится те же яйца, только в профиль, с той лишь разницей что теперь mount не ругается по поводу read-only media. И что? Выходит Облом? Мы так не договаривались...

И все-таки она работает !

К счастью у меня был совершенно новый CD-RW диаметром 85mm (те минидиск) и я решил попробовать, а как оно будет работать с ним.

Для начала диск нужно отформатировать:

       
AirGate:~# man cdrwtool
Reformatting cdrwtool(1), please wait...
AirGate:~# cdrwtool -d /dev/cdrom -q
using device /dev/cdrom
4085KB internal buffer
setting write speed to 12x
Settings for /dev/cdrom:
        Fixed packets, size 32
        Mode-2 disc

I'm going to do a quick setup of /dev/cdrom. The disc is going to be blanked and 
formatted with one big track. All data on the device will be lost!! Press CTR
L-C to cancel now.
ENTER to continue.

Initiating quick disc blank
Disc capacity is 89408 blocks (178816KB/174MB)
Formatting track
start=0, blocks=16, type=RESERVED
start=16, blocks=3, type=VRS
start=19, blocks=237, type=USPACE
start=256, blocks=1, type=ANCHOR
start=257, blocks=31, type=USPACE
start=288, blocks=32, type=PVDS
start=320, blocks=32, type=LVID
start=352, blocks=32, type=STABLE
start=384, blocks=1024, type=SSPACE
start=1408, blocks=87712, type=PSPACE
start=89120, blocks=31, type=USPACE
start=89151, blocks=1, type=ANCHOR
start=89152, blocks=160, type=USPACE
start=89312, blocks=32, type=STABLE
start=89344, blocks=32, type=RVDS
start=89376, blocks=31, type=USPACE
start=89407, blocks=1, type=ANCHOR
Writing UDF structures to disc
Quick setup complete!
AirGate:~#

Снова пытаюсь подмонтировать теперь уже свежесозданный диск

       
AirGate:~# ls -l /cdrom
total 0
drwxr-xr-x    2 root     root           40 Dec  9 19:14 lost+found
AirGate:~#
Ураа! теперь она уже не ругается по поводу того что не может найти файлы, но нормально показывает содержимое диска. А писать-то на диск теперь можно?
       
AirGate:~# mkdir /cdrom/test
AirGate:~# ls -l /cdrom
total 0
drwxr-xr-x    2 root     root           40 Dec  9 19:14 lost+found
drwxr-xr-x    2 root     root           40 Dec  9 20:31 test
AirGate:~#

А как шустро происходит запись на диск?

       
AirGate:~# time cp /home/dima/src/kernel-source-2.4.23.tar.bz2 /cdrom; time umount /cdrom

real    0m0.258s
user    0m0.010s
sys     0m0.170s

real    1m5.616s
user    0m0.000s
sys     0m0.040s
AirGate:~#
Может и не очень шустро, но нужно учитывать, что привод древний и умеет всего только 4x на CD-RW болванки... А как диск читается после того, как его размонтировали и снова примонтировали?
       
AirGate:~# mount /dev/pktcdvd0 /cdrom -t udf
AirGate:~# ls -l /cdrom
total 29304
-rw-r--r--    1 root     root     30006491 Dec  9 20:37 kernel-source-2.4.23.tar.bz2
drwxr-xr-x    2 root     root           40 Dec  9 19:14 lost+found
drwxr-xr-x    2 root     root           40 Dec  9 20:31 test
AirGate:~# time cp /cdrom/kernel-source-2.4.23.tar.bz2 /tmp

real    1m3.749s
user    0m0.000s
sys     0m0.120s
AirGate:~#
Но не постоянно же работать с cd из под root'а. для этого создаю каталог /mnt/cdrw и добавляю такую строчку в /etc/fstab
       
/dev/pktcdvd0   /mnt/cdrw       auto            rw,user,noauto,umask=0,noatime 0       0
Теперь интересу для пытаюсь смонтировать обычный iso9660 CD диск:
       
dima@AirGate:~$ mount /mnt/cdrw
mount: /dev/pktcdvd0: can't read superblock
dima@AirGate:~$
А UDF диск монтируется нормально
       
dima@AirGate:~$ mount /mnt/cdrw
dima@AirGate:~$
Странно дело mount /cdrom нормально монтирует как iso9660 так и UDF диски без проблем, но в режиме read-only... в /etc/fstab для него прописано
       
/dev/cdrom      /cdrom          auto            ro,user,noauto,unhide   0 0
Но это не самое важное, просто немного жаль, что нельзя использовать одну и ту же точку монтирования для всех дисков. Ладно сейчас хочу попробовать писать на диск обычным пользователем:
       
dima@AirGate:~$ mkdir /mnt/cdrw/dd
mkdir: cannot create directory `/mnt/cdrw/dd': Permission denied
dima@AirGate:~$ ls -l /mnt
total 1
drwxr-xr-x    4 root     root          264 Dec  9 19:14 cdrw
drwxr-xr-x    2 root     root         1024 Sep 25 20:01 master.mnt
dima@AirGate:~$
Опс... а у меня просто не те, ща мы их быстренько...
       
dima@AirGate:~$ umount /mnt/cdrw
dima@AirGate:~$ ls -l /mnt
total 2
drwxrwxr-x    2 root     cdrom        1024 Dec  9 20:36 cdrw
drwxr-xr-x    2 root     root         1024 Sep 25 20:01 master.mnt
dima@AirGate:~$
Опа! а права на точку монтирования уже стоят какие надо. Выходит при монтировании права точки монтирования изменяются... Я как-то не обращал внимания на этот довольно любопытный момент. При монтирование обычных дискет с FATом таких проблем не было... Ну ладно...
       
dima@AirGate:~$ mount /mnt/cdrw
dima@AirGate:~$ ls -l /mnt
total 1
drwxr-xr-x    4 root     root          264 Dec  9 19:14 cdrw
drwxr-xr-x    2 root     root         1024 Sep 25 20:01 master.mnt
dima@AirGate:~$ su
Password:
AirGate:/home/dima# chown root.cdrom /mnt/cdrw
AirGate:/home/dima# chmod g+w /mnt/cdrw
AirGate:/home/dima# ls -l /mnt
total 1
drwxrwxr-x    4 root     cdrom         264 Dec  9 19:14 cdrw
drwxr-xr-x    2 root     root         1024 Sep 25 20:01 master.mnt
AirGate:/home/dima# exit
exit
dima@AirGate:~$ mkdir /mnt/cdrw/dd
dima@AirGate:~$ ls -l /mnt/cdrw/
total 29304
drwxr-xr-x    2 dima     dima           40 Dec 10 12:21 dd
-rw-r--r--    1 root     root     30006491 Dec  9 20:37 kernel-source-2.4.23.ta
r.bz2
drwxr-xr-x    2 root     root           40 Dec  9 19:14 lost+found
drwxr-xr-x    2 root     root           40 Dec  9 20:31 test
dima@AirGate:~$
dima@AirGate:~$ umount /mnt/cdrw
dima@AirGate:~$ mount /mnt/cdrw
dima@AirGate:~$ ls -l /mnt/
total 1
drwxrwxr-x    5 root     cdrom         308 Dec  9 19:14 cdrw
drwxr-xr-x    2 root     root         1024 Sep 25 20:01 master.mnt
dima@AirGate:~$
Кажется поборол... ладно хоть после размонтирования права не потерялись...

И как оно читается на других компах?

Проверял только дома. к сожалению дома есть только читающий CD привод. Дома у меня стоит ядро 2.4.22 с kernel.org без дополнительных патчей. поддержка UDF естественно включена.

Оба диска прочитались нормально: как созданный раннее в Windows так и тот что создал только что под Линуксом...

Может или нет Windows прочитать UDF диск, созданный и записанный под Linux'ом я не проверял для меня этот вопрос не очень актуален.

Выводы

Вобщем-то оно работает, но неожиданным стало то, что созданный ранее диск, (который раньше читался нормально) перестал читаться, пробовать записывать на него что-то новое я не стал, так как не хочу терять то что там записано. Разобраться почему этот диск не хочет читаться я планирую в ближайшее время.

Понравилось так же, что при записи под линукском на UDF диск файлы получают нормальные права, а не +x как при записи под виндой. Но с другой стороны наличие реальных атрибутов приводит к некоторым неудобствам, и не понятно как быть если у пользователя на разных компьютерах разные UID и GID

85мм CD-RW диск вместе с коробкой имеет почти такие же размеры как и обычная трех дюймовая дискета, а влазит на него 170 метров. Стоимость же такого диска (вместе с коробкой) в районе 25 рублей. Скорость записи и чтения тоже вполне приемлемые. Вобщем ZIP драйв похоже полетает тоже...

Да и еще, очень похоже, что UDF диск нельзя сделать загрузочным, но я склонен рассматривать это как достоинство, а не как недостаток.

Статья взята с сайта OpenNet. Оригинал: http://alpha.linux.perm.ru/wiki/Doc/writingUDF

[ опубликовано 29/12/2003 ]

Дмитрий Налдаев - Запись CD-R/RW в UDF формате   Версия для печати