Olá companheiros e companheiras,
Depois de muito sofrimento ao realizar backup com a fita DAT, resolvi escrever esta dica passando resolução dos problemas que tive.
Depois de escrever meu script para realizar backup e agendá-lo no crontab, comecei a ter dor de cabeça.
Problema/Solução 1
Primeiro, criei um arquivo texto contendo todos os diretórios que deveriam ser salvos. O conteúdo do arquivo (chamado arquivos_backup) ficou assim:
/etc
/var/log
/home
/samba/dados
Ao executar o comando de backup:
# tar -cvf /dev/st0 -T /root/backup/arquivos_backup
Porém, ele fazia apenas o backup do diretório /etc! Descobri que isto estava acontecendo por ter feito o "arquivo_backup" no bloco de notas do Windows e o
Linux não estava entendendo o formato do arquivo. Para resolver, bastou executar o comando:
# dos2unix arquivos_backup
Pronto, agora o script faz o backup de todos os diretórios.
Problema/Solução 2
Corrigido o problema com o arquivo que contém os diretórios para backup, configurei o crontab para executar o script às 02:00:
00 02 * * 1-5 root tar -cvf /dev/st0 -T /root/backup/arquivos_backup
No dia seguinte verifiquei que ainda haviam erros e o script não foi executado. Descobri que tinha que colocar o caminho completo para onde se encontra o comando tar (/bin/tar) e pronto! Backup feito, ou melhor, quase feito.
Problema/Solução 3
Depois de executar o comando:
# tar -tvf /dev/st0 > conteudo.log
para listar o conteúdo da fita DAT, descobri que ele só estava fazendo backup ate /var/log, depois mais nada. Não continha /home e nem /samba/dados/.
Depois de uma semana quebrando a cabeça, consegui achar o problema. Estava executando o comando tar com a opção "v" (de verbose, ou seja, mostre-me o que acontece). Como o comando executa no background (por estar agendado no crontab), acredito que algum buffer estava estourando. As possíveis soluções são tirar o "v" do comando ou jogar a saída do verbose para o /dev/null, que foi a minha escolha. O agendamento no crontab ficou assim:
#00 02 * * 1-5 root /bin/tar -cvf /dev/st0 -T /root/backup/arquivos_backup > /dev/null 2> /home/camolez/logbackup.log
No final joguei tudo que é resultado "positivo" para /dev/null. Se preferir acompanhar de perto, redirecione este resultado para um arquivo. Fiz isso na última instância, jogando os possíveis resultados de erro para um arquivo chamado logbackup.log na minha área.
Para ter uma melhor aparência no resultado final do arquivo logbackup.log e também acompanhar o tempo entre o início e fim do backup, fiz um script:
#!/bin/sh
#***************************************************************
# Arquivo bash backup da fita DAT
# Criado por......: Daniel C. Camolez - 25/05/2007
# Alterado por....:
#***************************************************************
# Cabeçalho do backup
/bin/echo > /home/camolez/logbackup.log
/bin/echo "*** Inicio do backup ***" >> /home/camolez/logbackup.log
/bin/date >> /home/camolez/logbackup.log
/bin/echo >> /home/camolez/logbackup.log
# fazendo o backup dos dados
/bin/echo "Enviando para fita DAT" >> /home/camolez/logbackup.log
/bin/echo >> /home/camolez/logbackup.log
/bin/tar -cvf /dev/st0 -T /root/backup/arquivos_backup 1> /dev/null 2>> /home/camolez/logbackup.log
/bin/echo >> /home/camolez/logbackup.log
# ejetando a fita DAT
/bin/mt -f /dev/st0 eject 2>> /home/camolez/logbackup.log
# Rodapé do backup
/bin/echo >> /home/camolez/logbackup.log
/bin/echo ">>> Fim do backup <<<" >> /home/camolez/logbackup.log
/bin/date >> /home/camolez/logbackup.log
Bom, é isso aí. Passei por alguns sofrimentos por falta de leitura acredito (leiam os manuais). Está aí, resolvi colocar esta dica para quem está começando a trabalhar com backup em fita DAT.
Abraços a todos,
Camolez