Índice das dicas
Script para gravar 2 (ou 4) CDs simultaneamente no Linux
Criado 26/set/2006 às 20h04 por Carlos E. Morimoto
0O K3B já superou o Nero tanto em recursos quanto em facilidade de uso. O único motivo para alguns ainda acharem que o Nero é superior, é o fato de não conhecerem ou não saberem usar todos os recursos do K3B ;).
O K3B é tão melhor que a versão Linux do Nero (ela já existe a mais de um ano, não sabia? ;) vem sendo virtualmente ignorada. Além dos próprios desenvolvedores, é possível contar os usuários nos dedos. O desinteresse é tanto, que segundo a busca do Google, na internet inteira só existem 61 referências ao link http://www.nero.com/eng/NeroLINUX.html (acabei de fazer o favor de adicionar a 62º ;).
Entretanto, um recurso ainda não disponível no K3B, que faz falta para muita gente é a possibilidade de gravar dois ou mais CDs simultaneamente, usando vários gravadores.
É possível montar máquinas com 2 ou 4 gravadores, com o objetivo de gravar rapidamente grandes quantidades de CDs (imagine o caso de um install fest, por exemplo).
Ao usar um HD IDE, a configuração ideal é deixar o HD sozinho na primeira IDE e deixar os dois gravadores como master e slave da segunda (hdc e hdd, respectivamente). Ao usar um HD SATA, você fica com as duas portas IDE disponíveis e pode instalar 4 gravadores.
Apesar do K3B ainda não oferecer esta opção, gravar dois (ou quatro) CDs simultaneamente no Linux é bem simples, basta chamar o cdrecord via linha de comando.
Se você tem dois gravadores (reconhecidos pelo sistema como /dev/hdc e /dev/hdd, por exemplo), abra dois terminais e use os dois comandos a seguir (um em cada terminal):
$ cdrecord -v -sao speed=16 dev=/dev/hdc meu-arquivo.iso
$ cdrecord -v -sao speed=16 dev=/dev/hdc meu-arquivo.iso
O "16" indica a velocidade de gravação e o "meu-arquivo.iso" é a localização para o arquivo .ISO que você deseja gravar. É possível gravar simultaneamente dois ISOs diferentes, mas você terá melhores resultados com relação ao problema do esvaziamento de buffer fazendo duas gravações do mesmo ISO.
Vamos aproveitar então para unir o útil ao agradável, transformando esta receita num script mais elaborado para gravar os dois CDs simultaneamente. Nosso script começará perguntando qual o arquivo ISO a gravar, fará a gravação usando seus dois ou quatro gravadores simultaneamente e no final verificará o MD5SUM de cada CD, permitindo que você descarte as mídias defeituosas.
Vamos começar com um "mock-up" de como será o script. Esta é a tela inicial para escolher o arquivo ISO a ser gravado:

Este é o terminal mostrando as mensagens do cdrecord durante a gravação:

Esta é a tela que compara o MD5SUM do ISO original com o de cada um dos CDs gravados, permitindo detectar erros de gravação:

