суббота, 26 ноября 2016 г.

Запись 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 здесь. На английском, но довольно просто и толково про это же есть тут. Много интересного можно почерпнуть отсюда.