Добавить в избранное | Сделать стартовой страницей

Большая Linux библиотека для пользователей OS Linux и ПО для нее
Есть что сказать? Нужен совет? Посети наш форум.


-


Запись СD в Linux.

Автор : Carla Schroder
Перевод : Валерий Абросимов

Linux предлагает мощные и гибкие утилиты для создания CD. Вы можете создавать диски, которые будут читаемы практически на любой платформе, а так же - создавать файлы .iso для загрузки и распространения.

Запись CD из командной строки может быть загадочной и раздражающей на любой платформе - это относится и к Linux. Однако, команды и терминология похожи везде, и будет полезно знать, как можно записать CD в Linux. Множество программ для Linux распространяется через образы .iso, так что если вы знаете, как записать ваш собственный CD, вы сможете загрузить .iso и сделать свой собственный загрузочный диск. Программы для записи CD доступны как для Linux так и для Windows, но в Linux они более мощные и разносторонние, чем их братья из Windows.

В этой статье мы рассмотрим mkisofs и cdrecord, рабочие лошадки Linux для записи CD. mkisofs создает подготовительные образы, чтобы создать гибридную файловую систему ISO9660/JOLIET/HFS. Он создает и заполняет файловую систему. В отличие от других устройств хранения данных (таких, как жесткие диски и дисководы), файловая система на CD не создается отдельно, чтобы заполнить её данными позже. При работе с CD-R есть только одна попытка: если его отформатировать, получится диск с пустой файловой системой. Cdrecord записывает данные на CD-R/RW, которые соответствуют стандарту Orange Book (короче говоря - на любой диск).

Для такой новой технологии, как запись CD, лучше всего использовать новейшие версии программ. mkisofs и cdrecord должны оба быть версии 1.10 или выше. Последняя версия cdrecord (2.0) была переименована в cdrtools. Чтобы узнать версию, установленную на вашей машине, введите:

$ cdrecord --version

и

$ mkisofs --version

Для тех, кто ещё совсем новичок в мире записи дисков, есть несколько терминов, с которыми будет полезно ознакомиться перед началом работы:

  • CD-R: CD-Recordable. Записываемый диск. Также называется WORM (Write Once, Read Many) (Однократная запись, многократное чтение).
  • CD-RW: CD-Rewritable. Перезаписываемый диск - WMRM (Write Many, Read Many) (Многократная запись, многократное чтение).
  • CD-R универсальны и могут быть прочитаны на любом приводе CD-ROM.
  • CD-RW должны читаться на всех современных приводах. Привод должен иметь "multiread", чтобы суметь прочитать CD-R и CD-RW. Старые приводы могут иметь трудности с чтением. Выбросьте старый 4x привод и купите новый; нет ничего хуже раздражения.
  • Коммерческие CD штампуются, а не выжигаются лазером.
  • Какой из CD-R/RW приводов лучше? Прочитайте обзоры и решите.
Теперь несколько терминов из области форматов данных:
  • Yellow Book: физический формат для CD с данными
  • Orange Book: физический формат для записываемых CD:
    • Part I: CD-MO (Magneto-Optical) - магнито-оптические
    • Part II: CD-WO (Write-Once(однократная запись); включая "гибриды" для PhotoCD)
    • Part III: CD-RW (Перезаписываемые)
  • ISO-9660: старый файловый стандарт, позволяющий имена файлов в формате 8.3;
  • Rock Ridge: расширение для ISO-9660, разрешающее длинные имена и символические ссылки (как в UNIX); сохраняет все атрибуты файлов, такие как владелец и допуски. Юниксовые атрибуты файлов не отображаются, когда диск читается в Windows.
  • Joliet: расширение Microsoft для ISO 9660, которое позволяет использовать символы юникода в именах файлов, а также длинные имена файлов. Также создает сокращенные имена файлов для совместимости с MS-DOS (эти ужасные файлы вида: FILENA~1.TXT). Позволяет иметь имена файлов до 64 символов, включая пробелы, читаемые в Windows 95 и выше, и на компьютерах Macintosh, на которых выполняется расширение Joliet Volume Access. Mac'и не будут читать имена файлов типа Joliet длиннее 31 символа.
  • El Torito: спецификация для загрузочных CD-ROM
  • HFS (Hierarchical File System): родная файловая система, используемая на компьютерах Macintosh.
  • Multisession: позволяет добавлять файлы в разное время, а не только во время одной сессии. Для того, чтобы диск был читаем, сессия должна быть "закрыта". Однако, это не позволяет добавить файлы на диск. Multisession связывает отдельные сессии и обновляет таблицу содержания диска так, что она представляется в виде одной директории.
  • CD-UDF (Universal Disk Format): Промышленный стандарт файловой системы пакетной записи.

