« Artigo sobre o Live CD GoblinX | Main | Sun lança nova versão do NetBeans »
quinta-feira, 16 de dezembro de 2004
Queimando CDs de dados na prática
Joel Franco (joel at oryonsystems.com.br) enviou o artigo abaixo, que "mostra como acessar um CD-RW instalado no Linux, e gravar CDs de dados através da linha de comando, com utilitários básicos como o mkisofs e o cdrecord. É mostrada também a ... (Ler na íntegra)QUEIMANDO CDs DE DADOS NA PRÁTICA
Autor: Joel Franco (joel at oryonsystems.com.br)
INTRODUÇÃO
BASE TEÓRICA
O processo envolve basicamente duas partes: a geração de uma imagem com o sistema de arquivos ISO-9660 (que é o formato padrão de gravação de imagem de CD) e a gravação no CD desta imagem.
A primeira é feita utilizando o utilitário "mkisofs" que pode gerar o sistema de arquivos ISO-9660/Joliet tanto em um arquivo ".iso" como jogando a mesma na saída padrão, onde se pode conectar o "cdrecord".
A segunda é feita utilizando o utilitário cdrecord que grava em CD os dados recebidos, utilizando multisession ou não.
Com multisession é possível gravar parcialmente um CD e noutro momento gravar outra parte (e assim sucessivamente), preenchendo o espaço do CD gradualmente. Desse jeito, se aproveita mais a mídia de CD quando não se vai preenchê-la completamente.
No kernel 2.4, usava-se emulação de SCSI para a gravação de CDs, visto que não era possível fazer isto com o módulo ide-cd. No kernel 2.6, se pode tanto gravar CDs usando a emulação SCSI tradicional, como usando o módulo ide-cd, agora com suporte para gravação de CDs. A partir do kernel estável 2.6.8, o cdrecord, mesmo como suid de root, não tem mais permissão completa de manipulação do processo de gravação e portanto o cdrecord deve ser usado somente pelo root (também via sudo ou similar), embora nem todas as operações exigam isto.
Para acesso a gravação de CDs, você deve ser root ou ter acesso rw ao grupo do device no /dev de acesso ao dispositivo de CDs, que pode ser o /dev/hdX (IDE) ou o /dev/scdX (SCSI), onde X = letra ou numero do device. No debian, esse grupo se chama "cdrom". Neste texto, são dados os exemplos com devices /dev/hdX, mas vc pode substituir pelo device SCSI se for o seu caso.
É usado neste texto muito o utilitário sudo para rodar processos como root, mas todo o processo pode ser feito diretamente como root, omitindo o termo "sudo" em todos os comandos. Mas não se acostume a fazer as coisas no Linux como root: esse é um costume que deveria ser evitado para manter a segurança do seu sistema, embora geralmente facilite um pouco as coisas.
DETECTANDO O DEVICE DO CDRW
1) Se estiver usando emulação SCSI, ou device for SCSI mesmo:
$ cdrecord -scanbus
Vc verá algo como o seu gravador de CD e um nro associado, por exemplo "0,0,0".
2) No caso de acesso direto via o device /dev/hdX, faça:
$ dmesg | grep hd
Vc vai achar o device do seu gravador de cd no meio desse conteúdo, geralmente hdb, hdc ou hdd.
GRAVANDO UM DIRETORIO NA ARVORE CORRENTE
Para gravar o diretorio "meu_cd":
$ mkisofs -J -r meu_cd/ | sudo cdrecord -v -eject dev=/dev/hdc -
mkisofs:
-J gera extensões Joliet
-r gera extensões Rock Ridge
meu_cd/ diretório na árvore corrente com o conteúdo a ser gravado.
sudo: roda o processo a seguir como root.
cdrecord:
-v verbose
-eject ejeta o disco no final do processo
dev device onde será gravado o CD.
- indica que a imagem que será gravada será lida do entrada padrão, ou seja, da saída do mkisofs.
ps: o uso do "dev" pode ser omitido se o arquivo de configuração informar o device default de gravação, como é mostrado nas dicas abaixo.
GRAVANDO UM DIRETORIO NA ARVORE CORRENTE, COM MULTISESSION
Para gravar o diretorio "meu_novo_cd" quando a mídia ainda está virgem:
$ mkisofs -J -r meucd/ | sudo cdrecord -v -eject dev=/dev/hdc -multi -
Para gravar as sessões adicionais, coloque a midia já gravada:
$ cdrecord -msinfo
0,234
Isso lerá o indice da ultima sessão gravada num CD (ainda não fechado). Esse número (no caso "0,234") será utilizado para gravar a próxima sessão:
$ mkisofs -J -r -C 0,234 -M /dev/hdc meu_novo_cd/ | sudo cdrecord -v -eject dev=/dev/hdc -multi -
Isso queima a próxima session no CD atual. Isto pode ser feito sucessivamente até terminar o CD com várias sessões.
Quando você gravar a ultima sessão do CD, você deve omitir o "-multi" dos argumentos do cdrecord na gravação da última imagem. Isto fechará o CD.
DICAS
1) Uma opção interessante do mkisofs é a "-graftpoints":
$ mkisofs -J -r -graftpoints nova_imagem/=novo_cd/ novo_arquivo.txt=arquivo.txt
Isso vai gerar uma imagem onde o diretorio corrente novo_cd será gravado como "nova_imagem" no cd e o arquivo corrente arquivo.txt será gravado como novo_arquivo.txt.
2) Para limpar uma mídia de CD-RW antes de regravá-la novamente.
$ sudo cdrecord -v -eject blank=fast dev=/dev/hdc
3) Configurando um arquivo de configuração global do cdrecord.
No Debian Sarge em /etc/default/cdrecord
o Altere o CDR_DEVICE para um nome qualquer, como "custom".
o Insira a linha como
custom= ATAPI:/dev/hdc -1 -1 ""
Autor: Joel Franco (joel at oryonsystems.com.br)
Publicado por brain às 10:22
Comentários dos leitores
(Termos de Uso)
» Comentário de =welrbraga= ( $ipip="200.20.168.35"; $partes = explode(".", $ipip); echo "$partes[0].$partes[1].$partes[2].xxx"; ?>) em 16/12 10:48
Ficou legal o seu artigo!
A uns dois meses atrás eu precisei desatas informações e quebrei a cabeça para encontrar. Depois de muito buscar no google e nas páginas do man e do info acabei chegando a esse resultado e criei um script para facilitar a minha vida.
» Comentário de Patola ( $ipip="167.1.158.7"; $partes = explode(".", $ipip); echo "$partes[0].$partes[1].$partes[2].xxx"; ?>) em 16/12 11:12
Sugestão:
Coloque também como gravar DVDs na linha de comando. Basicamente você vai trocar o comando 'cdrecord' pelo comando 'growisofs' da suíte dvd+rw-tools (aham! É este comando mesmo, apesar do nome). Claro, com parâmetros diferentes.
» Comentário de fl0cker ( $ipip="201.9.227.96"; $partes = explode(".", $ipip); echo "$partes[0].$partes[1].$partes[2].xxx"; ?>) em 16/12 13:57
muito bom mesmo o artigo, uma opção que poderia ser incluida também é a burnfree (--driveropts=burnfree), habilitando a proteção contra buffer underrun, mas acredito que quem mais utiliza essa proteção são outras pessoas... =)
» Comentário de De novo? ( $ipip="206.221.125.53"; $partes = explode(".", $ipip); echo "$partes[0].$partes[1].$partes[2].xxx"; ?>) em 16/12 14:45
Outro tutorial desse? Qual é a diferença desse tutorial para os vários outros que eu já vi passar por aqui? Já vi vários ensinando a gravar CDR pela linha de comando nesse site.
» Comentário de Augusto Campos ( $ipip="200.252.157.100"; $partes = explode(".", $ipip); echo "$partes[0].$partes[1].$partes[2].xxx"; ?>) em 16/12 14:49
E você acha ruim?
» Comentário de Morvan ( $ipip="200.164.107.22"; $partes = explode(".", $ipip); echo "$partes[0].$partes[1].$partes[2].xxx"; ?>) em 16/12 15:17
O "DeNovo" me parece um pouco amofinado; deveria, ao meu ver, maldizer a falta de conteúdo, e não a sua profusão; vejo como lastimável, num sítio de qualidade como este, muito mais a enxurrada de nomes estranhos, comentários apócrifos (tenho uma especial desaprovação a este tipo de manifestação!) e gente se fazendo passar por outrem. Puxa, este artigo do colega supra não me ajuda diretamente; mas, a quanta gente não o fará? Viva a luz, não maldiga a escuridão...
» Comentário de iagheR ( $ipip="200.215.125.243"; $partes = explode(".", $ipip); echo "$partes[0].$partes[1].$partes[2].xxx"; ?>) em 17/12 02:27
soh n ensina gravar a partir de 1 iso jah existente, q eh oq eu preciso... =///
alguem ajuda?
» Comentário de De novo? ( $ipip="206.221.125.53"; $partes = explode(".", $ipip); echo "$partes[0].$partes[1].$partes[2].xxx"; ?>) em 17/12 08:42
Augusto, não é que eu ache ruim. Mas isso parece desorganização. Milhões de tutoriais, incompletos. Eu acho que seria melhor se os já existentes fossem atualizados e complementados. Na minha opinião seria melhor que a criação de um outro tutorial do zero, incompleto. Desses já existem muitos. Minha opinião. E eu gostaria que a minha opinião fosse respeitada.
» Comentário de Marcelo Vivan Borro ( $ipip="200.171.249.99"; $partes = explode(".", $ipip); echo "$partes[0].$partes[1].$partes[2].xxx"; ?>) em 17/12 09:19
De novo, sua opinião seria mais respeitada se apontasse o que julga ser os "defeitos" do tutorial.
Por exemplo, está incompleto em relação a que?
O que você sugeriria ao autor para melhorar o tutorial?
Sugerir melhorias e contribuindo para um resultado melhor é diferente de simplesmente postar uma mensagem do tipo "achei ruim e pronto".
» Comentário de pedr0 ( $ipip="200.184.189.132"; $partes = explode(".", $ipip); echo "$partes[0].$partes[1].$partes[2].xxx"; ?>) em 17/12 09:25
iagheR,
para gravar de um iso existente , ao inves de criar o iso e ja gravar como ele faz
mkisofs -J -r meucd/ | sudo cdrecord -v -eject dev=/dev/hdc -multi -
substitua o tracinho final do comando cdrecord pelo mone do iso :
sudo cdrecord -v -eject dev=/dev/hdc -multi nome.iso
e o resto como ele explica no texto .
» Comentário de Joel Franco ( $ipip="200.206.132.181"; $partes = explode(".", $ipip); echo "$partes[0].$partes[1].$partes[2].xxx"; ?>) em 17/12 09:43
Patola: valeu. Tava quebrando a cabeça tentando achar um modo de gravar as coisas em DVD. Já sei mais ou menos o caminho das pedras agora :)
flocker: nao conhecia na linha de comando, mas costumo ativar no arquivo de conf. do cdrecord. valeu pela dica tbem.
De novo?: Entendo o seu lado, mas acho q vc precisa ler um artigo bem legal: http://www.catb.org/~esr/writings/cathedral-bazaar/cathedral-bazaar/
iagHer: cdrecord -v -eject minha_iso.iso
[]s
» Comentário de Augusto Campos ( $ipip="200.101.233.243"; $partes = explode(".", $ipip); echo "$partes[0].$partes[1].$partes[2].xxx"; ?>) em 17/12 10:16
"De Novo", se você quiser lançar uma versão atualizada de algum tutorial, ou alguma versão condensada de vários deles, não deixe de entrar em contato comigo. Se quiser o endereço do autor de algum deles para que você possa contribuir com ele, eu talvez possa te ajudar também.
» Comentário de Itamar ( $ipip="200.168.249.19"; $partes = explode(".", $ipip); echo "$partes[0].$partes[1].$partes[2].xxx"; ?>) em 17/12 10:34
Desculpe perguntar isso aqui e não no forum, mas já que é o assunto em voga, é possível continuar uma gravação iniciada em multisessão, que foi iniciada em um computador diferente com programa diferente? Algo como alguém que tenha feito algo com Nero ou Easy, eu posso complementar gravando mais itens com o uso do cdrecord?? Jé tentei isso algumas vezes, apenas como curiosidade, e nunca consegui.
» Comentário de Augusto Campos ( $ipip="200.101.233.243"; $partes = explode(".", $ipip); echo "$partes[0].$partes[1].$partes[2].xxx"; ?>) em 17/12 11:06
Itamar, se o CD está com sessão aberta, esta sessão deve poder ser continuada por qualquer programa, pois o comportamento para isto é padrão. Eu gravo CDs com o K3B, e já continuei muitas sessões em CDs que foram gravados por outros softwares. O procedimento para fazer isto com o cdrecord eu não sei.
» Comentário de Itamar ( $ipip="200.168.249.19"; $partes = explode(".", $ipip); echo "$partes[0].$partes[1].$partes[2].xxx"; ?>) em 17/12 12:34
Obrigado pela atenção e mais uma vez desculpe usar os comentários em vez do fórum, mas obrigado pela dica. Vou tentar identificar isso, ou tentar achar algum material disponível, e se conseguir posto novamente como se deve. Valeu pela dica e a todos um excelente fim de ano e boas festas
» Comentário de De novo? ( $ipip="206.221.125.53"; $partes = explode(".", $ipip); echo "$partes[0].$partes[1].$partes[2].xxx"; ?>) em 17/12 15:13
Marcelo Vivan Borro, aqui mesmo tem vários exemplos do que falta no tutorial. Como continuar um CD com sessão aberta, como gravar ISO já criada, etc.
Augusto, infelizmente eu não uso o cdrecord, portanto não tenho conhecimento técnico para alterar esse tutorial.
Vocês não entenderam o que eu quis dizer. Eu não estou achando ruim o tutorial. Parabéns ao cara que fez. Ele manja muito mais do que eu. O que eu quero dizer é que esse tipo de esforço as vezes acaba sendo repetitivo e, portanto, desperdiçado.
Não me levem a mal. Se eu tivesse conhecimento, com certeza eu ajudaria na criação de tutoriais como esse.
Joel Franco, eu vou ler o texto inteiro mais tarde, mas a introdução do testo já me despertou interesse.
» Comentário de De novo? ( $ipip="206.221.125.53"; $partes = explode(".", $ipip); echo "$partes[0].$partes[1].$partes[2].xxx"; ?>) em 17/12 19:06
* "texto", não "testo".
Me desculpem o erro.
» Comentário de Eu ( $ipip="200.165.173.213"; $partes = explode(".", $ipip); echo "$partes[0].$partes[1].$partes[2].xxx"; ?>) em 17/12 19:30
"Me desculpem o erro."
"Me desculpem" não, "Desculpem-me", pois não se começa frases com pronome oblíquo.
O formulário de comentários está desativado devido à mudança de sistema de gerenciamento de conteúdo.