18.6. Запись и использование оптических носителей (CD)
Пред. | Глава 18. Устройства хранения | След.

## 18.6. Запись и использование оптических носителей (CD)

Текст предоставил Mike Meyer.

### 18.6.1. Введение

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

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

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

Для создания файла данных, содержащего файловую систему ISO 9660, используется программа mkisofs(8), которая включена в порт `sysutils/cdrtools`. Она имеет опции, поддерживающие различные расширения, и описана ниже.

Какой инструмент использовать для записи CD, зависит от того, является ли ваше устройство для записи CD устройством ATAPI или каким-либо другим. С устройствами для записи стандарта ATAPI используется программа `burncd`, которая является частью комплекта поставки системы. С устройствами SCSI и USB нужно использовать `cdrecord` из порта `sysutils/cdrtools`. Утилиту `cdrecord` и другие инструменты для SCSI-приводов также можно использовать при работе с ATAPI-оборудованием через модуль ATAPI/CAM.

Если для записи CD вам нужна программа с графическим интерфейсом пользователя, взгляните на X-CD-Roast или K3b. Они доступны в виде пакетов или из портов `sysutils/xcdroast` и `sysutils/k3b`. Программам X-CD-Roast и K3b для работы с оборудованием ATAPI требуется модуль ATAPI/CAM.

### 18.6.2. mkisofs

Программа mkisofs(8), поставляемая с портом `sysutils/cdrtools` создаёт файловую систему ISO 9660, которая является образом дерева каталогов в пространстве имён файловой системы UNIX®. В самом простом случае она используется так:

`#` `mkisofs -o `imagefile.iso` `/path/to/tree``

Эта команда создаст файл `imagefile.iso`, содержащий файловую систему ISO 9660, которая является копией дерева каталогов `/path/to/tree`. Во время работы она будет преобразовывать имена файлов в имена, которые удовлетворяют ограничениям файловой системы ISO 9660, и исключит файлы, которые носят имена, неподходящие для файловой системы ISO.

Для того, чтобы обойти эти ограничения, имеется несколько опций. В частности, `-R` включает использование расширений Rock Ridge, распространенных в UNIX®-системах, с `-J` будут применены расширения Joliet, используемые в системах от Microsoft, а `-hfs` может использоваться для создания файловых систем HFS, используемых в Mac OS®.

Для CD, которые будут использоваться только с системами FreeBSD, может использоваться опция `-U`, отменяющая все ограничения на имена файлов. При использовании с опцией `-R` генерируется образ файловой системы, идентичный начальному дереву FreeBSD, хотя при этом стандарт ISO 9660 может нарушаться в нескольких местах.

Последней часто используемой опцией является `-b`. Она используется для указания загрузочного образа для использования при создании загрузочного CD в стандарте «El Torito». Этой опции указывается аргумент, который является маршрутом к загрузочному образу из корня дерева, записываемого на CD. По умолчанию, mkisofs(8) создает образ ISO в так называемом режиме «эмуляции флоппи-диска», и потому ожидает загрузочный образ размера строго 1200, 1440 или 2880 KB. Некоторые загрузчики, в том числе и тот, что используется на дистрибутивных дисках FreeBSD, не используют режим эмуляции; в этом случае должна использоваться опция `-no-emul-boot`. Так что, если `/tmp/myboot` содержит загрузочную систему FreeBSD с загрузочным образом в `/tmp/myboot/boot/cdboot`, вы можете создать образ файловой системы ISO 9660 в `/tmp/bootable.iso` следующим образом:

`#` `mkisofs -R -no-emul-boot -b boot/cdboot -o /tmp/bootable.iso /tmp/myboot`

Сделав это, и имея в ядре отконфигурированное устройство `md`, вы можете смонтировать файловую систему, выполнив:

`#` `mdconfig -a -t vnode -f /tmp/bootable.iso -u 0` `#` `mount -t cd9660 /dev/md0 /mnt`

В этот момент вы можете проверить, что `/mnt` и `/tmp/myboot` идентичны.

Имеется много других опций, которые можно использовать с программой mkisofs(8) для тонкой настройки её поведения. В частности: модификации в размещении ISO 9660 и создание дисков в форматах Joliet и HFS. Обратитесь к справочным страницам по mkisofs(8) для получения более подробной информации.

