« Artigo sobre o Live CD GoblinX | Main | Sun lança nova versão do NetBeans »
dezembro 16, 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 gravação de CDs multisession e como setar o arquivo de configuração do cdrecord para facilitar a vida do usuário. Finalmente, algumas dicas interessantes. O processo orienta a configuração de um sistema Debian, mas pode ser aplicado a qualquer distribuição."
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 em dezembro 16, 2004 10:22 AM
Comentários dos leitores
»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 do...
»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 grav...
»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 po...
»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 d...
»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; d...
»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 ...
»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 ...
»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...
»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 existe...
»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 ten...
»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ã...
»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 foru...
»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, es...
»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 descu...
»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...
»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...
»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 desculp...