11/09/2006

Запись CD и DVD дисков в Linux: Как записать CD/DVD диск под Linux

Задача: нужно записывать CD и DVD диски с данными в Linux без графических утилит. Чем прожигать диски в Linux?

Решение: все программы записи дисков под Linux есть просто графические оболочки к базовым утилитам cdrecord/wodim и growisofs. В некоторых случаях эти оболочки вносят свои дополнительные проблемы в процесс записи дисков, так что я их никогда не использовал. Чтобы не забыть самому и если кому интересно - ниже описание процесса.
В этом посте приводятся только основные команды и параметры утилит, которыми я пользуюсь постоянно - пост ни в коем случае не отменяет чтение man mkisofs cdrecord growisofs и других.

Как узнать адрес привода
Запись на привод проводится через ATAPI, а не эмуляцию SCSI, как когда-то делали. Для этого пишем в консольке:
sudo cdrecord -scanbus dev=ATAPI
Выдаст он нам что-то вроде:

Cdrecord-Clone 2.01.01a01 (i686-pc-linux-gnu) Copyright (C) 1995-2004 Joerg Schilling
'@(#)scsitransp.c 1.91 04/06/17 Copyright 1988,1995,2000-2004 J. Schilling').

scsibus0:
0,0,0 0) '_NEC ' 'DVD_RW ND-3550A ' '1.05' Removable CD-ROM

0,1,0 1) *

0,2,0 2) *

0,3,0 3) *

0,4,0 4) *

0,5,0 5) *

0,6,0 6) *

0,7,0 7) *

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

Запись CD-R/RW дисков
Для этого нужно установить либо сторонние пакеты cdrtools, либо пакты из Etch, которые называются cdrkit (свободная версия cdrtools). Тогда в вашем распоряжении окажутся утилиты cdrecord для записи/очистки дисков, mkisofs для создания ISO-образов из файлов, cdda2wav для сдирания с образа аудиотреков. Всё это нам понадобится для создания и пропаливания дисков.

Создание ISO-образа
Если нужно создать сперва ISO-образ для пропаливания, пользуемся утилитой mkisofs. Тут есть некоторые тонкости, например, под Windows XP и другими версиями Windows не воспринимаются права файлов, что принято в *nix-системах. Так же, если требуется пропалить диск для юниксоида с правами доступа, то нужно использовать опцию -r, которая включает расширение RockRidge стандартной iso9660. Если нужны длинные имена файлов и русские их названия, то включаем расширение Joliet. Короче говоря, чтобы из каталога /home/vasya/stuff сделать iso-образ под названием disk.iso, пишем в консольке следующее:
mkisofs -joliet-long -r -o disk.iso /home/vasya/stuff
После этого в каталоге, из которого вызывалась программа, появится disk.iso, который теперь можно пропаливать на болванку.

Запись CD-R дисков
Если уже есть ISO-образ и его надо просто пропалить, то надо вызвать cdrecord и указать ему скорость пропаливания, адрес устройства и непосредственно сам образ. Делается это так:
cdrecord -v speed=40 dev=ATAPI:0,0,0 my.iso
То есть записать с подробным выводом сообщений на скорости 40 на устройство ATAPI:0,0,0, (Primary Master 1-ого IDE-канала) образ my.iso - всё логично и понятно. Пока пропаливается диск - сворачиваем окошко консоли и занимаемся другими делами.

Можно поступить и так: чтобы не задавать руками скорость и завернуть команду в полностью автоматический скрипт, укажите speed=0, тогда программа сама выберет подходящую скорость, на которой болванка будет гарантированно читаться и привод её не запортит. Чтобы вообще не вспоминать потом про параметры, можно их прописать в /etc/cdrecord/cdrecord, в котором можно "определить" устройство, на которое будет производиться запись - то есть, прописать его ATAPI адрес, размер буфера FIFO, назначить имя этому устройству, и в дальнейшем обращаться к этому устройству по имени, при записи.