### 18.6.3. burncd

Если ваше устройство для записи CD соответствует стандарту ATAPI, то для записи ISO-образа на компакт-диск вы можете воспользоваться командой `burncd`. `burncd` входит в базовый комплект операционной системы и установлена как `/usr/sbin/burncd`. Использовать её очень просто, так как параметров у ней немного:

`#` `burncd -f `cddevice` data `imagefile.iso` fixate`

По этой команде файл `imagefile.iso` будет скопирован на `cddevice`. По умолчанию используется устройство `/dev/acd0`. Для получения информации о параметрах, задающих скорость записи, выброс диска после записи и запись звуковых данных, обратитесь к burncd(8).

### 18.6.4. cdrecord

Если ваше устройство для записи CD не соответствует стандарту ATAPI, то для записи компакт-дисков вам нужно пользоваться программой `cdrecord`. `cdrecord` не входит в комплект поставки системы; вы должны установить её из порта `sysutils/cdrtools` или из соответствующего пакета. Изменения в системе могут приводить к тому, что откомпилированные версии этой программы работать не будут, или приводить к порче дисков. Поэтому вы должны при обновлении системы либо обновить порт, либо, если вы следуете -STABLE, обновить порт при появлении его новой версии.

Хотя `cdrecord` имеет много опций, в основном использовать её ещё проще, чем `burncd`. Запись образа ISO 9660 делается такой командой:

`#` `cdrecord dev=`device` `imagefile.iso``

Тонким моментом при использовании `cdrecord` является определение правильного устройства `dev`. Чтобы задать параметр правильно, воспользуйтесь флагом `-scanbus` команды `cdrecord`, в результате чего может получиться примерно такой результат:

`#` `cdrecord -scanbus` Cdrecord-Clone 2.01 (i386-unknown-freebsd7.0) Copyright (C) 1995-2004 Jörg Schilling Using libscg version 'schily-0.1' scsibus0: 0,0,0 0) 'SEAGATE ' 'ST39236LW ' '0004' Disk 0,1,0 1) 'SEAGATE ' 'ST39173W ' '5958' Disk 0,2,0 2) * 0,3,0 3) 'iomega ' 'jaz 1GB ' 'J.86' Removable Disk 0,4,0 4) 'NEC ' 'CD-ROM DRIVE:466' '1.26' Removable CD-ROM 0,5,0 5) * 0,6,0 6) * 0,7,0 7) * scsibus1: 1,0,0 100) * 1,1,0 101) * 1,2,0 102) * 1,3,0 103) * 1,4,0 104) * 1,5,0 105) 'YAMAHA ' 'CRW4260 ' '1.0q' Removable CD-ROM 1,6,0 106) 'ARTEC ' 'AM12S ' '1.06' Scanner 1,7,0 107) *

Здесь приведены соответствующие значения параметров `dev` для имеющихся устройств. Найдите здесь ваше устройство для записи CD, а в качестве параметров для `dev` задавайте три числа через запятые. В нашем случае CRW-устройству соответствуют числа 1,5,0, так что правильным параметром будет `dev=1,5,0`. Имеется более простой способ задать эти значения; обратитесь к справочной информации о cdrecord(1) для выяснения подробностей. Там же находится информация о записи звуковых дорожек, управлении скоростью и другим вещам.

### 18.6.5. Копирование аудио CD

Вы можете копировать музыкальные CD, извлекая данные аудио с CD в набор файлов, а затем записывая эти файлы на чистый CD. Процесс несколько различен в случаях использования устройств ATAPI и SCSI.

Процедура 18.1. Устройства SCSI

1. Используйте `cdda2wav` для извлечения данных аудио.

   `%` `cdda2wav -vall -D2,0 -B -Owav`

2. Воспользуйтесь `cdrecord` для записи файлов `.wav`.

   `%` `cdrecord -v dev=`2,0` -dao -useinfo *.wav`

   Значение, соответствующее `2,0`, должно быть установлено правильно, как это описано в Раздел 18.6.4, «cdrecord».

Процедура 18.2. Устройства ATAPI

