ct

    Script para gravar 2 (ou 4) CDs simultaneamente no Linux

    Dicas do Guia do Hardware

    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. Apesar disso, gravar dois (ou quatro) CDs simultaneamente no Linux é bem simples, basta chamar o cdrecord via linha de comando. Vamos aproveitar então para unir o útil ao agradável, transformando esta receita num script mais elaborado para gravar os dois CDs simultaneamente.Carlos E. Morimoto
    26/09/2006


    O 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:

    img1

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

    img2

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

    img3

    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




    » Gostou do texto? Veja nossos livros impressos

    ... ou use a busca para localizar outros artigos relacionados:

cb
Livros de Carlos E. Morimoto HOME