você está aqui: Home  → Arquivo de Mensagens Workshop Gratuito: Os Segredos do Shell, com o Prof. Julio Neves

Backup em CD multi-sessão

Colaboração: Carlos Jordão

Data de Publicação: 19 de Fevereiro de 2007

Era uma vez a necessidade de criar backups...

... mas tinha que ser em CD-RW. Sem problemas. Era só usar Xcdroast, ou um outro que gravasse CD. Criar um manual de onde clicar para o usuário fazer seu backup.

Supresa! Nenhum desses programas fôra instalado.

O lance foi criar esse script, que é executado no crontab do usuário. Aqui usamos um programinha chamado zenity, que abre uma telinha de dialog. É possível rodar a partir do cron aplicativos gráficos? É sim, mas é preciso que naquele momento o X esteja rodando (é claro), e que tenha permissão de conexão com ele. O nosso caso é mais simples, porque o usuário que fica o dia inteiro logado na máquina é o mesmo que faz o backup, então é um problema a menos. Basta editar o crontab:

$ crontab -e
DISPLAY=":0.0"
0 16 * * * /home/usuario/backup-script.sh

Salve e saia. Isso terá instalado o cron para fazer o backup automático às 16:00 todos os dias. Voltando à escolha do zenity: pode ser outro como o xmessage, mais cru, menos refinado e tão bom quanto (talvez até mais flexível), ou gdialog. Se fosse interface texto, ficaria difícil a execução no cron e a intervenção do usuário. Como teríamos que pedir ao usuário inserir o CD, então, optamos por algo que fosse o mais agradável.

Aqui o difícil foi achar as opções que fizessem funcionar um cd multi-sessão e pudesse ser lido mesmo no windows. Como desconhecíamos quais eram os quesitos mínimos para isso acontecer, fomos testando algumas opções (também nunca tínhamos gravado através do cdrecord). Por isso, talvez esse não seja a melhor forma, mas é a forma que melhor funcionou.

Segue o script:

#!/bin/bash
GRAVADOR=/dev/hda
DIR_BACKUP=/backup/dir
HOME_B=/home/usuario/backup

eject
/usr/bin/zenity --info --text="Por favor, coloque o CD para o backup\nE em seguida clique no botao"
eject -t

data=`date '+%d%m%Y-%H%M'`
echo "iniciando backup do dia: " $data
cd $HOME_B
echo "movendo backups anteriores para pasta old"
if [ ! -d old ]; then
    mkdir old
    fi
    mv *.tar.gz old/

    backup=`echo backup-$data`


    echo -n "compactando... "
    tar czf $backup.tar.gz DIR_BACKUP 2>/dev/null
    echo "[pronto]"


    echo "Identificando última sessão..."

    sessao=`cdrecord -msinfo 2>/dev/null`

    echo "Gerando iso..."

    rm -f *.iso
    if [ "X$sessao" == "X" ]; then
        echo "... em nova sessao."
    mkisofs -q -iso-level 4 -T -o $backup.iso -R -J $backup.tar.gz
    else
        echo "... usando sessao ($sessao)"
    mkisofs -q -iso-level 4 -T -C $sessao -check-oldnames -dev $GRAVADOR -o $backup.iso -R -J $backup.tar.gz
    fi

    echo "Gravando..."
    cdrecord -multi -eject -tao $backup.iso

    zenity --info --text "Backup efetuado"

Agora, faltam algumas perfumarias, como detecção automática de espaço para sabermos se o disco que o usuário colocou tem espaço para gravar mais um backup, pedir pra trocar o cd ou apagar (caso seja um CD-RW)... mas isso fica para uma outra vez :)



Veja a relação completa dos artigos de Carlos Jordão