Linux и запись CD/DVD
Не буду разводить соплей и дискуссий на тему GUI/CLI, кому нравятся
всякие красивые гуевые писалки - пусть подолжают их использовать, не буду ничего комментировать, ниже
рассказ про то, как автор решил этот вопрос лет 10 назад для записи CD и для
появившихся после них DVD.
Чем будем пользоваться?
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
Назад в оглавление
|