Este Texto é uma contribuição enviada por George Tavares
Verificando o seu CD-RW
O software cdrecord possui uma opção
de identificar o CD-RW da máquina. É a opção
é a checkdrive. Assim:
# cdrecord -checkdrive dev=0,6,0
; no freebsd 3.0/CAM
# cdrecord -checkdrive dev=/dev/rcd0c ;
no freebsd 2.2.8/sem CAM
Será então exibido algo como:
Cdrecord release 1.6.1 Copyright (C) 1995-1998 Jörg Schilling
scsidev: '0,6,0'
scsibus: 0 target: 6 lun: 0
Device type : Removable CD-ROM
Version : 2
Response Format: 2
Capabilities : SYNC LINKED
Vendor_info : 'MATSHITA'
Identifikation : 'CD-R CW-7502 '
Revision : '4.10'
Device seems to be: Matsushita CW-7502.
Using generic SCSI-3/mmc CD-R driver (mmc_cdr).
Driver flags : SWABAUDIO
Esta diferença na sintaxe se deve a diferença
de nomenclatura dos devices entre as duas versões do FreeBSD. No
caso do FreeBSD 3.0/CAM, o device deve ser uma sequência de três
números indicando o bus scsi, o target no bus e o lun na scsi. Já
no FreeBSD 2.2.8/sem CAM, é necessário apresentar o nome
raw do device. Além do nome, versão, etc, a informação
mais importante é o fato do driver usado ser SCSI-3/mmc compliant
(penúltima linha).
Neste momento é interessante criar um arquivo
script para ser lido com as configurações do device e velocidade
de gravação. Por exemplo, este é meu arquivo cdrliga,
em csh:
#!/bin/csh
setenv CDR_SPEED 4
setenv CDR_DEVICE 0,6,0
O CDR_DEVICE indica o device para ser usado e o
CDR_SPEED identifica a velocidade de gravação. Ajuste os
valores para a sua máquina. Agora para ler o arquivo digite:
# source cdrliga
Só por curiosidade, agora podemos ver todas
as capacidades quanto a velocidade de gravação e outros itens
do drive digitando:
# cdrecord -prcap
Esta instrucao gera uma lista descritiva detalhada
do drive e de suas capacidades. Devido a sua extensao o resultado, da instrucao
acima, nao foi reproduzido aqui.
Montando um CD
Primeiro de tudo, devemos ter espaço em disco
para gravar o CD. Existem dois modos de gravar o CD: contruindo uma imagem
temporária em HD e depois realizando o dump dessa imagem para CD
(consome o dobro de espaco em disco) ou fazendo um sistema de pipe entre
a geracao da imagem e o processo de gravar CD.
O primeiro processo é simples. Para gerar
a imagem do CD usamos o programa mkisofs. Para usá-lo vamos fazer
uma cópia do um script de montagem do cd do freebsd que está
em /usr/share/example/worm/makecdfs.sh e damos permissão de execução
para ele.
O seu uso é muito simples. Basta digitar:
# makecdfs.sh "titulo" /export/fonte /export/saida.iso "copyright"
Com este comando é gerado um imagem iso em
/export/saida.iso com o conteúdo do diretório /export/fonte.
A primeira string é o título do cd e a última é
a informação de copyright.
Existe um flag deste script, o -b, que pode ser
passado antes do título. Este flag serve para gerar cd's bootáveis.
Para isto ele procura a imagem de boot em /floopies/boot.flp e gera uma
imagem bootável no sistema el torrito. Os nomes longos são
convertidos para o formato ISO9660 com Rockridge Extensions.
Ai resta começar o processo de gravação.
Primeiro carregamos as definições do cdrliga. Se há
alguma dúvida se o throughput do sistema é suficiente, é
possivel fazer um teste antes da gravação, invocando o comando:
# cdrecord -dummy -v /export/saida.iso
Para gravar definitivamente, usamos:
# cdrecord -v /export/saida.iso
Para gravar um cd sem usar a imagem intermediária,
primeiro precisamos dar uma mexidinha no script makecdfs.sh. Chamei ele
de makecdfs2.sh:
#!/bin/sh
#
# usage: makecdfs "cd title" input-tree "copyright string"
#
if [ "$1" = "-b" ]; then
bootable="-b floppies/boot.flp
-c floppies/boot.catalog"
shift
else
bootable=""
fi
if [ $# -lt 3 ]; then
echo "usage: $0 \"cd-title\"
input-tree \"copyright\""
elif [ ! -d $2 ]; then
echo "$0: $2 is not a
directory tree."
else
title="$1"; shift
tree=$1; shift
copyright="$*"
mkisofs $bootable -a
-d -N -D -R -T -V "$title" -P "$copyright" $tree
fi
# End
Agora em vez dele gravar uma imagem em HD ele joga
a imagem para a saida padrão. É interessante darmos um nice
neste script, para que não falte dados ao cdrecord no sistema de
pipe:
# ( /usr/bin/nice --18 makecdfs2.sh "titulo" /export/fonte "copyright"
) | cdrecord -v -
Para usar assim tenha certeza que o sistema vai
aguentar a demanda. O cdrecord não precisa de nice, pois no seu
código ele já ajusta a prioridade.
Finalmente, se você possui dois drives de
CD e quer fazer a copia de um para outro on the fly:
# cdrecord -v -isosize /dev/cd1c
O flag isosize serve para impedir que algum dado
além do tamanho do disco seja gravado.
Considerações Finais
Não faça um uso exaustivo de I/O no
momento da gravação, pois apesar do cdrecord possuir mecanismo
de fila, é possível que ela se esgote e falhe a gravação
do CD. Um hardware bom também evita a falha de gravação.
Quanto mais rápidos os discos usados na imagem do CD, melhor.
Os exemplos mostrados aqui servem para gerar imagem
do tipo ISO9660 + rockridge extensions + boot el torrito. Os CDs gravados
desta maneira, em windows, irão aparecer no formato 8.3, sem nomes
longos. Para gravar CDs para windows, no formato ISO9660 + Joliet de uma
olhada no mkhybrid. O FreeBSD ainda nao entende CDs do tipo Joliet, assim
estes discos aparecerão no formato 8.3 no FreeBSD, enquanto em windows
eles aparecerão sem problema algum.
Quando estiver montando os CDs, tenha cuidado para
não extrapolar o tamanho da mídia de gravação,
e não esqueça de deixar um espaço para o programa
gravar a TOC.
O software cdrecord não deve nada para os
melhores gravadores do mercado, a não ser uma interface. Ele não
é mais lento e tem um número muito grande de opções,
basta explorá-las.
Boa Sorte!