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.
Когда вы выбрали файлы для записи на 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 -- это отличная опция для проверки перед рискованием реальным диском. Рекордер проделает всё с выключенным лазером, давая пользователю шанс выловить все ошибки перез записью на диск.
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 :).