Запись дисков CD-R/RW из консоли
Все, наверное, привыкли записывать диски, пользуясь такими программами, как Nero под Windows или X-CD-Roast/K3b под линукс. Но иногда бывает необходимо записать диск, а ничего из перечисленного нету под рукой, а единственное, что доступно - консольные программы cdrecord и mkisofs. Ну что же, посмотрим, что с этим можно сделать, ведь только так можно узнать всю мощь и гибкость записи дисков под Linux. Итак, начнем.
Программа mkisofs. mkisofs создает образ-гибрид файловой системы ISO9660/JOLIET/HFS, но не просто создает, но и позволяет заполнить ее данными. В отличие от других носителей информации, таких как жесткие или гибкие диски, файловая система создается и заполняется одновременно. cdrecord позволяет записать данные на стандартный (Orange Book) CD-R/RW диск. Использовать следует mkisofs и cdrecord версии 1.10 и выше. Для того, чтобы определить какая версия установлена на вашей машине, наберите: $ cdrecord -version
и $ mkisofs -version
Для новичков в мире записываемых дисков приведем некоторые вещи, которые необходимо понимать прежде чем продолжать чтение:
- CR-R: CD-Recordable (Записываемый CD). Это WORM- (Write Once, Read Many) диски, т.е. те, которые можно записать лишь один раз и потом многократно считывать. - CD-RW: CD-Rewritable (Перезаписываемый CD). WMRM (Write Many, Read Many) - диски можно много раз перезаписывать и читать. - CD-R - диски универсальны и должны читаться в любом приводе CD-ROM. - Коммерческие печатные диски. Такие диски не могут быть записаны лазером.
И несколько терминов, связанных с форматами файлов:
- Yellow Book: физический формат CD с данными. - Orange Book: физический формат для записываемых компакт-дисков. - CD-MO магнито-оптические диски. - CD-WO единожды записываемые диски (включают в себя и гибриды наподобие Фото-CD). - CD-RW перезаписываемые диски. - ISO-9660: Старый стандарт расположения данных, позволяющий использовать только стандарт 8.3 для имен файлов (т.е. 8 символов - имя файла и 3 - расширение). - Rock Ridge: Расширение ISO-9660, предполагающее использование длинных имен для файлов и UNIX-подобных ссылок. Позволяет сохранить все атрибуты файла, такие как владелец и права доступа. Атрибуты UNIX-файлов при чтении диска в Windows не отображаются. - Joliet: Расширение ISO-9660, разработанное Microsoft, которое позволяет использовать символы Unicode в именах файлов, так же как и использовать длинные имена файлов. Кроме того, Joliet предоставляет возможность создания урезанных имен для совместимости с MS-DOS, выглядящих наподобие FILENA~1.TXT. Позволяет использовать имена файлов длиной до 64 символов, включая пробелы. - El Torito: Спецификация для загрузочных компакт-дисков. - HFS (Hierarchical File System): Оригинальная файловая система компьютеров Macintosh. - Мультисессия: Позволяет добавлять файлы в любое время, после записи одиночной сессии. Для того, чтобы диски читались, сессия должна быть закрыта. Однако такой подход исключает добавление файлов. Мультисессия позволяет связать отдельные сессии и обновленное содержание диска выглядит как один каталог. - CD-UDF (Universal Disk Format): файловая система-стандарт пошаговой записи пакетов данных.
Итак, идем дальше. Если, cdrecord не сконфигурирована, необходимо указать тип записывающего устройства. Для этого необходимо набрать в командной строке следующее: $ cdrecord -scanbus
Если она покажет данные о вашем CD-RW-приводе, то можно переходить сразу к записи диска. Если же этого не произошло, необходимо найти в чем причина. Принцип работы с пишущими приводами различен для ядер серии 2.2.*, 2.4.* и 2.6.*. В первом случае для корректной работы привода необходимо настроить эмуляцию SCSI. Для ядер серии 2.6.* эмуляция не нужна. Сейчас все новые дистрибутивы на ядрах 2.4.*, как правило, имеют вкомпилированную эмуляцию SCSI. Для того, чтобы в этом убедиться, наберите в командной строке следующее: $ slocate ide-scsi.o
/lib/modules/2.4.22-1.2199.nptlsmp/kernel/drivers/scsi/ide-scsi.o
Если же такого файла у вас не окажется - необходимо перекомпилировать ядро, включив в конфигурацию драйвер ide-scsi. Кроме этого, необходимо добавить несколько строк в файл конфигурации загрузчика и файл /etc/modules.conf. Допустим, система имеет приводы CD-ROM и CD-RW, которые обозначены, соответственно, как hdd и hde. Тогда в файл /etc/modules.conf необходимо добавить следующие строки: ide-cd ignore="hdd hde"
ide-scsi
По умолчанию, подсистема IDE управляет всеми ATA-устройствами, а используя ignore, мы передаем управление SCSI как пишущий привод, так и CD-ROM-привод.
Далее правим конфигурационный файл нашего загрузчика, LILO или GRUB'а. Тем, кто использует LILO, необходимо в конец конфигурационного файла lilo.conf добавить следующее: append="hdd=ide-scsi"
append="hde=ide-scsi"
Пользователям GRUB прийдется добавить следующее в файл /etc/grub.conf (или /boot/grub/menu.lst для тех, у кого Debian) в конце строки kernel: hdd=scsi hde=scsi
Теперь можно перезагрузиться и проверить все ли загрузилось: $ lsmod
Результатом будет список всех загруженых модулей, среди которых должен быть и ide-scsi, если все прошло успешно.
Создание iso-образов
Процесс записи выбранных вами файлов состоит из двух этапов. Вначале необходимо создать с помощью mkisofs iso-образ, и потом записать его на диск, используя программу cdrecord. Для создания образа воспользуемся следующим синтаксисом: $ mkisofs -o test.iso -Jrv -V test_disk /home/usver/test_dir
В этом примере следующие обозначения: -o - имя создаваемого iso-файла (test.iso) -J - используем записи Joliet для совместимости с системой Windows -r - Rock Ridge расширение для совсестимости с *nix -v - так называемый verbose-режим. В этом случае в процессе создания образа будет выводиться различная дополнительная информация -V - указываем имя тома (test_disk); Это имя будет отображаться при просмотре в Windows Последний параметр команды представляет собой объекты, помещаемые в создаваемый образ. В нашем случае - это все содержимое каталога /home/usver/test_dir. После создания образа, мы можем просмотреть его содержимое без записи на носитель. Для этого достаточно файл смонтировать: $ mkdir /mnt/iso1
$ mount -t iso9660 -o ro,loop=/dev/loop0 test.iso /mnt/iso1
Непосредственно запись диска
Теперь нам осталось записать свежесозданный образ на CD-R/RW. Ну что же, это проще простого. Для начала находим SCSI-адрес нашего пишущего привода: $ cdrecord -scanbus
Cdrecord-Clone 2.01a18-dvd (i686-pc-linux-gnu) Copyright (C) 1995-2003 Jörg Schilling
Note: This version is an unofficial (modified) version with DVD support
Note: and therefore may have bugs that are not present in the original.
Note: Please send bug reports or support requests to .
Note: The author of cdrecord is not to be bothered with problems in this version.
Linux sg driver version: 3.1.25
Using libscg version 'schily-0.7'
scsibus0:
0,0,0 0) '_NEC ' 'CD-RW NR-9300A ' '2.12' Removable CD-ROM
0,1,0 1) 'ATAPI-CD' 'ROM-DRIVE-52MAX ' '52CA' 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-шину, номер устройства (ID) и LUN (Logical Unit Number), соответственно. Четвертое число - это снова номер устройства. Программе cdrecord необходимо будет указать эти первые три числа. В нашем случае записывающее устройство - 0,0,0.
Теперь записываем диск: $ cdrecord -v -eject speed=48 dev=0,0,0 test.iso
Обозначения здесь следующие: -v - verbose-режим. Обозначает тоже, что и в предыдущем случае -eject - выдвигает лоток привода после окончания процесса записи -speed - указываем скорость записи диска. В нашем случае 48х -dev - записывающее устройство. Числа взяты из вывода программы cdrecord с параметром scanbus Последний параметр - имя файла, содержащего записываемый образ.
Таким образом, этот простой пример позволяет создать диск, который будет нормально читаться как в Windows, так и в *nix-системах. Команда mkisofs, помимо приведенных здесь параметров, имеет и другие. Для того, что бы удостовериться в этом взгляните на соответствующую man-страницу. Указывать скорость записи в программе cdrecord не обязательно, она будет пытаться записать диск с максимально возможной скоростью. Однако бывают случаи, когда без указания параметра не обойтись.
Для очистки CD-RW необходимо в качестве параметров указать следующее: blank=all - очистить весь диск blank=disc - то же самое blank=fast - быстрая очистка диска blank=session - очистить последнюю сессию blank=unclose - открыть последнюю записанную сессию То есть, например команда для быстрой очистки диска будет выглядеть следующим образом: $ cdrecord dev=0,0,0 blank=fast -eject -speed=4 -v
Копирование диска
Для прямого копирования содержимого с одного диска на другой можно воспользоваться командой вида: $ cdrecord -v dev=0,0,0 speed=4 -isosize /dev/scd1
Эта команда перенаправляет поток данных с привода CD-ROM (/dev/scd1) на записывающий привод, dev=0,0,0. Прямое копирование достаточно удобная процедура, однако в случае возникновения ошибок вы можете испортить болванку. Для избежания печальных последствий лучше вначале сделать образ CD-ROM'a и сохранить его на жестком диске и лишь потом уже писать на болванку. Эта процедура будет иметь следующий вид: $ mount /mnt/cdrom
$ dd if=/dev/scd1 of=/tmp/diskfile.iso
$ cdrecord dev=0,0,0 speed=48 fs=8m -v -eject -dummy /tmp/diskfile.iso
Новые параметры fs=8m и -dummy отвечают за следующее. С помощью fs=8m мы указываем программе размер буфера, чем больше, тем лучше. Важно также, чтобы он не опустошался во время записи. Указанных 8 мегабайт в обычных условиях вполне достаточно для качественной записи диска даже на слабых машинах. Опция -dummy позволяет протестировать привод прежде чем приступить непосредственно к записи данных.
Создание мультисессийного диска
Диски создаются сессиями, а сами сессии деляться на треки. Структура одной сессии такова: вводная часть, содержание сессии(TOC Table Of Contents), непосредственно данные, и закрывающая часть, которая делает невозможным дальнейшее добавление данных на диск. Используя режим мультисессии несколько сессий можно объединить, слинковав их содержания. Создание многосессионых дисков очень просто с помощью графических программ, таких как X-CD-Roast или K3b. Но такая же процедура выполняется не намного сложнее и в консоли. Пример: $ cdrecord -v -eject speed=48 dev=0,0,0 -multi test.iso
Так создается первая сессия на диске. Опция -multi позволяет сделать диск открытым для добавления других сессий, оставляя диск читаемым. Для того, чтобы добавить еще одну сессию, программе mkisofs необходимо знать номера начального и конечного секторов диска. Узнать это можно следующим образом: $ cdrecord dev=0,0,0 -msinfo
0,27139
Результат будет правильным, только в том случае, если диск записан с возможностью добавления данных. Теперь к уже известным параметрам программы mkisofs, рассмотренным ранее, добавим еще два - -C и -M В результате, команда для создания iso-образа будет иметь следующий вид: $ mkisofs -o test2.iso -Jr -V Session2 -C 0,27139 -M 0,0,0 /path/to/files
Можно так же эту команду объединить с предыдущей. В итоге, получим следующее: $ mkisofs -o test2.iso -Jr -V Session2 -C `cdrecord dev=0,0,0 -msinfo` -M 0,0,0 /files/path/
Теперь привод считает информацию о последней записанной сессии и объединит ее содержание с содержанием новой сессии. Предполагается, что последняя сессия записана с опцией -multi
Кое-что о записи дисков в дистрибутивах, основанных на ядрах 2.6.*
Почти все, что мы рассмотрели раньше и что касалось работы программ cdrecord и mkisofs было бы справедливо и в этом случае. Если бы не одно "но". Для записи дисков из дистрибутивов, использующих ядра ветки 2.6.* не нужно настраивать эмуляцию SCSI для приводов компакт-дисков, т.е не нужно ничего, касающегося ide-scsi добавлять в файлы /etc/modules.conf и файлы конфигурации загрузчика. В этом нет необходимости. Для того, чтобы указать программам, какой привод использовать, необходимо немножко изменить синтаксис в указании параметра dev, который теперь будет иметь вид, примерно следующий dev=ATA:3,0,0 . Все это можно найти в выводе команды cdrecord с параметром scanbus: $ cdrecord -scanbus
scsidev: 'ATA'
devname: 'ATA'
scsibus: -2 target: -2 lun: -2
#########################################################
#########
#
# Warning: Using ATAPI via /dev/hd* interface. Use dev=ATA:X,Y,Z or dev=/dev/hd
X
#
##########################################################
Linux sg driver version: 3.5.27
Using libscg version 'schily-0.8'.
cdrecord: Warning: using inofficial libscg transport code version (warly-Mandrak
elinux-scsi-linux-sg '@(#)scsi-linux-sg.c 1.83 04/05/20 Copyright 1997 J.
Schilling').
scsibus3:
3,0,0 300) '_NEC ' 'CD-RW NR-9300A ' '2.12' Removable CD-ROM
cdrecord: Warning: controller returns wrong size for CD capabilities page.
3,1,0 301) 'ATAPI-CD' 'ROM-DRIVE-52MAX ' '52CA' Removable CD-ROM
3,2,0 302) *
3,3,0 303) *
3,4,0 304) *
3,5,0 305) *
3,6,0 306) *
3,7,0 307) *
В зависимости от дистрибутива, вывод может быть отличным от приведенного здесь, однако сути это не меняет.
Выводы
Как вы уже, наверное, убедились, запись дисков из консоли весь полезная вещь. Кроме того, используя пишущие приводы в сети также можно настроить систему для быстрого и удобного резервного копирования и других, не менее полезных вещей. Кроме того, используя все те же программы можно с успехом записывать и DVD-диски.
|