### Примечание:

На приводах ATAPI также можно использовать утилиту `cdda2wav`. Для её функционирования потребуется драйвер ATAPI/CAM. Следует отметить, что данная утилита предназначена для корректного извлечения и обработки аудио данных, в отличие от утилиты, приведенной в нижеследующем примере.

1. Драйвер устройств ATAPI CD делает каждую дорожку доступной как `/dev/acd`d`t`nn``, где `d` является номером привода, а `nn` соответствует номеру дорожки, который записывается двумя десятичными цифрами с нулём в начале, если это нужно. Таким образом, первая дорожка на первом диске будет носить имя `/dev/acd0t01`, вторая будет именоваться `/dev/acd0t02`, третья будет носить имя `/dev/acd0t03` и так далее.

   Удостоверьтесь, что соответствующий файл имеется в каталоге `/dev`. При его отсутствии следует принудительно перечитать оглавление диска:

   `#` `dd if=/dev/acd0 of=/dev/null count=1`

2. Извлеките каждую дорожку при помощи команды dd(1). При извлечении файлов вы должны также использовать специфическое значение для размера блока.

   `#` `dd if=/dev/acd0t01 of=track1.cdr bs=2352` `#` `dd if=/dev/acd0t02 of=track2.cdr bs=2352` ...

3. Запишите извлечённые файлы на диск при помощи утилиты `burncd`. Вы должны указать, что это файлы с аудио, и что `burncd` должна зафиксировать диск по окончании работы.

   `#` `burncd -f `/dev/acd0` audio track1.cdr track2.cdr `...` fixate`

### 18.6.6. Копирование компакт-дисков с данными

Вы можете скопировать CD с данными в файл образа, который функционально эквивалентен файлу образа, созданному командой mkisofs(8), и вы можете использовать его для копирования любого CD с данными. В приводимом здесь примере предполагается, что ваш привод CDROM называется `acd0`. Подставьте название вашего привода CDROM.

`#` `dd if=/dev/acd0 of=file.iso bs=2048`

Теперь, когда вы имеете образ, вы можете записать его на CD так, как это описано выше.

### 18.6.7. Использование компакт-диски с данными

Теперь, после того, как вы создали стандартный CDROM с данными, вы, наверное, захотите смонтировать его и считать с него данные. По умолчанию mount(8) предполагает, что файловая система имеет тип `ufs`. Если вы попытаетесь выполнить что-то вроде:

`#` `mount /dev/cd0 /mnt`

вы получите сообщение Incorrect super block, и диск не смонтируется. CDROM не является файловой системой `UFS`, поэтому попытки смонтировать его таким образом будут терпеть неудачу. Вам просто нужно указать команде mount(8), что файловая система имеет тип `ISO9660`, и всё должно заработать. Сделайте это, задав параметр `-t cd9660` при вызове mount(8). К примеру, если вы хотите смонтировать устройство CDROM, `/dev/cd0`, в каталог `/mnt`, вы должны выполнить:

`#` `mount -t cd9660 /dev/cd0 /mnt`

Заметьте, что имя вашего устройства (`/dev/cd0` в этом примере) может быть другим, в зависимости от интерфейса, используемого в CDROM. Кроме того, параметр `-t cd9660` всего лишь задаёт выполнение утилиты mount_cd9660(8). Пример выше может быть упрощён до:

`#` `mount_cd9660 /dev/cd0c /mnt`

Таким способом, вообще говоря, вы можете использовать компакт-диски любого производителя. Диски с некоторыми расширениями ISO 9660 могут, однако, работать со странностями. К примеру диски Joliet хранят все имена файлов в виде последовательностей двухбайтовых символов Unicode. Ядро FreeBSD не может работать с Unicode, но CD9660 драйвер способен преобразовывать Unicode символы на лету. Если некоторые символы не английского алфавита выглядят, как знаки вопроса, то вам нужно указать используемую вами кодировку с помощью опции `-C`. За дополнительной информацией, обращайтесь к странице справочника mount_cd9660(8).

### Примечание:

Чтобы смочь произвести преобразование символов посредством опции `-C`, ядру понадобится загрузить модуль `cd9660_iconv.ko`. Это может быть сделано либо добавлением ниже представленной строчки в `loader.conf`:

cd9660_iconv_load="YES"

с последующей перезагрузкой машины, либо загрузкой модуля вручную с помощью kldload(8).

Время от времени вы можете получать сообщения Device not configured при попытке смонтировать CDROM. Это обычно означает, что привод CDROM полагает, что в нём нет диска, или что привод не виден на шине. Приводу CDROM может понадобиться несколько секунд, чтобы понять, что он был закрыт, так что будьте терпеливы.

Иногда SCSI CDROM может потеряться из-за того, что у него не было достаточно времени, чтобы ответить на сброс шины. Если у вас имеется SCSI CDROM, то, пожалуйста, добавьте следующий параметр в конфигурацию вашего ядра и перестройте его.

options SCSI_DELAY=15000

Это укажет вашей шине SCSI выдерживать 15-секундную паузу во время загрузки, чтобы дать вашему приводу CDROM шанс ответить на сброс шины.

### 18.6.8. Запись необработанных данных на компакт-диски

Вы можете предпочесть запись файла непосредственно на CD без создания файловой системы ISO 9660. Некоторые поступают так при создании резервных копий. Это выполняется гораздо быстрее. чем запись стандартного компакт-диска:

`#` `burncd -f /dev/acd1 -s 12 data archive.tar.gz fixate`

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

`#` `tar xzvf /dev/acd1`

Вы не можете монтировать этот диск как обычный CDROM. Такой компакт-диск не может быть прочитан ни в какой другой операционной системе, кроме FreeBSD. Если вы хотите монтировать CD или обменяться данными с другой операционной системой, то вы должны использовать mkisofs(8) так, как это было описано выше.

### 18.6.9. Использование драйвера ATAPI/CAM

Предоставил Marc Fonvieille.

Этот драйвер позволяет работать с ATAPI-устройствами (приводы CD-ROM, CD-RW, DVD и так далее) через подсистему SCSI, таким образом расширяя использование таких приложений, как `sysutils/cdrdao` или cdrecord(1).

Для использования этого драйвера вам необходимо добавить в файл `/boot/loader.conf` следующую строку:

atapicam_load="YES"

с последующей перезагрузкой машины.

### Примечание:

Если для вас предпочтительнее статически скомпилировать поддержку atapicam(4) в ядро, то добавьте эту строчку в файл конфигурации ядра:

device atapicam

Кроме того, в файле конфигурации ядра должны быть следующие строки:

device ata device scbus device cd device pass

которые уже должны там присутствовать. Затем пересоберите, установите новое ядро и перезагрузите компьютер.

В процессе загрузки ваш пишущий привод должен появиться примерно следующим образом:

acd0: CD-RW <MATSHITA CD-RW/DVD-ROM UJDA740> at ata1-master PIO4 cd0 at ata1 bus 0 target 0 lun 0 cd0: <MATSHITA CDRW/DVD UJDA740 1.00> Removable CD-ROM SCSI-0 device cd0: 16.000MB/s transfers cd0: Attempt to query device size failed: NOT READY, Medium not present - tray closed

Теперь с ним можно работать через устройство `/dev/cd0`, например, чтобы смонтировать CD-ROM в каталог `/mnt`, просто наберите следующую команду:

`#` `mount -t cd9660 `/dev/cd0` /mnt`

Для получения SCSI-адреса пишущего привода, вы можете, работая как пользователь `root`, запустить такую команду:

`#` `camcontrol devlist` <MATSHITA CDRW/DVD UJDA740 1.00> at scbus1 target 0 lun 0 (pass0,cd0)

Таким образом, `1,0,0` будет SCSI-адресом для использования с cdrecord(1) и другими приложениями для работы со SCSI.

Для получения дополнительной информации об ATAPI/CAM и системе SCSI, обратитесь к страницам справочной системы по atapicam(4) и cam(4).

Пред. | Наверх | След.
18.5. USB устройства хранения | Начало | 18.7. Создание и использование оптических носителей (DVD)

Этот, и другие документы, могут быть скачаны с http://ftp.FreeBSD.org/pub/FreeBSD/doc/.

По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите в рассылку <doc@FreeBSD.org>.