Вкратце о UDF: UDF даёт возможность копировать файлы прямо на диск. В данный момент это выполняется на программном уровне. Чтение диска требует использования программы, при помощи которой он был создан. UDF подготавливается для включения в ядро Linux (возможно, будет включено в 2.6). CD привод должен иметь CD-MRW ("CD Mount Rainier ReWrite"; не спрашивайте меня, откуда они берут эти имена) для работы, так что эта возможность будет добавлена в новые приводы. Когда это произойдет, копирование файлов на CD-R/RW будет таким же легким, как копирование на флоппи, а диски будут универсально читаемыми. Это предлагается как еще одна замена 3.5" дискетам. Посмотрим. (См. Ресурсы для получения дополнительной информации о Mount Rainier.)

Возможности эмулирования SCSI в Linux

Используйте либо IDE/ATAPI, либо SCSI CD writer. Параллельный порт приводит к ужасающе большому количеству ошибок, а приводы USB слишком медленны. Кроме того, они не очень хорошо поддерживаются в Linux (хотя вам может повезти с новыми приводами USB 2.0).

Приводы IDE/ATAPI наиболее распространены, но требуют небольшой настройки для работы. Итак, что происходит, если cdrecord показывает, что нет сконфигурированных приводов? Чтобы проверить это, введите:

$ cdrecord -scanbus

Если он покажет ваш CD-RW привод (см. Запись диска ниже), вы можете пропустить большую часть секции, хотя стоит все же почитать, чтобы иметь больше информации.

Linux использует подсистему эмуляции SCSI, так что приводы IDE/ATAPI CD-writers требуют драйверов для совместимости. Если в одном компьютере установлены и CD-ROM и CD-R/RW, то для обоих нужно использовать псевдо ide-scsi устройство, чтобы иметь возможность копирования дисков. Нет отличий в эмуляции SCSI для CD-ROM; она работает так же, только имя будет другое. В зависимости от вашего Linux, привод станет вместо /dev/cdrom0, или /dev/hdc, или /dev/scd0 (см. Таблицу 1).

Таблица 1. Имена устройств IDE/ATAPI

Имя Устройство
hda IDE bus/connector 0 master device
hdb IDE bus/connector 0 slave device
hdc IDE bus/connector 1 master device
hdd IDE bus/connector 1 slave device

Чтобы найти эти устройства в вашей системе, введите:

$ dmesg | grep '^hd.:'

hda: IBM-DTLA-305020, ATA DISK drive
hdb: TOSHIBA DVD-ROM SD-M1202, ATAPI CD/DVD-ROM drive
hdc: LITE-ON LTR-24102B, ATAPI CD/DVD-ROM drive
hda: 40188960 sectors (20577 MB) w/380KiB Cache, CHS=2501/255/63, UDMA(66)

Большинство современных дистрибутивов Linux поставляются с эмуляцией SCSI, уже встроенной в ядро:

$ locate ide-scsi.o

/lib/modules/2.4.19/kernel/drivers/scsi/ide-scsi.o

Если в вашей системе эмуляции нет, вам нужно вкомпилировать ее в ядро. Это - слишком обширная тема для того, чтобы описывать её в этой статье, так что смотрите Источники (это не трудно, когда вы знаете, как это делается).

Вам нужно отредактировать два текстовых файла, чтобы отконфигурировать систему для использования драйвера ide-scsi. Первый - /etc/modules.conf (в Debian, /etc/modules). Моя система имеет CD-ROM и CD-R/RW, hdb и hdc. Добавьте эти строки в /etc/modules.conf (или /etc/modules), используя значения вашей системы:

ide-cd ignore="hdb hdc"
ide-scsi

По умолчанию подсистема IDE исользует все ATA устройства для себя, так что строка ignore позволяет подсистеме SCSI захватить и CD-R/RW, и CD-ROM.

