Содержание:
Возможности эмулирования SCSI
в Linux
Создание
файла .iso file
Запись диска
Копирование
диска
Multisession
Заключение
Ресурсы
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 :).