Все что ниже пользовал не раз c даавних времен. В OS/2.
Записывать диски мы будем с помощью следующих пакетов программ:
* Cdrtools
* Cdrdao
* CDParanoia
Все они являются свободными и кроссплатформенными [2].
В пакет Cdrtools входят следующие утилиты:
* mkisofs — создание «образа» диска с данными для последующей его записи на «болванку»;
* Cdrecord — запись диска с данными или аудио;
* Cdda2wav — копирование дорожек с аудио компакт-диска на винчестер;
* Readcd — чтение (посекторное) компакт-диска;
* Isoinfo — получение информации о CD или его «образе»;
* Devdump, Isovfy, Isodump — проверка «образа» диска или его самого.
Cdrdao пишет аудио-диски и диски с данными в режиме DAO на основе созданного по специальным правилам текстового файла с описанием содержания (toc-файл). Этой программой можно очень удобно скопировать CD разного типа (CR-ROM, audio, CD-Text).
CDParanoia предназначена для копирования трэков с аудио-компактов с бескомпромиссным качеством. Копирование производится чисто в цифровом виде, без каких либо аналого-цифровых преобразований (в частности, при этом никак не задействуется звуковая плата и аудиокабель, соединяющий её с приводом, т. к. данные передаются по интерфейсному шлейфу); скорость копирования приносится в жертву качеству; проблемные участки перечитываются неоднократно; при копировании сильно повреждённых дисков — например, поцарапанных — делается попытка (более или менее успешная) восстановления утраченного интерполяционными методами. Название программы, впрочем, достаточно красноречиво само по себе.
Установка этих пакетов в свободных ОС не должна представлять сложностей, поскольку они включаются в состав дистрибутивов этих систем — можно воспользоваться для этого соответствующими штатными средствами. В дистрибутивах Linux Debian и от ALT Linux Team сделать это наиболее просто:
[root@localhost root]# apt-get install cdrtools cdrdao cdparanoia
Желающие могут, конечно, поставить всё это из исходных текстов, а пользователям Windows придётся скачать бинарники с сайтов разработчиков.
Пришло время проверить, как это работает. Воспользуемся программой cdrecord, имеющей следующий формат:
cdrecord [общие опции] dev=device [опции для трэка] track1...trackn
Среди общих опций -v и -dummy — наши лучшие друзья; первая заставляет программу быть сильно «разговорчивее», следовательно, позволяет быстрее разобраться с возможными ошибками; вторая реализует имитацию записи, что поможет вам обойти какие-либо «подводные камни», проведя предварительную репетицию — полезная вещь, если вы никогда раньше не писали диски.
Дадим команду
[ziga@localhost tmp]$ cdrecord -scanbus
которая сканирует все SCSI устройства на всех SCSI шинах и выводит результат поиска; в нём следует найти строчку примерно такого вида:
0,0,0 0) 'RICOH ' 'CD-R/RW MP7200A ' '1.30' Removable CD-ROM
где dev=0,0,0 — это как раз то, что нам нужно будет указывать в опции dev=device (SCSI адрес привода в формате scsibus,target,lun).
Если привод достаточно новый, то он, скорее всего, является SCSI-3/MMC-совместимым [3], в этом случае можно воспользоваться опцией -prcap, чтобы узнать его возможности. Команда
[ziga@localhost tmp]$ cdrecord -v -prcap dev=0,0,0
выведет длиннющий список того, что может и что не может делать ваш резак (естественно, в этом примере и во всех дальнейших нужно, в случае необходимости, заменять в опции dev=0,0,0 SCSI адрес тем, что вы обнаружите в выводе предыдущей команды). Советую его внимательно изучить — некоторые сведения обычно не приводятся в документации, а если её вообще нет (типично для OEM поставок) — тем более полезно. Является ли привод SCSI-3/MMC-совместимым, и какой драйвер для него используется, можно узнать командой
[ziga@localhost tmp]$ cdrecord -v -checkdrive dev=0,0,0
Если в выводе найдены строки вида
Device seems to be: Generic mmc CD-RW.
Using generic SCSI-3/mmc CD-R driver (mmc_cdr).
то это как раз такой привод. Cdrecord поддерживает многие опции, специфичные для устройств некоторых производителей — VariRec (Plextor), Audio Master и DiskT@2 (Yamaha), различные варианты защиты от опустошения буфера — Burn-Proof (Sanyo), Just Link (Ricoh) и т. п. Команда
[ziga@localhost tmp]$ cdrecord -v -checkdrive driveropts=help dev=0,0,0
поможет узнать, какие именно опции такого рода поддерживаются для вашего привода.
Начнём с чего-нибудь простенького — вставим в привод любую чистую болванку и узнаем её характеристики, считав ATIP:
[ziga@localhost tmp]$ cdrecord -v -atip dev=0,0,0
ATIP (Absolute Time In Pregroove, т. е. абсолютная длительность ведущей дорожки) — это предварительно записанный раздел диска, в котором содержатся такие его характеристики, как размер блока, число блоков на диске (можно, следовательно, узнать ёмкость диска), является ли он перезаписывемым, имя изготовителя (не то, что указано на обложке — это всего лишь лейбл, под которым диск продаётся) и другие данные.
Попробуем почистить «эрвэшку» (CD-RW). Кладём её в привод и набираем команду
[ziga@localhost tmp]$ cdrecord -v speed=10 blank=fast dev=0,0,0
Здесь опция speed=10, как нетрудно догадаться, означает скорость записи, а blank=fast — тип очистки, в данном примере fast говорит о том, что чистятся только служебные области диска — TOC (Table Of Contents — таблица содержания), PMA (Program Memory Area) и pregap — специальный промежуток перед первым трэком, сами данные остаются нетронутыми. Можно почистить диск полностью, указав blank=all; имеются и другие варианты чистки. Кому доводилось форматировать в разных режимах дискеты — легко увидит здесь некую аналогию. Чистить CD-RW надо каждый раз, когда мы хотим записать на ранее использованный диск что-то новое.
То, какие данные и каким образом могут быть размещены на CD, определяется рядом стандартов, созданных как международными организациями, так и отдельными фирмами. В частности, формат аудио CD описывается в так называемой «Красной Книге» (Red Book), дисков с различными цифровыми данными — в «Жёлтой Книге» (Yellow Book), записываемых CD — в «Оранжевой Книге» (Orange Book) и т. д.
CD-R или CD-RW может быть записан как в один присест — это запись в режиме DAO (Disc-At-Once, т. е. диск-за-раз), так и за несколько подходов — в режиме TAO (Track-At-Once, т. е. трэк-за-раз). Вариацией DAO является режим SAO (Session-At-Once — сессия-за-раз), он позволяет пользоваться возможностями DAO, но при этом можно писать несколько сессий. Сессия — это отдельный сегмент, который может содержать несколько трэков, причём любого вида. Чтобы обычный бытовой аудиоплеер или CD-ROM привод могли прочитать диск, последняя сессия на нём должна быть «закрытой». Если пишется мультисессионный диск (т. е. содержащий несколько сессий), то после окончания записи и закрытия текущей сессии, должна быть открыта следующая, иначе диск окажется «закрытым», и на него ничего нельзя будет дописать, даже при наличии на нём свободного места. Диск, записанный в одну сессию, имеет три основных области — lead-in (вводную, где размещается, в частности, TOC, в которой указывается, где и какие данные размещены), область с собственно данными и lead-out (выводную). Первая и последняя играют чисто служебную роль, на «открытом» диске, если он пишется не в режиме DAO, они ещё не записаны, такой диск, следовательно, не имеет TOC (она в это время помещается в PMA), поэтому на обычных приводах они и не могут быть прочитаны. При записи в режиме DAO lead-in пишется сразу, поскольку содержание диска известно заранее. Несколько сессий могут быть связаны в последовательную «цепочку», в которой TOC предыдущей сессии указывает на TOC следующей, поэтому привод CD-ROM сможет «увидеть» данные, записанные во всех сессиях; бытовые аудиоплееры такой возможности лишены — они распознают только первую сессию, впрочем, это как раз позволяет создавать «смешанные» диски — такие, как CD-Extra.
Файловая система, в которой пишутся диски с данными, определена стандартом ISO-9660. Существует несколько уровней этого стандарта. Для всех уровней имена файлов и каталогов ограничены 31 символом, максимальная глубина вложенности каталогов — 8, общая длина пути не должна превышать 255 символов. Имена не должны содержать никаких символов, кроме латинских букв в верхнем регистре (A..Z), цифр, точки и знака подчёркивания. Первый уровень накладывает ещё большие ограничения — имена должны быть в формате 8+3 (имя + точка + расширение) для максимальной совместимости со всеми операционками, фактически — с MS DOS и её клонами; в уровнях есть и другие различия. Если такая широкая совместимость не нужна, можно смело использовать третий уровень.
Rock Ridge является расширением ISO-9660, позволяя использовать в именах те же символы, что используются в вашей локальной файловой системе, в частности, буквы могут быть и в нижнем регистре и даже не из латинского алфавита — например, русскими; поддерживаются такие специфичные для файловых систем *nix вещи как ссылки и права доступа; глубина вложения каталогов может быть любой (применяется система переадресации); кроме того, Rock Ridge — расширяемый стандарт. Операционки от Microsoft его не поддерживают, но поскольку он является всего лишь расширением ISO-9660, то диск, записанный с использованием Rock Ridge, можно в них прочитать, только длинные имена файлов не будут доступны.
В Microsoft, в свою очередь, придумали ни с чем не совместимый «стандарт» — Joliet. В нём имена файлов и каталогов хранятся в юникоде, точнее говоря, в UTF-16, и имеют ограничение на длину в 64 символа.
В мире Макинтошей, где, как всегда, «think different», используется повсеместно, в том числе и на CD, файловая система HFS (Hierarchical File System), хотя на Маках можно использовать и ISO-9660 и некоторые её расширения, сделанные в Apple, поддерживается и Joliet.
Имеется также файловая система UDF (Universal Disk Format), основанная на стандарте ISO/IEC 13346 (ECMA-167), она используется для так называемой пакетной записи — диск (обычно CD-RW) форматируется специальным образом, при этом теряется часть его ёмкости на размещение служебной информации, но после такой процедуры он превращается в своего рода «большую дискету», на которую можно писать файлы, стирать их и т. д.
В Linux можно и писать и тем более читать диски в любой из этих файловых систем, в частности, можно записывать «гибридные» диски, содержащие в оглавлении деревья Rock Ridge, Joliet и HFS, ссылающиеся при этом на одни и те же файлы; поддержка UDF, правда, имеется в Cdrtools пока только на экспериментальном уровне (есть также неофициальный патч ядра), но читаются UDF-диски в Linux без проблем [4].
Попробуем сейчас создать копию какого-либо CD-ROM, например, вашего дистрибутива Linux (подарите её потом вашему другу, это абсолютно законно, в отличие от копий любых проприетарных систем). Создадим для этого файл с «образом» этого CD. В просторечии «образ» диска часто называется «изошкой», из-за обыкновения присваивать файлам с такими образами расширения iso, в частности, это относится и к размещаемым на ftp серверах файлам с образами дистрибутивных дисков Linux, FreeBSD и т. п. Можно воспользоваться стандартной утилитой dd, но лучше применить специально для этого предназначенную программу readcd из пакета Cdrtools:
[ziga@localhost tmp]$ readcd dev=0,0,0 -v f=cd.iso
Опция f=cd.iso означает, что мы хотим присвоить файлу образа имя cd.iso (и он будет размещён в текущем каталоге; в противном случае следует указать путь к файлу). Если всё прочиталось нормально — пишем созданный «образ» на CD:
[ziga@localhost tmp]$ cdrecord -v -dao dev=0,0,0 speed=20 -data cd.iso
Здесь опция -dao означает, что диск будет записываться в DAO режиме. Точнее говоря, cdrecord запишет его в SAO, если привод это поддерживает, в частности, диск будет закрыт по окончании записи данных. Опция -data говорит о том, что мы пишем диск с данными, а не аудио-компакт (можно не указывать, т. к. применяется по умолчанию для всех файлов, кроме тех, что оканчиваются на .au или .wav — для последних опция по умолчанию -audio). Перед записью можно сделать проверку «образа» — например, смонтировать его:
[root@localhost root]# mount -o loop -t iso9660 /tmp/cd.iso /mnt/disk
и посмотреть его содержимое:
[ziga@localhost tmp]$ ls -R /mnt/disk
или сделать куда более надёжный контроль читаемости всех файлов:
[ziga@localhost tmp]$ tar cvf /dev/null /mnt/disk
Можно воспользоваться также специальной утилитой проверки «образа» isovfy:
[ziga@localhost tmp]$ isovfy cd.iso
После записи диск тоже неплохо проверить на отсутствие ошибок чтения. Пофайловую проверку можно сделать, например, с помощью tar, как было описано выше — смонтировав диск и «заархивировав» его содержимое в /dev/null. Можно проверить его поблочную читаемость:
[ziga@localhost tmp]$ readcd -v dev=0,0,0 f=/dev/null
Cdrdao также прекрасно справится с копированием диска, особенно удобно ей пользоваться при наличии двух приводов — CD-ROM и CD-RW. Её формат:
cdrdao команда [опции] toc-file
Кладём CD-ROM в «читалку», а болванку — в резак и даём команду:
[ziga@localhost tmp]$ cdrdao copy --source-device 0,1,0 --device 0,0,0 --source-driver generic-mmc --driver generic-mmc
data.toc
Команда copy сама совершит все шаги по копированию — будет создан временный файл с образом диска (его имя и путь можно задать самому опцией --datafile), который после копирования на болванку будет удалён. Опции --source-device и --device задают адреса «читалки» и «писалки» соответственно, а опции --source-driver и --driver — применяемые для них драйверы. Опцией --on-the-fly можно провести копирование «на лету», т. е. без создания временного «образа» диска. Если есть только один привод, то «на лету» копировать, конечно, не получится, при этом опции --source-device и --source-driver указывать не надо, и cdrdao сама запросит у вас болванку после создания файла «образа». Точно так же можно использовать эту команду для копирования аудио-компакта. После создания копии можно с сервера CDDB запросить информацию для последующей передачи её вашему любимому CD-плееру:
[ziga@localhost tmp]$ cdrdao read-cddb --cddb-directory /home/ziga/.cddb data.toc
Команда read-cddb осуществляет этот запрос, опция --cddb-directory позволяет сохранить полученную информацию в вашем домашнем каталоге. Если не устраивает то, какие серверы опрашиваются по умолчанию (ряд зеркал freedb), можно задать их список самому опцией --cddb-servers; запрос можно также сделать уже во время копирования, используя опцию --with-cddb. С копированием аудио «на лету» советую быть осторожнее — cdrdao использует для копирования аудио-трэков paranoia, причём по умолчанию — в самом «строгом» режиме, так что если диск читается не идеально, то запись может сорваться; лучше скопировать в «образ», а потом «прожечь» болванку:
[ziga@localhost tmp]$ cdrdao read-cd --device 0,0,0 --driver generic-mmc data.toc
[ziga@localhost tmp]$ cdrdao write --speed 20 --device 0,0,0 --driver generic-mmc data.toc
Назначение команд read-cd и write, а также опции --speed полагаю, ясно без пояснений, файл «образа» по умолчанию получает имя data.bin.
Копировать аудио-трэки можно также программами cdda2wav из Cdrtools и CDParanoia. Формат cdda2wav:
cdda2wav [опции] имя (имена) файла (файлов)/каталогов
Попробуем сделать не просто копию аудио-компакта, а превратим её в CD-Text диск. CD-Text — формат, созданный фирмой Philips для кодирования информации об исполнителе и композициях на аудио CD. Команда
[ziga@localhost tmp]$ cdda2wav -v255 -D0,0,0 -B -Owav -paranoia -L0
скопирует трэки с диска. Опция -D указывает на адрес привода, -B — на то, что каждый трэк должен быть сохранён в отдельный файл. -O определяет формат файла, возможные значения — wav (по умолчанию), aiff, aiffc, au, sun, cdr, raw. Трэки на аудио CD — это 16-битный стереозвук с частотой дискретизации 44100 Гц, закодированный в линейной PCM (Pulse Сode Modulation). В том же формате окажутся и их копии на диске, только при выборе в опции -O значения wav (или если она опущена), в начало всех файлов будут добавлены специальные заголовки, которые позволяют проигрывателям аудио-файлов узнавать их формат. Опция -paranoia заставит cdda2wav использовать для чтения соответствующую библиотеку, а -L устанавливает режим опроса cddb серверов — возможные значения 0 (интерактивный режим) и 1 (используется первая найденная запись). Для всех трэков, копии которых сохраняются в файлах audio_nn.wav, создаются также текстовые файлы audio_nn.inf, содержащие информацию о трэке, в том числе, вытянутую с cddb; формат такого файла достаточно прозрачный, так что в дальнейшем вы при желании сможете писать по его образцу inf-файлы сами, например, для создания своего аудио CD. Интересная деталь — если подсчитать суммарный объём полученных wav-файлов, то он может показаться что-то уж очень большим. Например, 70-минутный альбом Queen «Made In Heaven» даёт в итоге 712 MB копий его 13 трэков. Болванки производятся, в основном, двух видов — на 650 MB (74 мин. аудио) и 700 MB (80 мин. аудио). Возникает резонно вопрос — как столько поместилось на стандартный компакт и как теперь это записать? Объяснение «феномена» простое — секторы на аудио-диске имеют длину 2352 байта, а на диске с данными — 2048 байтов, разница используется для контроля и исправления ошибок — для данных это критично, для аудио — нет (поменяйте, например, в созданном вами архиве 1 бит и вы больше не сможете его открыть, а то же самое в аудиотрэке не почувствуете на слух совершенно точно).
Теперь «прожигаем» болванку:
[ziga@localhost tmp]$ cdrecord -v dev=0,0,0 speed=20 -dao -text -audio -useinfo *.wav
Опция -text использована здесь как раз для создания CD-Text, её надо применять совместно с -useinfo, чтобы сказать cdrecord использовать inf-файлы. Посмотрим, что мы получили в итоге:
[ziga@localhost tmp]$ cdda2wav -D0,0,0 -H -J
Опция -J — не записывать трэки, только получить информацию о диске, -H — не создавать inf-файлы. Если будут выданы название альбома, имя (название) исполнителя и т. д. — всё в порядке. В настоящее время всё, что записывается в CD-Text, может быть только в ISO-8859-1 кодировке, поддержка других наборов символов пока в Cdrtools отсутствует.
Создадим теперь свой диск с данными. Подготовим то, что хотим на него записать — удобнее будет, если всё это собрать в одном каталоге, но можно использовать и любое число каталогов или создать нужные ссылки, чтобы не пришлось писать слишком длинную команду. Программа mkisofs подготовит нам «изошник» для последующей записи, её формат:
mkisofs [опции] [-o имя файла] путь_к_данным
Даём команду:
[ziga@localhost tmp]$ mkisofs -r -J -o cd.iso ~/my_data/
которая всё, что находится в каталоге ~/my_data, запишет в «образ» с именем cd.iso. Опции -r и -J нужны для того, чтобы mkisofs создала в дополнение к ISO-9660 дереву в TOC ещё и Rock Ridge и Joliet деревья соответственно. Если используются русские имена в названиях файлов/каталогов, то для корректного их отображения на диске следует предпринять дополнительные действия: опции -input-charset и -output-charset определяют наборы символов, используемые в локальной файловой системе и в Rock Ridge именах файлов на диске соответственно (в России традиционно используется в *nix koi8-r, но в последнее время появились альтернативы). С Rock Ridge проблем никаких не будет, если использовать диск при той же локали, в которой он будет записан, а для Joliet необходимо указать обязательно -input-charset, можно и совместить эти две опции:
[ziga@localhost tmp]$ mkisofs -v -r -jcharset koi8-r -o cd.iso ~/my_data/
Если в ~/my_data есть ссылки, то надо использовать опцию -f, чтобы в созданном mkisofs «образе» появились файлы/каталоги, на которые эти ссылки указывают (разумеется, если это нужно).
Как узнать заранее, сколько места займут наши данные на CD? Можно использовать и стандартную утилиту du, но наиболее точно подсчитает размер сама mkisofs:
[ziga@localhost tmp]$ mkisofs -q -r -J -print-size ~/my_data/
Размер будет выдан в секторах, поделив его на 512, получим результат в более привычных мегабайтах. Важно использовать при этом те же опции, что будут применены для создания «образа» диска (кроме -v/-q; последняя здесь была использована для пресечения ненужной в данный момент «болтливости», поскольку интересовал только размер файла). Это поможет избежать ситуации, когда созданный mkisofs «образ» диска не помещается на болванку.
Можно писать диски «на лету», используя каналы:
[ziga@localhost tmp]$ mkisofs -r -J ~/my_data | cdrecord -v dev=0,0,0 fs=32m speed=20 -
Диск будет записан без создания его «образа». Здесь применена опция fs, в которой указывается cdrecord объём оперативной памяти под буфер. В документации рекомендуется выбирать в пределах 4-32 MB, но не более половины доступной RAM (4 MB — значение по умолчанию). Оптимальный его размер зависит от вашего железа и других параметров; если не получается нормально записать диск без указания этой опции, следует поэкспериментировать.
Запишем теперь CD-Extra в качестве примера мультисессионного диска. CD-Extra (в девичестве CD-Plus) — формат двухсессионного компакта, первая сессия которого — CD-DA, т. е. аудио-трэки, а вторая сессия — данные. Аудио-трэки пишем именно в первой сессии, чтобы можно было послушать такой диск на бытовом плеере. На мультисессионных CD много места расходуется при открытии сессий на служебную информацию — 23 MB для первой сессии, 14 MB — для каждой последующей, учтите это при подсчётах.
Скопируем трэки аудио CD программой CDParanoia. Формат команды:
cdparanoia [опции] span [файл]
Копируем:
[ziga@localhost tmp]$ cdparanoia -v -d /dev/cdrom2 -B "1-"
Опция -d определяет устройство, с которого будут копироваться трэки (по умолчанию это /dev/cdrom), -B указывает копировать каждый трэк в отдельный файл (их имена при этом имеют вид track01.cdda.wav и т. п.), аргумент "1-" — то, что копирование должно быть с первого трэка до конца диска. Вывод программы очень нагляден — есть индикатор прогресса, процесс копирования иллюстрируется смайликами — в зависимости от успешности процедуры. Запишем теперь полученные трэки:
[ziga@localhost tmp]$ cdrecord -v -dao -multi -audio *.wav
Назначение опции -multi очевидно. Получим информацию для создания «образа» второй сессии:
[ziga@localhost tmp]$ cdrecord -v dev=0,0,0 -msinfo
С опцией -msinfo cdrecord даст нам информацию в виде, например,
0,179360
Здесь первое число — номер первого сектора первого трэка последней сессии — т. е. её начало, второе число — начало новой сессии. Создаём теперь «образ» для второй сессии:
[ziga@localhost tmp]$ mkisofs -r -J -C 0,179360 -o cdextra.iso ~/my_data/
Опция -C предназначена для указания места, где дожны располагаться на CD наши данные (числа, как нетрудно заметить, взяты из вывода предыдущей команды). Записываем вторую сессию:
[ziga@localhost tmp]$ cdrecord -v dev=0,0,0 -data speed=20 cdextra.iso
Это всё. А как записать «обычный» мультисессионный диск?
[ziga@localhost tmp]$ mkisofs -r -J -o multi.iso ~/my_data/
[ziga@localhost tmp]$ cdrecord -v speed=20 -multi -eject multi.iso
Добавим теперь в каталог ~/my_data ещё файлов/каталогов.
[ziga@localhost tmp]$ cdrecord dev=0,0,0 -msinfo
0,18666
[ziga@localhost tmp]$ mkisofs -o multi2.iso -r -J -C 0,18666 -M /dev/cdrom2 ~/my_data/
Опция -M служит для слияния уже существующих данных на CD с новым «образом» multi2.iso, должна использоваться совместно с -C.
[ziga@localhost tmp]$ cdrecord -v speed=20 -multi -eject multi2.iso
[ziga@localhost tmp]$ cdrecord dev=0,0,0 -msinfo
18666,27958
Добавим ещё что-нибудь в ~/my_data и продолжим:
[ziga@localhost tmp]$ mkisofs -o multi3.iso -r -J -C 18666,27958 -M /dev/cdrom2 ~/my_data/
[ziga@localhost tmp]$ cdrecord -v speed=20 -eject multi3.iso
Теперь всё — диск, содержащий 3 сессии, записан полностью, закрыт и даже «выехал» из привода (-eject). На нём доступны все данные, содержащиеся сейчас в каталоге ~/my_data.
Программа mkisofs обладает рядом уникальных возможностей. Одна из них — создание образа диска, в котором файлы расположены в заданном вами порядке — полезная штука при записи компактов с музыкой в OGG Vorbis или mp3. Если писать диск обычным образом, то в соответствии со стандартом ISO-9660, файлы и каталоги будут на нём расположены в алфавитном порядке, мы же хотим, чтобы они оказались записаны в порядке следования композиций. Поэтому, если давать файлам осмысленные имена, а не просто track01.ogg и т. п., то чтобы диск проигрывателем не дёргался постоянно в поисках следующей композиции, надо подготовить специальный файл, который будет передан mkisofs в качестве аргумента опции -sort. Создадим тестовый каталог test с тремя каталогами в нём, в каждом из которых будет несколько файлов, например, так:
[ziga@localhost tmp]$ ls -R test
test:
dir_1
dir_2
dir_3
test/dir_1:
file_a
file_b
file_c
test/dir_2:
file_k
file_l
test/dir_3:
file_x
file_y
file_z
Делаем файл file_sort:
test/dir_3 5000
test/dir_3/file_y 6000
test/dir_2/file_l 8000
test/dir_1/file_c 1000
В этом файле каталогам/файлам присваиваются веса — в начале идёт имя файла/каталога, а затем через ровно один пробел или символ табуляции — вес. По умолчанию все веса имеют нулевое значение, их можно задать как положительными, так и отрицательными. В первой строке всем файлам из каталога dir_3 мы присвоили вес 5000, но в следующей строке конкретному файлу file_y из этого каталога — больший вес, 6000. На диске файлы будут расположены в порядке уменьшения весов. Каталоги при этом не сортируются, они остаются расположенными в алфавитном порядке. Делаем теперь «образ» диска:
[ziga@localhost tmp]$ mkisofs -r -J -sort file_sort -o cdsort.iso test
и смотрим, что получилось, командой:
[ziga@localhost tmp]$ isoinfo -l -R -i cdsort.iso
Аргумент опции -i указывает на имя файла, -R — то, что информацию надо дать по дереву Rock Ridge, -l — вывод сформатировать в стиле команды ls. В выводе мы получим то, в каких секторах какие файлы расположены. Сделайте «образ» диска без опции -sort и сравните. Несколько замечаний:
1. В TOC файлы и каталоги не сортируются, поэтому и приходится смотреть результат программой isoinfo — ls тут не поможет.
2. С именами по-русски, к сожалению, всё это не работает.
3. Пустые файлы, т. е. имеющие нулевую длину, не сортируются.
4. Пути в файле file_sort должны быть такими, как их видит mkisofs.
Разумеется, я не описал и десятой доли возможностей рассматриваемых здесь программ. Остальное вы сможете найти в их документации.
Работа в консоли приятна и удобна, но можно сделать её ещё удобнее — почти все упомянутые здесь программы используют специальные переменные окружения и настроечные файлы. Например, cdrecord использует настройки, сделанные в файле /etc/default/cdrecord (в некоторых дистрибутивах /etc/cdrecord.conf). Мой файл /etc/default/cdrecord:
CDR_DEVICE=ricoh
CDR_SPEED=20
CDR_FIFOSIZE=4m
# drive name device speed fifosize driveropts
ricoh= 0,0,0 -1 -1 ""
rw= 0,0,0 10 -1 ""
fly= 0,0,0 -1 8m ""
Теперь по умолчанию dev=0,0,0, speed=20, fs=4m, записать болванку из «образа» cd.iso в режиме DAO можно командой
[ziga@localhost tmp]$ cdrecord -v -dao cd.iso
Можно поместить в /etc/profile
CDDA_DEVICE=0,0,0
export CDDA_DEVICE
и опускать в команде cdda2wav опцию -D0,0,0. Записав в ~/.bashrc
alias fblank='cdrecord -v dev=rw blank=fast'
делаем быструю очистку Hi-Speed CD-RW командой:
[ziga@localhost tmp]$ fblank
mkisofs может использовать информацию из файла .mkisofsrc, который она ищет последовательно в текущем каталоге, домашнем и каталоге с её бинарником. Запишем в такой файл
VOLI=Vasya Pupkin cOOL CD
и получим диск с соответствующим идентификатором тома (это то, что пользователи Windows и Mac OS видят как название вставленного в привод CD). Cdrdao смотрит настройки в файлах /etc/cdrdao.conf, /etc/default/cdrdao, $HOME/.cdrdao. Мой .cdrdao:
write_device : "0,0,0"
write_driver : "generic-mmc"
write_speed : 20
read_device : "0,1,0"
read_driver : "generic-mmc"
cddb_directory : ".cddb"
Можно теперь скопировать диск командой:
[ziga@localhost tmp]$ cdrdao copy data.toc
Во всех программах введённые в командной сроке опции изменяют соответствующие значения из настроечных файлов и переменных окружения.