Теперь отредактируйте конфигурационный файл вашего загрузчика, GRUB или LILO. Для пользователей LILO, добавьте следующие строки в конец lilo.conf:

append="hdb=ide-scsi"
append="hdc=ide-scsi"

Для пользователей GRUB, добавьте следующее в конец строки "kernel" файла /etc/grub.conf (или в Debian - /boot/grub/menu.lst):

hdb=scsi hdc=scsi

Теперь перезагрузите вашу машину и проверьте, что было загружено:

$ lsmod

Вы получите длинный список, ищите ide-scsi.

Создание файла .iso

Когда вы выбрали файлы для записи на CD, процесс состоит из двух шагов: создания .iso с помощью mkisofs, и запись на диск при помощи cdrecord. Выполните следующее для создания файла .iso:

$ mkisofs -o test.iso -Jrv -V test_disk /home/carla/

В этом примере:

  • -o имя нового файла образа .iso (test.iso)
  • -J использование записей Joliet, для совместимости с Windows
  • -r использование запистей Rock Ridge для совместимости с UNIX/Linux, и разрешения чтения всех файлов
  • -v установка режима комментарив после создания образа
  • -V обеспечивает идентификатор диска (test_disk); это имя диска будет показано в Windows Explorer
  • Последнее в списке - это файлы, выбранные для упаковки в .iso (все файлы из /home/carla/)

Теперь монтируем .iso для проверки. Я делаю тестовую директорию:

$ mkdir /test_iso
$ mount -t iso9660 -o ro,loop=/dev/loop0 test.iso /test_iso

Взгляните на содержимое директории; все ваши файлы должны быть там и быть читаемыми. Если это не так, то образ плохой, и если вы запишете его на диск, то ничего хорошего не получится.

Запись диска

Запись образа на диск очень проста. Сначала определите адрес SCSI вашего CD-R/RW:

$ cdrecord -scanbus

Cdrecord 1.10 (i686-pc-linux-gnu) Copyright (C) 1995-2001 Jrg Schilling
Linux sg driver version: 3.1.24
Using libscg version 'schily-0.5'
scsibus0:
0,0,0 0) 'TOSHIBA ' 'DVD-ROM SD-M1202' '1020' Removable CD-ROM
0,1,0 1) 'LITE-ON ' 'LTR-24102B ' '5S54' Removable CD-ROM
0,2,0 2) *
0,3,0 3) *
0,4,0 4) *
0,5,0 5) *
0,6,0 6) *
0,7,0 7) *

Первые три числа для каждого устройства соответствуют шине SCSI, номеру устройства и LUN (Logical Unit Number), соответственно. (Четвертое число - это опять номер устройства). cdrecord требует эти три числа. В этом примере записывающее устройство - это 0,1,0. Все, что есть на шине SCSI 0, может быть сокращено до 1,0, отбросив первый 0. Это общее условие. Дополнительные шины, если они есть, должны быть указаны полностью - никаких сокращений.

Теперь запишем на диск:

$ cdrecord -v -eject speed=8 dev=0,1,0 test.iso

В этом примере:

  • -v отладочная информация
  • -eject выдвинуть диск по окончании записи
  • -speed устанавливает скорость записи (8)
  • -dev номер устройства (0,1,0), определенный cdrecord -scanbus
  • Последнее - имя образа, который будет записан (test.iso)

Это - простой и действенный способ создания дисков для публичного распространения, так как он создает диски, которые могут быть прочитаны на любой Windows или Linux системе. mkisofs хорош для создания .iso, а также позволяет создать файловые системы для многих платформ. За более подробной информацией обращайтесь к mkisofs man page.

На быстрой машине с большим количеством памяти вы можете выполнять во время записи задачи, которые слабо загружают процессор, но лучше в это время ничего не делать. Лазер не может остановиться, а потом продолжить запись с того места, так что любое прерывание процесса - фатально.

cdrecord будет пытаться запустить рекордер на максимальной скорости, так что необходимо указать скорость, стоит поэкспериментировать в этом. Установка низкой скорости полезна для уменьшения ошибок и предотвращения буфера. Современные рекордеры с технологией "burn-proof" (опять же - кто придумывает эти названия?) не подвержены опустошению буфера, в отличие от старых моделей.

Копирование диска

Чтобы просто скопировать исходный диск на записываемый, используйте команду:

$ cdrecord -v dev=0,1,0 speed=4 -isosize /dev/scd0

