De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.

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

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


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