Всё это очень легко заворачивается в башевские/перловые (по вкусу) скрипты и выполняется через некоторое время на полном автомате, что однозначно быстрее всяких приблуд типа k3b с их GUIёвым интерфейсом.

Запись CD-RW дисков в Linux
Здесь немного поинтереснее, так как если на диске что-то есть, то вариантов становится больше: дописать информацию или снести оттуда всё и записать снова. Для того, чтобы очистить болванку, есть несколько методов, реализованных в cdrecord: быстрая очистка, только указанная сессия, полная очистка и другие. Например, для быстрой очистки пишем:
cdrecord -v blank=fast dev=ATAPI:0,0,0
и через пару секунд на него уже можно писать новые данные.
Запись CD-RW дисков ничем не отличается от записи обычных однократных болванок, и команда:
cdrecord -v speed=40 dev=ATAPI:0,0,0 my.iso
пропаливает диск точно так же. Только следите за указанием скорости пропаливания - для перезаписываемых болванок она ниже, чем для однократных.

Кстати, о скоростях. Утилита cdrecord поступает очень грамотно, на мой взгляд, что начинает запись с маленькой скорости, и постепенно подбирается к указанной максимальной, если это возможно. А не как некоторые безмозглые проприетарные громилы, которые сразу пытаются писать на большой скорости, а если не удаётся - скидывают скорость вдвое и на ней пишут весь диск. Скорость записи болванки может варьироваться в зависимости от производителя и нагруженности системы в данный момент. Для CD болванок 1х = 150 Кб/сек, при записи Audio-CD 1х = 172 Кб/сек, для DVD 1х = 1385 Кб/сек.

Запись DVD-R/RW дисков
Для этого нужно поставить утилиты dvd+rw-tools, которые входят в дистрибутив и включают в себя программы для записи и форматирования DVD-дисков. После этого, помимо других утилит, в нашем распоряжении будет growisofs для создания и записи образов на DVD, а так же dvd+rw-format для предварительного форматирования перезаписываемых DVD+RW. Запись DVD немного отличается от записи простых CD-болванок, так что ниже приведу команды для этого.

Запись DVD-/+R дисков в Linux

Для этого нам потребуется утилита growisofs, которая входит к комплект dvd+rw-tools, и объединяющая в себе mkisofs и cdrecord в одном флаконе. Для того, чтобы пропалить на DVD-болванку (без разницы - это DVD+R или DVD-R) файлы из каталога /home/vasya/something, пишем в консольке:
growisofs -Z /dev/cdrom -R -J /home/vasya/something
где после -Z идёт устройство, которое является резаком. Даже если оно называет /dev/cdrom, не надо удивляться: утилите всё равно. Скорость утилита подберёт сама, ту, на которой болванка гарантированно пропалится без ошибок, так что форсировать процесс не стоит.

Если уж так хочется прожечь болванку побыстрее, можно рекомендовать growispfs скорость ключом -speed=N так:
growisofs -speed=8 -Z /dev/cdrom -R -J /home/vasya/something
Помним, что для DVD скорость 1х = 1385 Кб/сек.
Если нужно пропалить уже готовый ISO-образ, команда изменится так:
growisofs -Z /dev/cdrom=image.iso
В процессе записи будет постоянно выводиться информация о текущей скорости записи, прогрессе и оставшемся до конца пропаливания времени.


Запись DVD-/+RW дисков
Для начала болванку нужно отформатировать, это делается так:
dvd+rw-format -f /dev/cdrom
Если у вас другое устройство для записи, отличное от /dev/cdrom, замените его на своё. После этого запись на диск идёт так же, как и для обычных DVD-болванок:
growisofs -Z /dev/cdrom=image.iso
После этого начнётся запись, а мы можем заняться чем-то более полезным, чем созерцание процентов записываемого образа.

