Script para gravar 2 (ou 4) CDs simultaneamente no Linux
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:
#!/bin/sh # 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 fi
pass="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
|