Vamos então ao script. Comece lendo os meus comentários para entender como o script funciona (e aprender a fazer os seus ;). Para usar, salve o código dentro de um arquivo de texto ("grava2cd", por exemplo), marque a permissão de execução para ele (chmod +x grava2cd) e execute-o via terminal (./grava2cd) para gravar.
Script para gravar 2 CDs:
# Script simples para gravar simultâneamente, usando dois gravadores e checar o md5sum.
# Este script é apenas um exemplo. Adapte-o de acordo às suas necessiades.
# Escolhe o iso a ser gravado
ISO=`kdialog --caption "Grava2CD" --icon "configure" --getopenfilename "/home/$USER" "*.iso |Arquivos ISO"`
# Os devices dos gravadores que serão usados.
# É importante que o gravador mais rápido fique em primeiro e o mais lento em segundo:
DEV1="hdd"
DEV2="hdc"
# Gera o md5sum do iso original
mdiso=`md5sum $ISO`
# Variável para verificar o início do loop
pass="0"
# Loop eterno:
while [ "1" = "1" ]; do
# Mata qualquer instância ativa do cdrecord, só pra garantir
killall cdrecord
clear
# Mostra uma mensagem caso seja o primeiro loop e outra diferente daí em diante
if [ "$pass" = "0" ]; then
# Primeira mensagem:
echo "MD5SUM ISO = $mdiso"
echo "Pressione ENTER gravar, ou CTRL+C para abortar."
read pausa
else
# (Mensagem exibida depois de cada gravação)
md1=`cat /tmp/md5sum1`
md2=`cat /tmp/md5sum2`
# Limpa os temporários e mostra os md5sums para que o operador verifique:
rm -f /tmp/md5sum1 /tmp/md5sum2
clear
echo "MD5SUM ISO = $mdiso"
echo "MD5SUM $DEV1 = $md1"
echo "MD5SUM $DEV2 = $md2"
echo ''
echo "Pressione ENTER gravar mais dois CDs, ou CTRL+C para abortar."
read pausa
fi
pass="1"
# Recolhe a bandeja dos dois gravadores:
eject -t /dev/hdc
eject -t /dev/hdd
# Escreve os scripts de gravação:
echo "cdrecord -v -sao speed=16 dev=/dev/$DEV1 $ISO; eject /dev/$DEV1; eject -t /dev/$DEV1; md5sum /dev/$DEV1 > /tmp/md5sum1; eject /dev/$DEV1" > /tmp/mkcd1
echo "cdrecord -v -sao speed=16 dev=/dev/$DEV2 $ISO; eject /dev/$DEV2; eject -t /dev/$DEV2; md5sum /dev/$DEV2 > /tmp/md5sum2; eject /dev/$DEV2" > /tmp/mkcd2
chmod +x /tmp/mkcd1 /tmp/mkcd2
# Grava. O script do gravador mais rápido corre em background. O script do gravador mais lento trava o terminal,
# evitando que o script prossiga até que a gravação termine.
/tmp/mkcd1 &
/tmp/mkcd2
# Pausa adicional, só pra garantir que os dois terminaram:
sleep 10
clear
# Fim do loop. Volta ao início, mostrando os md5sums e pedindo confirmação para gravar mais.
done
# Este comando nunca vai ser executado, pois o script só termina quando é pressionado CTRL+C. O "exit 0" é só para seguir o padrão:
exit 0
Script para gravar 4 CDs:
#!/bin/sh
# Script simples para gravar simultâneamente, usando quatro gravadores e checar o md5sum.
# Este script é apenas um exemplo. Adapte-o de acordo às suas necessiades.# Escolhe o iso a ser gravado
ISO=`kdialog --caption "Grava4CD" --icon "configure" --getopenfilename "/home/$USER" "*.iso |Arquivos ISO"`# Os devices dos gravadores que serão usados.
# É importante que o gravador mais lento fique em último (DEV4):
DEV1="hdd"
DEV2="hdc"
DEV3="hdb"
DEV4="hda"# Gera o md5sum do iso original
mdiso=`md5sum $ISO`# Variável para verificar o início do loop
pass="0"# Loop eterno:
while [ "1" = "1" ]; do# Mata qualquer instância ativa do cdrecord, só pra garantir
killall cdrecord
clear# Mostra uma mensagem caso seja o primeiro loop e outra diferente daí em diante
if [ "$pass" = "0" ]; then
# Primeira mensagem:
echo "MD5SUM ISO = $mdiso"
echo "Pressione ENTER gravar, ou CTRL+C para abortar."
read pausa
else
# (Mensagem exibida depois de cada gravação)
md1=`cat /tmp/md5sum1`
md2=`cat /tmp/md5sum2`
md3=`cat /tmp/md5sum3`
md4=`cat /tmp/md5sum4`
# Limpa os temporários e mostra os md5sums para que o operador verifique:
rm -f /tmp/md5sum*
clear
echo "MD5SUM ISO = $mdiso"
echo "MD5SUM $DEV1 = $md1"
echo "MD5SUM $DEV2 = $md2"
echo "MD5SUM $DEV3 = $md3"
echo "MD5SUM $DEV4 = $md4"
echo ''
echo "Pressione ENTER gravar mais dois CDs, ou CTRL+C para abortar."
read pausa
fipass="1"
# Recolhe a bandeja dos 4 gravadores:
eject -t /dev/hda
eject -t /dev/hdb
eject -t /dev/hdc
eject -t /dev/hdd# Escreve os scripts de gravação:
echo "cdrecord -v -sao speed=16 dev=/dev/$DEV1 $ISO; eject /dev/$DEV1; eject -t /dev/$DEV1; md5sum /dev/$DEV1 > /tmp/md5sum1; eject /dev/$DEV1" > /tmp/mkcd1
echo "cdrecord -v -sao speed=16 dev=/dev/$DEV2 $ISO; eject /dev/$DEV2; eject -t /dev/$DEV2; md5sum /dev/$DEV2 > /tmp/md5sum2; eject /dev/$DEV2" > /tmp/mkcd2
echo "cdrecord -v -sao speed=16 dev=/dev/$DEV3 $ISO; eject /dev/$DEV3; eject -t /dev/$DEV3; md5sum /dev/$DEV3 > /tmp/md5sum3; eject /dev/$DEV3" > /tmp/mkcd3
echo "cdrecord -v -sao speed=16 dev=/dev/$DEV4 $ISO; eject /dev/$DEV4; eject -t /dev/$DEV4; md5sum /dev/$DEV4 > /tmp/md5sum4; eject /dev/$DEV4" > /tmp/mkcd4
chmod +x /tmp/mkcd*# Grava. Três dos scripts correm em background. O script do gravador mais lento trava o terminal,
# evitando que o script prossiga até que a gravação termine.
/tmp/mkcd1 &
/tmp/mkcd2 &
/tmp/mkcd3 &
/tmp/mkcd4
# Pausa adicional, só pra garantir que todos terminaram:
sleep 15
clear# Fim do loop. Volta ao início, mostrando os md5sums e pedindo confirmação para gravar mais.
done# Este comando nunca vai ser executado, pois o script só termina quando é pressionado CTRL+C. O "exit 0" é só para seguir o padrão:
exit 0
Sem comentáriosPor Carlos E. Morimoto. Revisado 26/set/2006 às 20h04

Comentários