Linux и запись CD/DVD


Не буду разводить соплей и дискуссий на тему GUI/CLI, кому нравятся всякие красивые гуевые писалки - пусть подолжают их использовать, не буду ничего комментировать, ниже рассказ про то, как автор решил этот вопрос лет 10 назад для записи CD и для появившихся после них DVD.

Чем будем пользоваться?

  • cdrtools
  • dvd+rw-tools

cdrtools
Пакет консольных программ для записи дисков, создания ISO файлов для последующей записи, перегонки Audio CD в файлы, диагностики и прочего. Автор Jörg Schilling. Первая версия появилась более 10 лет назад. Забираем отсюда, компилим и ставим. Поскольку бинари попадают в /opt/schily/bin, нужно добавить его в PATH после устаповки.

Для нас интерес представляют две прогаммы из набора cdrtools

  • mkhybrid, которая позволяет сделать ISO из файла или набора файлов
  • cdrecord, собственно прожигалка дисков

dvd+rw-tools
Тоже консольный наборчик, но для записи DVD. Несмотря на название поддерживает как DVD+RW, так и DVD-RW.
Берем тут, установка без хитростей, стандартная Пытливый читатель несомненно спросит, зачем еще и это устанавливать, когда cdrtools поддерживает DVD. Да, теперь все OK, но когда мне понадобилось наладить запись DVD, удивлению не было предела, когда выяснилось, что поддержка DVD - за деньги. В настоящее время - да, таки все включено и работает, но, во первых, неприятный осадок остался (оставим это на совести автора) и, кроме того, - где гарантия, что все не исчезнет снова в один прекрасный день.
Но факт остается фактом - замена была найдена и оказалась очень удобной. Из набора собственно нужна growisofs, которая нужна для записи DVD дисков.

Изначально появился cdrecord, теперешний cdrtools. Он поддерживал только SCSI резаки. Потом стало возможным работать и с IDE устройствами, сначала через эмуляцию SCSI, а потом и напрямую. Вообще идея все свести к SCSI интерфейсу и хоть как-то навести порядок в зоопарке правильная и например новые SATA или Card Reader'ы как раз и работают именно так. У меня тоже все работает через эмуляцию SCSI и не вижу смысла это менять.
SCSI и разного рода эмуляция - дело kernel, можно взять готовый из дистрибутива или же пересобрать. В конфиге включить 'SCSI' и модулями 'SCSI CD-ROM support' и 'SCSI generic support'. В /etc/rc.d/rc.local добавляем

/sbin/rmmod ide-cd
/sbin/modprobe ide-scsi "hdc=ide-scsi hdd=ide-scsi"
/sbin/modprobe sg
В примере выше два резака включены как secondary master и secondary slave. Смотрим, какие модули загружены
# /sbin/lsmod | grep ide
ide-scsi               12048   0 

# /sbin/lsmod | grep sr
sr_mod                 16984   0  (autoclean)
cdrom                  35104   0  (autoclean) [sr_mod]
Все нормально. Если планируется запись не от root, у юзера должны быть права на чтение/запись /dev/sg? и /dev/scd?.

Теперь самое время разобраться в адресации SCSI устройств. Смотрим что вообще есть на шине SCSI

# cdrecord -scanbus
Cdrecord-ProDVD-Clone 2.01.01a24 (i686-pc-linux-gnu) Copyright (C) 1995-2006 JЖrg Schilling
Linux sg driver version: 3.1.25
Using libscg version 'schily-0.9'.
scsibus0:
        0,0,0     0) *
        0,1,0     1) *
        0,2,0     2) *
        0,3,0     3) 'HP      ' 'CD-Writer+ 9200 ' '1.0e' Removable CD-ROM
        0,4,0     4) *
        0,5,0     5) *
        0,6,0     6) *
        0,7,0     7) *
scsibus1:
        1,0,0   100) 'TOSHIBA ' 'DVD-ROM SD-R1312' 'X010' Removable CD-ROM
        1,1,0   101) '_NEC    ' 'DVD_RW ND-2510A ' '2.16' Removable CD-ROM
        1,2,0   102) *
        1,3,0   103) *
        1,4,0   104) *
        1,5,0   105) * 'ATA     ' 'Hitachi HDM92924' 'P22O' Disk
        1,6,0   106) *
        1,7,0   107) *
scsibus2:
        2,0,0   200) 'ICSI    ' 'CF Card       CF' '1.3A' Removable Disk
        2,1,0   201) *
        2,2,0   202) *
        2,3,0   203) *
        2,4,0   204) *
        2,5,0   205) *
        2,6,0   206) *
        2,7,0   207) *