Эта команда направляет поток содержимого CD-ROM, /dev/scd0, на CD рекордер, dev=0,1,0. Не делайте этого на старой и медленной машине. Прямое копирование быстро, но очень велика вероятность ошибок. Лучше сначала сделать копию исходного диска на жесткий диск, а затем копировать с жесткого диска на CD рекордер:

$ mount /cdrom
$ dd if=/dev/scd0 of=/tmp/diskfile.iso
$ cdrecord dev=0,1,0 speed=8 fs=8m -v -eject -dummy /tmp/diskfile.iso

Обратите внимание на пару новых опций, fs=8m и -dummy. fs=8m определяет размер кольцевого буфера: чем больше, тем лучше. Помните, прерывание фатально; fs=8m создает достаточно большой буфер, чтобы не оставить рекордер без работы, если что-то замедлит передачу данных. Если 8 MB не достаточно, вам нужен компьютер получше. С другой стороны, больше, чем 8 MB ставить не стоит, так как операционная система будет тратить много времени на перезагрузку таблиц MMU (Memory Management Unit). По умолчанию 4 MB.

-dummy -- это отличная опция для проверки перед рискованием реальным диском. Рекордер проделает всё с выключенным лазером, давая пользователю шанс выловить все ошибки перез записью на диск.

Multisession

CD построен из сессий, а сессии разделены на треки. Но односессионном диске есть начало, одна TOC (table of contents - таблица содержания), данные, и окончание, которое заканчивает диск и предотвращает дальнейшую запись на диск. mkisofs соединяет несколько сессий вместе. Создание мультисессионного диска может быть легче в программах с графическим интерфейсом типа X-CD-Roast или KonCD, но здесь будет рассказано, как сделать это из командной строки.

Сначала вы записываете сессию на диск, используя опцию -multi в cdrecord:

$ cdrecord -v -eject speed=8 dev=0,1,0 -multi test.iso

Диск будет выполнен так, что его можно будет читать и можно будет дописывать данные. Для добавления следующих сессий mkisofs должен знать начальный и конечный сектора, которые вы можете найти так:

$ cdrecord dev=0,1,0 -msinfo
0,27139

Убедитесь, что диск, на который вы будете добавлять данные, уже в рекордере. Затем добавьте две новых опции -C и -M:

$ mkisofs -o test2.iso -Jr -V Session2 -C 0,27139 -M 0,1,0 /files/path/

Ещё лучше дать это сделать оболочке:

$ mkisofs -o test2.iso -Jr -V Session2 -C `cdrecord dev=0,1,0 -msinfo` -M 0,1,0 /files/path/

Мультисессионные приводы читают последнюю записанную сессию. Эта команда берет TOC с последней сессии и комбинирует ее с новой TOC. Для последней сессии на диске не ставьте опцию -multi.

Заключение

Запись CD в Linux мощна и гибка. Рекордеры могут быть установлены в сети и использоваться для автоматического резервирования данных. mkisofs и cdrecord также работают и с DVD. Существует множество отличных графических программ для записи CD, но полная функциональность обеспечивается только с помощью командной строки.

Ресурсы

  • Проверьте CDRecord home page для сообщениях об ошибках, FAQ и обо всем остальном, что касается cdrecord.

  • Еще больше информации о Mount Rainier можно найти на mt-rainier.org.

  • Linux Kernel HowTo - руководство по компилированию, обновлению и проблемам с ядрами Linux на x86.

  • "Super quick guide to compiling a kernel" предлагает хорошую помощь, если вам нужно откомпилировать ядро.

  • Статья про компиляцию ядра на русском языке: "Семь шагов к новому ядру".

  • CD-Recordable FAQ от Andy McFadden отвечает на бесчисленные вопросы о CD-R, как общие, так и специальные.

  • Прочтите описание очень полезного дистрибутива Linux на одном загрузочном диске - Knoppix.

  • Если вы только начинаете работать в Linux, руководство "Basic tasks for new Linux developers" (developerWorks, January 2003) расскажет вам, как входить и выходить из системы, монтировать и отмонтировать CD и решать другие задачи.

  • Для полного списка CD-ROM и CD-RW для персональных компьютеров обратитесь к Storage Accessories and Upgrades page.

  • Еще больше полезного вы найдете на developerWorks Linux zone и сайте LinuxBegin :).