Возможность использования DVD-/+RW как дискеты
Есть возможность использования пакетной записи и файловой системы udf (должна быть скомпилирована поддержка ядре), чтобы работать с перезаписываемым DVD-диском как с большой дискетой. Как мне любезно написал в комментариях ув.тов. Anonymous, выглядит это так:
dvd+rw-format -f /dev/cdrom
mkudffs /dev/cdrom

После чего работаем как с простым RW сменным носителем типа дискетки или флешки:
mount -t udf /dev/cdrom /mnt/cdrom
cp /etc/* /mnt/cdrom/
rm /mnt/cdrom/shadow
eject
Просто и удобно.

Как проверить правильность записи на диск - проверка дисков в Linux
Для того, чтобы убедиться в правильности записи данных на диск, есть замечательная утилита dd, которая входит в любой дистрибутив Linux. О том, как проверить диск после записи, есть подробные инструкции на этом же блоге.


Ссылки
Помимо мануалов к утилитам, которые написаны очень толково, можно почитать о записи на разных ресурсах, перечисленных ниже.
CD:
Замечательная статья по записи через ATAPI здесь. На английском хорошая есть статья, в которой почти обо всём и толково. Теоретический, но уже немного устаревший, обзор тут, а здесь совсем зубодробильный обзор возможностей CD-приводов.
DVD:
Очень хорошая и информативная статья по записи болванок DVD здесь. На английском, но довольно просто и толково про это же есть тут. Много интересного можно почерпнуть отсюда.

28 комментариев:

  1. Я не знаю, как сейчас в cdrkit, а у меня в Sarge существует файл /etc/cdrecord/cdrecord, в котором можно "определить" устройство, на которое будет производиться запись - то есть, прописать его ATAPI адрес, назначить имя этому устройству, и в дальнейшем обращаться к этому устройству по имени, при записи.

    Так же в этом файле можно определить желаемую скорость записи, и размер буфера FIFO, а так же интерфейс - ATA, ATAPI и др.

    Чем это удобно? При записи нет необходимости указывать параметры dev, speed.

    Кстати, определить можно несколько устройств, или допустим, одно устройство с разными параметрами.

    А так же, можно объединить процесс создания образа и записи его, используя pipes, примеры есть в man cdrecord.

    И я с вами согласен в вопросе того, что возмоность скриптовать процесс записи - это очень удобно, особенно для организации регулярных однотипных операций, например, бэкапов.

    ОтветитьУдалить
  2. Огромное спасибо за статью. Некоторые вещи (например про определение atapi-устр-ва) не знал вовсе. По остальным вопросам - буду пользовать как замечательную шпаргалку.

    ОтветитьУдалить
  3. Небольшое замечание: в Sid уже давно заменили cdrecord на wodim (по лицензионным причинам). Насчет Etch не знаю.
    По форме запуска отличий не заметил.

    ОтветитьУдалить
  4. 2 Roman Lagunov
    Я не знаю, как сейчас в cdrkit, а у меня в Sarge существует файл /etc/cdrecord/cdrecord
    Ба, точно! Класс, а я и не знал :-) Спасибо за наводку. Унёс комментарий в записи, на досуге надо будет добавть эти сведения в пост.

    А так же, можно объединить процесс создания образа и записи его, используя pipes
    Да, конечно, но у меня есть на этот счёт башевский скрипт, который делает исошник и потом его пропаливает. В посте - его куски.

    2 JaGoTerr
    Огромное спасибо за статью. Некоторые вещи (например про определение atapi-устр-ва) не знал вовсе.
    Про запись через ATAPI я узнал, читая статью на linuxsrp.ru - там человек удивлялся, почему все записывают через SCSI. Через ATAPI проще и удобнее. Вот и я решил об этом написать. Чтобы потом, как всегда, самому не забыть.

    2 Роман Чепляка
    Небольшое замечание: в Sid уже давно заменили cdrecord на wodim (по лицензионным причинам). Насчет Etch не знаю.
    В общем, в Sarge надо cdrecord ставить отдельно и этот пакет уже довольно старый (2004 год). До меня доходила информация, что заменили на cdrkit - тот же cdrecord, но открытый. Теперь, стало быть, wodim. Буду иметь в виду.

    Комментаторам большое спасибо за внимание и сообщённые ценные сведения.

    ОтветитьУдалить
  5. по поводу DVD+RW, полезная добавка
    dvd+rw-format -f /dev/cdrom
    mkudffs /dev/cdrom
    после чего работаем как с простым RW сменным носителем типа дискетки или флешки

    mount -t udf /dev/cdrom /mnt/cdrom
    cp /etc/* /mnt/cdrom/
    rm /mnt/cdrom/shadow
    eject

    ОтветитьУдалить
  6. 2 Anonymous
    по поводу DVD+RW, полезная добавка
    Ого! Так вот ты какой, цветочек аленький! :-) Стало быть, не зря я скомпилировал udf модулем. Надо будет попробовать.
    Спасибо тов.Анонимусу за полезную информацию!

    ОтветитьУдалить
  7. Спасибо за статью. На досуге займусь освоением.

    Немного мимо темы: немного раздражает смещение меню слева в твоем блоге (часть меню оказывается внизу, хотя должна быть выше). Такое наблюдается в Огнелисе. Опера отображает все как положено.

    ОтветитьУдалить
  8. 2 vonderer@darkstar
    Спасибо за статью. На досуге займусь освоением.
    Давно хотел написать, а то меня в письмах и на форумах спрашивают... Вот, кстати, дополнил статью. Уважаемые товарищи комментаторы кое-что интересное подсказали.

    Немного мимо темы: немного раздражает смещение меню слева в твоем блоге
    Фиг его знает... сейчас движок блоггера ломают, может из-за этого. Постараюсь что-нибудь придумать.

    ОтветитьУдалить
  9. добавлю что у меня cdrecord в качестве устройства воспринимает и обычное указание устройства. Например та же очистка диска:
    $ cdrecord -v blank=fast dev=/dev/hdc
    (система Slackware 11)

    ОтветитьУдалить
  10. 2 vadim303
    добавлю что у меня cdrecord в качестве устройства воспринимает и обычное указание устройства.
    Ну да, можно и так, просто раньше все писали через эмуляцию скази, а потом перешли на ATAPI. Можно и с указанием устройства. Кстати, наверное, добавлю в пост.
    Спасибо, что напомнили :-)

    ОтветитьУдалить
  11. Странно. У меня находит девайс по 0,0,0
    а дальше при попытке записи по команде указанной в статье выдает такое сообщение.
    SCSI драйвер нот фаунд. Попробуйте почитать файл README.ATAPI.setup если у вас установлен IDE драйвер.Такие вот неприятности. С предыдущим дистрибутивом такого не было. Найти этот файл кстати не удалось.

    ОтветитьУдалить
  12. Експериментальным путём, испортив несколько дисков на нескольких приводах, обнаружил, что CD диски часто не читаются в последних секторах если запись была произведена из iso образа в режиме Track at once (TAO), а это есть режим по умолчанию. Без проблем записываются в режиме DAO или SAO (Disk and Session at once соответственно). Кстати говоря, последняя Ahead Nero не даёт записывать ISO в режиме track at once, а раньше давала.

    ОтветитьУдалить
  13. Спасибо за статью - теперь получается прожигать диски под ubuntu. А известно ли вам что-либо про прожигание этикеток (aka lightscribe)? Это был бы неплохой повод для написания продолжения статьи.

    ОтветитьУдалить
  14. 2 giner
    Експериментальным путём, испортив несколько дисков на нескольких приводах,
    Есть такое: диск, записанный NEC, им же читается фигово на последних секторах - другие приводы читают без нареканий. В остальном всё отлично.

    2 CTpaHHoe
    Спасибо за статью - теперь получается прожигать диски под ubuntu.
    Да не за что - только я не понял, как это с убунту связано :-)

    А известно ли вам что-либо про прожигание этикеток (aka lightscribe)?
    Известно - всё довольно грустно. Технология патентована HP, к k3b выпустили плагин, позволяющий прожигать такие вещи, но не более. Вообще довольно дурная затея... есть ещё cdpaint, но у автора в мануале какой-то глюк, и описанным им способом определить параметры для прожига картинок трудно.

    Про cdpaint смогу что-нибудь написать, но ближе к весне - сейчас наш студент эту утилиту утюжит.

    ОтветитьУдалить
  15. А я снимаю образы одной командой
    cp /dev/cdrom mycdrom.iso

    ОтветитьУдалить
  16. 2 Михаил Саушкин комментирует...
    А я снимаю образы одной командой
    cp /dev/cdrom mycdrom.iso

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

    ОтветитьУдалить
  17. у меня почему-то mkudffs вообще не хочет работать, пишет какую-то бесмыслицу: "trying to change type of multiple extents". Короче в топку битые проги.

    ОтветитьУдалить
  18. Ребят, мне нужно записывать iso образ сразу на 6 приводов Blue Ray (на работе эксперементы) посоветуйте как это лучше всего сделать, я еще не пробовал но надеюсь wodim -v speed=4 dev=1,0 dev=2,0 dev=3,0 dev=4,0 dev=5,0 dev=6,0 /home/blueray/image.iso сработает... хотелось бы одной командой и без && запустить запись сразу на несколькоих приводах....

    ОтветитьУдалить
  19. Ух ты, спасибо! Действительно, намного проще (и удобней), чем графические утилиты.

    ОтветитьУдалить
  20. Хороший, информативный, понятный пост.
    Спасибо!

    ОтветитьУдалить
  21. А у меня имена файлов при growisofs -speed=8 -Z /dev/cdrom -R -J /home/vasya/something обрезает.

    ОтветитьУдалить
  22. Образы снимаются командой dd if=/dev/cdrom of=some.iso
    замечательно. В rus-linux есть статья.

    ОтветитьУдалить
  23. Мне кажется для полной картины надо ещё упомянуть команду для побайтового сравнения того, что записалось, с тем, что мы хотели записать.

    ОтветитьУдалить
  24. Спасибо Вам! всё просто и понятно. помогли!

    ОтветитьУдалить
  25. Давно меня тут не было - а вот сейчас сам читаю свой пост. Поребовалось диск с убунтой пропалить :-)

    @ Анонимный, 26.08.2008 9:35:00
    Действительно, намного проще (и удобней), чем графические утилиты.

    Конечно. Чем тыкать кнопки и долго разбираться во всяких Нерах, пишем команду и готово.

    @Анонимный, 01.12.2008 1:35:00
    Хороший, информативный, понятный пост.
    Стараемся :-)

    @Анонимный, 10.02.2009 13:56:00
    А у меня имена файлов при growisofs -speed=8 -Z /dev/cdrom -R -J /home/vasya/something обрезает.
    Ключик -joliet-long должен помочь.


    @Электроник, 13.03.2009 18:32:00
    Образы снимаются командой dd
    Именно так.

    @Kakadu, 05.12.2009 12:14:00
    Мне кажется для полной картины надо ещё упомянуть команду для побайтового сравнения того, что записалось
    Разумно. Добавил ссылку на свой пост, который был опубликован позднее.
    Спасибо.

    ОтветитьУдалить
  26. Дорогой Ст. Дебианщик!
    Во-первых, спасибо за подробную инструкцию.
    Во-вторых, как на двухслойную болванку готовый фильм записать. Ведь точка перехода должна как-то определяться. Я до сих пор только ImgBurn'ом пользовался.
    LRY

    ОтветитьУдалить
  27. Есть задача писать сразу на несколько DVD драйвов одновременно, с целью сохранения времени.
    Такое возможно в Ubuntu 10.10?

    ОтветитьУдалить
  28. а если допустим мы создали образ на флешке, а на ней были данные... она отформатируется?

    ОтветитьУдалить