Видно, что в SCSI попало все - hdd SATA (1,5,0), card reader (2,0,0) и собственно сами резаки. У меня подключено 3 устройства - честный SCSI HP 9200 и 2 IDE - TOSHIBA 1312 и NEC 2510.

Адресация SCSI никаким образом не совпадает с расположением устройств в корпусе компьютера, поэтому более удобно пронумеровать их снизу вверх или наоборот и создать такой файлик

$ cat /etc/default/cdrom 
CDROM0="1,0,0"
CDROM1="0,3,0"
CDROM2="1,1,0"

CD-R и CD-RW

CD-RW диски нужно предварительно стирать. Пишем скрипт blankcd0 для работы с первым резаком

#!/bin/sh

. /etc/default/cdrom
cdrecord -vv dev=${CDROM0} speed=16 -blank=fast
В моем случае 3 резака и я просто потом скопировал blankcd0 в blankcd1 и blankcd2, поменяв 'CDROM0' на соответственно 'CDROM1' и 'CDROM2'.
Теперь можно вставить диск и просто сказать blankcd0 для его стирания.

Далее запись. Мне показалось неудобным каждый раз делать ISO образ, где-то его сохранять и все прочее. проще и удобнее все делать на лету.
Устанавливаем writecd0.sh. Пользуясь предыдущим советом меняем '${CDROM0}' и/или копируем при необходимости. Теперь можно записывать диски прямо из консоли, например записываем все из '/bin'. Заходим туда

$ cd /bin
/bin$
Смотрим, сколько займут места файлы на CD
/bin$ writecd0.sh -s
mkisofs 2.01.01a24 (i686-pc-linux-gnu)
Scanning /bin
Total extents scheduled to be written = 2331
2331
Для 650Mb дисков максимальное значение 332500, для 700 (80min) - 359000. Тут все нормально и помещается на болванку, поэтому смело записываем
/bin$ writecd0.sh -w
writing speed = 32
mkisofs 2.01.01a24 (i686-pc-linux-gnu)
Scanning /bin
Writing:   Initial Padblock                        Start Block 0
...
scsidev: '1,0,0'
...
Через некоторое время запись будет завершена. При записи однократно прожигаемых CD можно добавить ключик 'slow' что приведет к записи на минимально возможной скорости. Рекомендую все архивные материалы записывать именно так.

DVD+-R, DVD+-RW

Теперь перейдем в DVD+-R/RW. Для непосредственно записи используется программа growisofs. В принципе это тот же dd, но не в файл или устройство, а на DVD болванку. growisofs умеет работать непосредственно с файлами устройств в /dev. В моем случае DVD резак - третий по счету на шине SCSI, поэтому ему соответствует /dev/scd2. Для удобства делаем линк

# cd /dev
# ln -s scd2 dvd
Забираем скрипт writedvd.sh. Он работает точно так же, как и его предшественник, но дополнительно понимает '-t' для эмуляции записи. Стирать ничего не нужно просто проверяем (-s) и записываем (-w).

Что дальше?

Несколько особняком стоит вопрос проверки качества записи. Настоятельно рекомендую проверять ВСЕ архивные диски! Вариантов сделать это несколько. Можно просто скопировать все обратно на hdd или в /dev/null. Можно использовать программы, например cdck.
Я часто использую рекурсивный поиск файлов, сохранения их md5 хеша и последующего сравнения его на копии. Ставим mdc.plx.
Далее все просто.
Перед записью CD/DVD просто считаем хеш для всех файлов

$ cd /cool/files/to/be/writen
/cool/files/to/be/writen$ touch .md5sum
/cool/files/to/be/writen$ mdc.plx
/cool/files/to/be/writen$ cp ~/md5sum.last .md5sum
Далее записываем все из нужного каталога (/cool/files/to/be/writen в примере) на CD/DVD. После записи монтируем диск, говорим cd в то место, где он примонтирован и опять же запускаем mdc.plx для сравнения
/mnt/cdrom$ mdc.plx
...
...
Changed File(s): ----------
Total: 0

New File(s): ---------
Total: 0

Deleted File(s): ---------
Total: 0
Все OK. Лог изменений записывается и в ~/md5sum.log
Кстати, можно настроить периодическую проверку каких-то каталогов из cron используя такой же метод.

Все!

Tags: cd dvd recording cdrecord


Назад в оглавление



[Home] [TTL] [Unix] [Sdictionary] [ROW Programmer] [Symbian] [Misc] [News] [Search] [Contacts] [Guestbook]


Copyright (c) 1999-2024 Alexey Semenoff