Gravação de cds pela linha de comando
Se fizer uma busca no Google atras deste tipo de informação, certamente encontrará vários
resultados com as mais variadas receitas de como fazer este tipo de procedimento, para as mais
variadas necessidades. Tantos que a principio nem seria necessario escrever-se um novo artigo
sobre isso, se é que é possível dizer algo novo agora. A não ser por um pequeno detalhe: nos
resultados da busca que fiz, percebi que a maioria dos documentos encontrados estão desatualizados
com relacao a uma mudança que houve na sintaxe de uso do cdrecord em suas últimas versões. Isto,
mais o fato de que seria interessante ter toda essa informação que tantas pessoas levantaram
reunidas num único lugar, me fez escrever este pequeno artigo, onde minha contribuição foi tão
somente chamar a atenção para a mudança citada, e revisar todas as dicas interessantes que
encontrei citando sempre, claro, a fonte original (relacionados ao texto atraves de numeros entre
parênteses), mas algumas vezes modificando-as um pouco devido a uma atualização necessária ou
por haver possibilidade de simplificacao de comandos.
Também me dei ao trabalho de testar todos os comandos mostrados antes de dar este documento por
finalizado, para tanto usando um gravador Creative 8x4x32 e um CDRW que nunca foi tantas vezes
sobreescrito em tão pouco tempo. Aliás, aproveito para esclarecer que se usei velocidade 4 em
todos os exemplos de gravação foi exatamente porque a mídia que usei para os testes não suporta
velocidade maior que essa.
O COMANDO cdrecord
Para aqueles que nao sabem o cdrecord é um comando que faz parte do pacote cdrtools, e já
acompanha o linux hà algum tempo. Programas gráficos de gravação de CDs muitas vezes nao
fazem mais do que chamar esse comando para realizar a tarefa de gravação, implementando assim
apenas uma interface em forma de janelas para o mesmo. É o caso do popular XCDRoast, que nao
funciona se o cdrecord nao estiver presente na máquina.
A forma mais simples de se chamar o comando para gravar uma imagem iso de um CD e como no
exemplo:
cdrecord -dev=0,0,0 speed=4 arquivo.iso
O que gravara o arquivo num gravador SCSI. Os numeros 0,0,0 identificam esse gravador, e podem
ser determinados via o comando
cdrecord -scanbus
A maioria dos artigos referenciados ao final deste texto recomendam esse comando para descobrir
como identificar o seu gravador, mas acontece que houve uma mudança recente na implementação
do cdrecord: Antigamente, o comando acima funcionava não importando se seu gravador era um
SCSI ou um IDE usando a emulação de SCSI do Linux (através do modulo ide_scsi). Hoje,
entretanto, ele (possivelmente) so vai funcionar com dispositivos SCSI (estou inferindo isso da
documentação, infelizmente nao tenho acesso a um gravador SCSI para testar), e se voce tentar usalo com um gravador IDE (que a maioria de nos mortais usa, nao e mesmo?) vai receber uma
mensagem de erro do tipo:
root@marcos:/tmp# cdrecord -scanbus
Cdrecord 2.00.3 (i686-pc-linux-gnu) Copyright (C) 1995-2002 Jörg Schilling
cdrecord: No such file or directory. Cannot open '/dev/pg*'. Cannot open SCSI driver.
cdrecord: For possible targets try 'cdrecord -scanbus'. Make sure you are root.
cdrecord: For possible transport specifiers try 'cdrecord dev=help'.
E é aqui que o iniciante, não encontrando maiores explicações, irá desistir de fazer gravações pela
linha de comando e tentar algum programa gráfico, quando na verdade é só substituir o comando
pelo seguinte:
cdrecord dev=ATAPI -scanbus
O que resultara numa saida como a que segue:
root@marcos:~# cdrecord -dev=ATAPI -scanbus
Cdrecord 2.00.3 (i686-pc-linux-gnu) Copyright (C) 1995-2002 Jörg Schilling
scsidev: 'ATAPI'
devname: 'ATAPI'
scsibus: -2 target: -2 lun: -2
Warning: Using ATA Packet interface.
Warning: The related libscg interface code is in pre alpha.
Warning: There may be fatal problems.
Using libscg version 'schily-0.7'
scsibus0:
0,0,0 0) *
0,1,0 1) 'LG ' 'CD-ROM CRD-8521B' '2.00' Removable CD-ROM
0,2,0 2) *
0,3,0 3) *
0,4,0 4) *
0,5,0 5) *
0,6,0 6) *
0,7,0 7) *
scsibus1:
1,0,0 100) *
1,1,0 101) 'CREATIVE' 'CD-RW RW8432E ' '1.07' Removable CD-ROM
1,2,0 102) *
1,3,0 103) *
1,4,0 104) *
1,5,0 105) *
1,6,0 106) *
1,7,0 107) *
E graças a ela, eu já sei que meu gravador está identificado pelos números 1,1,0 que eu posso passar
de novo para o cdrecord para gravar a imagem iso, mas de novo com a sintaxe modificada:
cdrecord dev=ATAPI:1,1,0 speed=4 arquivo.iso
Resumindo o importante aqui, em qualquer documentação mais antiga sobre como gravar CDs pela
linha de comando, atente para o uso do comando cdrecord, e substitua:
cdrecord -scanbus --> por --> cdrecord dev=ATAPI -scanbus
cdrecord dev=X,X,X speed=Y arquivo.iso --> por --> cdrecord dev=ATAPI:X,X,X speed=Y
arquivo.iso
Podem haver mais flags passadas ao cdrecord, que provavelmente podem ser mantidas. E
relembrando, este aviso vale para o caso de voce estar usando um gravador IDE (que é o mais usado
por ai, pois eu mesmo ainda nao tive a chance de ter um gravador SCSI nas maos).
CRIANDO A IMAGEM ISO
Criar uma imagem iso e o primeiro passo para transportar o conteudo de um diretorio qualquer para
dentro de uma mídia de CD, e o programa que faz isso e o mkisofs. Não o confunda com programas
como mkreiserfs ou mke2fs, pois enquanto aqueles formatam um dispositivo de blocos seguindo a
estrutura de um sistema de arquivos que ainda vai ser populado mais tarde (resumindo, o
equivalente ao format no mundo windows), o mkisofs cria um arquivo que contem a imagem de um
sistema de arquivos iso9660, já populado com arquivos e diretórios que estiverem sob um diretório
do seu sistema especificado para o comando.
Note que este comando tem muitas opções possiveis de serem utilizadas, entre elas para
compatibilizar a leitura do iso criado por outros sistemas, para esconder certos arquivos sob
determinados sistemas, para excluir alguns arquivos ou subdiretorios no momento de gerar a
imagem (digamos que voce queira deixar de fora algumas coisas dentro do seu diretorio que usara
para gerar a imagem), e ate opções para gerar imagens compativeis com DVDs hoje em dia. Uma
boa olhada na man page do mkisofs lhe mostrara tudo o que voce tem para escolher, mas tamanha
variedade de escolha tambem gera alguma confusão para decidir quais opcoes voce realmente
precisa.
Numa situação simples de gerar um CD de dados, com todo o conteúdo de um determinado
diretório, voce pode usar o seguinte comando:
mkisofs -J -L -l -r -T -V VOLUME -o ARQUIVOISO DIRETORIO
Onde:
VOLUME = nome do volume
ARQUIVOISO = nome do arquivo de imagem a ser criado
DIRETORIO = diretorio com os arquivos a serem colocados na imagem
-J = gera informacao de diretorios Joliet (para compatibilidade com windows)
-L = arquivos iso9660 podem comecar com .
-l (éle)= permite nomes de arquivos de 32 caracteres
-r = gera informacao de diretorios no formato Rock Ridge
-V = ajusta o nome do volume
(1)
UM PEQUENO TESTE PARA A IMAGEM ISO
É possivel montar o arquivo iso como se fosse um dispositivo com o comando:
mount -t iso9660 ARQUIVOISO DIRETORIO -o loop
Sendo:
ARQUIVOISO = o arquivo gerado ao se executar mkisofs
DIRETORIO = pode ser qualquer diretório, eu normalmente crio um na minha pasta home para
esse fim especifico
Se o comando for bem sucedido, em DIRETORIO voce podera ver todos os arquivos que estão
dentro de sua imagem iso. Se nao for, cheque se voce nao precisa logar como root para fazer isso no
seu sistema, e se seu kernel esta compilado com suporte a "loopback device".
GRAVANDO EM UM, DOIS... OU TALVEZ JA NO UM :)
Depois de gerar e possivelmente testar sua imagem iso, o proximo comando é o de gravação, o qual
já foi mostrado mas nao custa repetir:
cdrecord -v dev=ATAPI:1,1,0 speed=4 arquivo.iso
Estes são os dois passos básicos para gravar um cd de dados via linha de comando. Entretanto, é
possivel fazer tudo em um único passo caso se deseje:
mkisofs -J -L -l -r -T -V VOLUME DIRETORIO | cdrecord -v fs=32m speed=4 dev=ATAPI:1,1,0 Note que o comando termina com um hífen ( - ); nao e passado o parametro -o para o mkisofs e,
assim, tampouco o nome do arquivo, pois agora a saída desse comando será a saída padrão,
redirecionada para o cdrecord através do pipe; e o parâmetro novo aqui é fs=X , sendo X o tamanho
do fifo usado pelo cdrecord para guardar os bytes que estarão sendo gravados. O valor mostrado no
exemplo, equivalente a 32M, foi o menor valor em que eu não tive problemas nos meus testes
(abaixo disso testei 8m e 16m, que resultaram numa gravação imperfeita). A documentação do
cdrecord diz que esse valor deve ser pelo menos o tamanho da memoria do dispositivo gravador e
no máximo metade da memória RAM da máquina. Respeitadas essas regras, pelo que pude
perceber, quanto mais melhor.
(2) Note que o cdrecord ainda aceita mais tres flags que podem ser usados combinados com aqueles já
mostrados:
-dummy - "finge" que faz uma gravação, mas nao liga o laser. Útil para fazer um teste antes de
realmente queimar a mídia, diminuindo o risco de perde-la por buffer underrun. Nos testes que fiz,
este flag não funcionou com o comando que grava ao mesmo tempo que gera a imagem (somente
usando imagem a partir de arquivo), mas as mensagens de erro pareceram indicar que isso é uma
limitação do meu gravador.
-eject - ejeta a midia apos a gravação
-overburn - permite gravar uma imagem maior que o tamanho oficial da mídia. Depende entre outros
fatores se o gravador suporta este recurso, e há consideráveis chances de resultar em uma
gravação defeituosa. Entretanto pode ser útil em situações, por exemplo, em que voce dispões de
uma mídia de 700M e uma imagem de 701M.
COPIANDO UM CD DE DADOS
Finalmente, se você quiser fazer uma cópia de um cd de dados, há duas maneiras de se fazer isso,
dependendo se você tem apenas uma unidade de CD que é seu gravador ou se possui um leitor e
gravador, o que também é um caso comum.
Se você possui apenas o drive do gravador na máquina, terá que criar um arquivo com a imagem
do cd a ser gravada, mas não é necessário montar o cd e utilizar o mkisofs no diretório onde voce o
montou como se poderia pensar a principio. O linux tem um comando chamado dd muito prático
nesse tipo de situação. Se o cd cuja imagem voce quer gerar estiver em /dev/cdrom (que em muitos
linuxes e um soft link para /dev/hd? ), apenas faça:
dd if=/dev/cdrom of=imagemcd.iso
(3)
Após esse comando você terá o arquivo imagemcd.iso que será uma imagem iso do cd, e que você
pode passar para o comando cdrecord como vem fazendo ate agora com aqueles gerados pelo
mkisofs.
Se, entretanto, voce tiver dois drives, ha a possibilidade de gerar uma copia 1:1 através do seguinte
comando:
cdrecord -v dev=ATAPI:1,1,0 speed=4 -isosize /dev/hdd
Sendo que /dev/hdd é o dispositivo do leitor onde esta o cd a ser copiado.
CDs REGRAVÁVEIS
O processo de gravar um CD regravável, no Linux, tem muito pouca coisa de diferente em relacao a
CD-Rs. A única diferença, realmente, é que você pode usar o mesmo CD para sobregravar seu
conteúdo quantas vezes desejar (até o limite do que a mídia suportar).
Primeiro, você terá que limpar o conteúdo do CD-RW usando também o cdrecord:
cdrecord dev=ATAPI:1,1,0 blank=fast
Depois é só usar os comandos mkisofs e cdrecord como ja explicado nas sessões anteriores.
Entretanto, você também pode fazer a "limpeza" e gravação da imagem iso num único passo:
cdrecord -v speed=4 dev=ATAPI:1,1,0 blank=fast nome_da_imagem
(5)
Sendo que nome_da_imagem é o nome e caminho para seu arquivo iso.
Aqui algumas pessoas vao me perguntar se nao dá para usar CDRW como se fosse uma unidade
de disquete ou algo similar, gravando e apagando diretamente arquivos sem precisar ficar gerando
imagens, apagando o disco e gravando de novo. A resposta, infelizmente, é que o linux ainda não
suporta nativamente esse tipo de operação devido a uma limitação imposta pelo kernel (6), que
entende unidades de CD sempre como dispositivos tipo somente leitura. Há um projeto no source
forge que objetiva compensar isso, mas hà tempos ele nao sofre atualização (o ultimo kernel
suportado é o 2.4.6), dando a impressão de que foi abandonado(7). Talvez isso seja um indício de
que os CDs regraváveis, embora sejam um avanço tecnológico recente, estejam fadados a breve
extinção por fatores tais como a popularização das pen-drives usb, muito mais rápidas de gravar e
regravar, e ao já bastante reduzido preço dos CDRs, que já faz muita gente os estar usando como
mídias descartáveis. Entretanto estou especulando aqui com base no que tenho observado, nao
dispondo de dados oficiais, mas é fato que tenho visto muito pouca gente por aí usando CDRWs
com frequência no seu dia a dia.
CDs de AUDIO
Esta aí outra espécie que não vou ficar nem um pouco chateado quando puder dar por extinta.
Como hoje muitos aparelhos de som, dos grandos aos pequenos e ai incluídos os automotivos,
suportam discos de mp3, que comportam no mesmo tipo de mídia cerca de 10 vezes mais tempo de
música que um CD de audio gravado no formato convencional, os únicos interessados em manter o
velho padrão, até onde vejo, são as gravadoras mais que preocupadas em manter os seus lucros. E
um CD de mp3 nada mais é que um CD de dados, e portanto para gravar esse tipo de CD vale todo
o procedimento descrito até aqui sem tirar nem por.
Mas vamos lá, digamos que você tenha em um diretório da sua máquina arquivos no formato wav e
queira gravar um CD de áudio com eles, um arquivo por faixa. O comando segue:
cdrecord fs=4096k -v -useinfo -dao -eject -pad -audio track1.wav ... trackN.wav
Onde track1.wav, track2.wav... trackN.wav sao arquivos de som no formato wav, um para cada faixa
do CD de audio. Infelizmente o comando cdrecord nao entende nativamente o formato mp3 (uma
pena), de forma que os mesmos terão que ser convertidos para wav como segue:
mpg123 -v -w outfile.wav infile.mp3 (8)
Finalmente, se você quiser gravar a partir de faixas estraédas de outro(s) CD(s) de áudio, terá que
primeiro ripar essas faixas do(s) CD(s) de origem. O ripador oficial do linux é um programa chamado
cdparanoia, e sua forma mais simples de utilização é o comando que segue, que vai ripar todas as
faixas de um CD de audio:
cdparanoia -B
Note que, para esse comando funcionar, o CD de audio a ser ripado deve estar no dispositivo
apontado por /dev/cdrom.
OS DEVIDOS CREDITOS
Abaixo estão as referências a todos os documentos que consultei para gerar este guia. Muito mais
que simplesmente citá-los, quero deixar aqui expresso meu agradecimento a todas as pessoas que,
antes de mim, tiveram a iniciativa de disponibilizar seu conhecimento sobre este assunto à
comunidade Linux.
(1) Essa forma de uso do mkisofs eu retirei de um script chamado make_iso, ainda hoje
disponibilizado pela Conectiva em:
http://www.conectiva.com.br/~suporte-cl/programas/cdrwtool.tgz
Note que aquele script chama tambem a flag -a, hoje obsoleta mas que o comando ainda aceita por
questoes de compatibilidade.
(2) A dica original de como gravar o cd ao mesmo tempo que cria a imagem eu retirei da man page
do cdrecord.
(3) Maiores informacoes sobre o dd podem ser encontradas em:
http://www.aplinux.com.br/mostraartigo.php?artigoid=107&artigocat=2
(4) A dica original de como fazer uma copia 1:1 de um cd foi retirada do CD-Writing-HOWTO,
disponivel em vários lugares, entre eles:
http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/CD-WritingHOWTO.html#ss4.7
Ainda que um pouco desatualizado, é um documento cuja leitura e aconselhavel, pois foi a primeira
referencia completa sobre gravação de CDs escrita e muito provavelmente a maioria dos outros
documentos aqui referenciados se basearam nele.
(5) A dica de como limpar um CDRW e fazer a gravacao num passo so eu tirei de:
http://brlinux.linuxsecurity.com.br/artigos/dicas_cdrec2.htm
(6) Vide o FAQ do driver, no projeto Linux UDF no sourceforge:
http://sourceforge.net/projects/linux-udf/
Segue, entretanto, o texto que esclarece quanto a falta de suporte de udf gravavel no linux:
As of this writing, the Linux kernel doesn't support writing to writable CDROMs of any kind - it
assumes a CDROM is read only at a low level, which isn't easy to work around. Work is under way
to fix this. In the meantime, when you mount a writable CDROM (either CDR or CDRW), you will get
a notice saying "block device is write-protected, mounting read-only", even if you specify the "-o rw"
option.
(7) http://sourceforge.net/projects/packet-cd
(8) http://www.linuxquestions.org/questions/history/3904
Fontes: www.aplinux.com.br e slackware-brasil.com.br
Marcos Azevedo
Download

Gravação de cds pela linha de comando :::