Болванка-палимсест

Аватар пользователя Tolstik
Статья описывает практическую реализацию пакетной записи на CD в Linux. Печатается с любезного разрешения автора

БОЛВАНКА-ПАЛИМПСЕСТ

Вадим МАРКОВ

Все сталкивались с необходимостью что-нибудь записать на компакт-диск. И обидно, когда вроде бы все уже сбросил и закрыл болванку, вспомнить, что пару маленьких файлов все-таки забыл. Для CD-RW выход есть, можно переформатировать диск. Но это не идет на пользу болване. Также можно представить ситуацию, когда необходимо каждый день переносить информацию с служебного компьютера на домашний. Мегабайт по 20. Мылом не залить, на дискетки не втиснуть. Но запись мультисессией съедает кучу места на Lead-In/Lead-Out и наш диск потратится неэффективно. Выход придумали давно, технология называется “пакетная запись”.


Одним из первых продуктов, предлагающих новую технологию, был DirectCD. Эта программка позволяла отформатировать болванку под файловую систему UDF, и затем пользоваться этим компактом как дискеткой. При этом часть места теряется (от 700 Мб на диске остается примерно 550), но мы при этом получаем обратимость записи, можем стирать и переименовывать файлы. Можно разбить и однократно записываемый диск. При этом все преимущества остаются, но при стирании файла места не прибавится Улыбка. Безусловно, это работает не со всяким пишущим приводом. Требуется поддержка технологии Mount Rainer, что есть в любом не очень антикварном приводе. И все бы хорошо, но в Линуксе эта технология поддерживалась односторонне. Эти диски можно читать и писать как образ, но это, безусловно, не позволяет использовать технологию полноценно. В некоторых дистрибутивах (SuSE) пакетная запись реализована фирменным патчем, но это не выход, ведь SuSE при всех своих преимуществах все-таки далеко не самый популярный дистрибутив. В Сети периодически проскакивали сообщения о патчах для отдельных версий ядра, но это были весьма несовершенные решения, по крайней мере, добиться их работы я так и не смог. Но решение обнаружилось прямо на главной странице kernel.org и называлось оно “-mm patch”. Это патч, поддерживаемый Andrew Morton и представляющий нестабильную экспериментальную ветку ядра. Про нестабильность не врут Улыбка, на 2.6.9-mm1 не установился драйвер видяхи,  также контроллер винта глючил при включении xfer modes, что, впрочем, само по себе тоже экспериментальная технология. Я использовал ядро 2.6.7, на настоящий момент (28.11.2004) наиболее совместимое из ветки 2.6, и патч 2.6.7-mm7.

Итак, поехали. Для начала, поставим патч на ядро. Надо убедиться, что ядро действительно 2.6.7 и скопировать в каталог с исходниками патч:

[buba@big buba]$ su - Password: [root@big root]# cd /usr/src/linux [root@big linux]# uname -r 2.6.7-mm7 [root@big linux]# cp /home/buba/archive/2.6.7-mm7.bz2 . [root@big linux]# bzcat 2.6.7-mm7.bz2 |patch -p1

После этого следует длиннющий вывод, который продолжается секунд 15. Все, патч к ядру прикручен. Далее как обычно настраиваем: [root@big linux]# make menuconfig

В верхнем левом углу терминала видим версию ядра. В пункте Device Drivers->Block Devices видим новый пункт, Packet writing on CD/DVD media. При указании его модулем видим две опции, я их оставлял по умолчанию. Если кто-то их изменял, то интересно будет обсудить результаты. Далее собираем ядро и модули как обычно: [root@big linux]# make bzImage && make modules && make modules_install && cp arch/i386/boot/bzImage /boot

После этого перегружаемся.

ВНИМАНИЕ! Если в загрузочных скриптах присутствует hdparm, настоятельно рекомендую убрать ключ -х. Возможны зависания и сбои файловой системы!

Нам также понадобится пакет udftools ( http://sourceforge.net/projects/linux-udf/ ). Весит он 232 Кб (последняя версия 1.0.0b3). Эти программы необходимы для подготовки болванки и устанавливаются стандартным ./configure && make && make install . Для записи нам необходимо создать устройство для пакетной записи, что интересно, оно указано в Linux Device List: [root@big root]# mknod /dev/pktcdvd0 b 97 0

К этому устройству надо привязать наш резак: [root@big root]# pktsetup /dev/pktcdvd0 /dev/hdc

Также надо бы дать доступ остальным пользователям к этому фалйу. То есть доступ у них и так есть, только они им не воспользуются: [buba@big buba]$ pktsetup /dev/pktcdvd0 /dev/hdc ioctl: Operation not permitted

 Поэтому надо ставить бит suid: [root@big root]# chmod u+s `which pktsetup`

Команда записана в такой форме, потому что точно не известно, где лежит бинарный файл. Кавычки надо ставить обратные, обычно расположенные на клавише с тильдой (~). Это показывает интерпретатору, что нужно подставлять РЕЗУЛЬТАТ обкавыченной команды.

После этого надо отформатировать болванку: [buba@big buba]$ mkudffs /dev/pktcdvd0 85408 для 8 см/210 Мб болванки

или [buba@big buba]$ mkudffs /dev/pktcdvd0 294048 для 700 Мб диска

Последний параметр указывает на размер файловой системы в блоках по 2 Кб. Узнать его можно и нужно с помощью утилиты под названием cdrwtool: [buba@big buba]$ cdrwtool -d /dev/hdc –I

Но Линукс дает нам ряд преимуществ по сравнению с непонятными коммерческими программами. А именно - мы можем использовать наш пакетный драйв как обычное блочное устройство. Со всеми вытекающими отсюда последствиями в виде поддержки любых файловых систем. Я нашел единственное ограничение - должен поддерживаться блок размером 2 Кб, это связано с возможностями железа. В частности, получилось нарезать файловую систему ext2: [buba@big buba]$ /sbin/mke2fs -b 2048 -m 0 -T largefile  -v /dev/pktcdvd0

Это нарезает ФС с размером блока 2Кб, без резерва места для root'а, заточенную под большие файлы (1 inode -1 Мб) [buba@big buba]$ /sbin/tune2fs -c 0 -i 0 /dev/pktcdvd0 tune2fs 1.27 (8-Mar-2002) Setting interval between check 0 seconds Setting maximal mount count to –1

А это отключает счетчик количества монтирований. Исключительно для сохранности диска. Вывод mount: [buba@big buba]$ mount |grep pkt /dev/pktcdvd0 on /mnt/direct type ext2 (rw)

Только неправильно работает размонтирование, после извлечения диска командой eject. Диск остается подмонтированным. Но что вы хотите от передовой необкатанной технологии? Кстати, почитать про это можно по адресам http://old.softerra.ru/freeos/16323/page1.html и http://old.softerra.ru/freeos/11439/page1.html

Your rating: Нет Average: 0 (0 votes)

Комментарии

Аватар пользователя Гость

Re: Болванка-палимсест

А что такое "палимсест"?

RSS-материал