Життя в консолі :)

Не претендую на авторські права але статья цікава.

Источник: linuxoid.ru

Запись дисков 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) *

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

Коментарі