From: Дмитрий Налдаев
Newsgroups: PermLug, http://alpha.linux.perm.ru
Date: Mon, 9 Dec 2003 14:31:37 +0000 (UTC)
Subject: Запись CD-R/RW в UDF формате.
Оглавление документа
Введение
Что такое UDF
UDF и Linux
Немного истории
Ядро 2.4.23
Не все так радужно, как хотелось бы
И все-таки она работает !
И как оно читается на других компах?
Выводы
Разборки с UDF.
Введение
Итак, по просьбам телезрителей, требующих поделиться опытом обуздания
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 без лишних вопросов. Я ставил этот патч
командой
из корневого каталога дерева исходников ядра 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.
Снова пытаюсь подмонтировать теперь уже свежесозданный диск
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:~$ 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 диск нельзя сделать загрузочным, но я
склонен рассматривать это как достоинство, а не как недостаток.