Backup

De ULBwiki

Revisado e escrito por Kamus Hadenes

Tabela de conteúdo

Backup

O backup é talvez a parte mais difícil de qualquer sistema. É sempre necessário ter um, mas as formas de realizar tal backup são muitas, deixando o usuário menos experiente bastante confuso. Aqui irei descrever várias formas de backup, assim, você poderá adapta-las à sua necessidade.

Backup Mensal

Esta é a forma de backup que eu considero a mais prática, pois faz tudo de forma automatizada sem necessidade de intervenção do usuário. É um simples script em sh que deve ser colado num novo arquivo em /etc/cron.monthly, dando em seguida permissões de execução. O resto é automatizado.

#!/bin/sh                                                          
 ls -d /backup/ServerBackup                                        
 if [ $? -ne 0 ];then                                              
 mkdir -p /backup/ServerBackup/{Jan,Fev,Mar,Abr,Mai,Jun,Jul,Ago,Set,Out,Nov,Dez}
  if [ $? -ne 0 ];then                                                          
     echo " falha na tentativa de criar diretórios, requer poderes de root"     
     exit 1                                                                     
  fi                                                                            
 fi                                                                             
 if [ -f /backup/ServerBackup/backuptodo.txt ]; then                            
 #seus comandos aqui quando existir o arquivo.                                  
 echo "tudo OK iniciando o backup."                                             
 else                                                                           
 #seus comandos aqui quando não existe o arquivo.                               
 echo "falta arquivo /backup//ServerBackup/backuptodo.txt lista de diretorios para backup."
 echo "provicencie o arquivo ou correção no caminho do mesmo"                              
 exit 1                                                                                    
 fi                                                                                        
 MMES=$(echo `date +%b`)                                                                   
 case $MMES in                                                                             
 1) MMES=Jan ;;                                                                            
 2) MMES=Fev ;;                                                                            
 3) MMES=Mar ;;                                                                            
 4) MMES=Abr ;;                                                                            
 5) MMES=Mai ;;                                                                            
 6) MMES=Jun ;;                                                                            
 7) MMES=Jul ;;                                                                            
 8) MMES=Ago ;;                                                                            
 9) MMES=Set ;;                                                                            
 10) MMES=Out ;;                                                                           
 11) MMES=Nov ;;                                                                           
 12) MMES=Dez ;;                                                                           
 esac                                                                                      
 cd /backup/ServerBackup/$MMES                                                             
 rm -rf /backup/$MMES/*                                                                    
 while read LINHA ; do                                                                     
 MDIR=`echo $LINHA | sed "s|/||g"`
 MMES=`date +'-%d-%b-%Y.tar.gz'`
 MARQUIVO=`echo $MDIR$MMES`
 NICE=15
 nice -n$NICE tar czf $MARQUIVO $LINHA
 echo "retorno de tar $MARQUIVO $LINHA $? " >> /backup/ServerBackup/logbackup.txt
 echo `date` >> /backup/ServerBackup/logbackup.txt
 done < /backup/ServerBackup/backuptodo.txt
 # backup do resto do home, pegar eventuais diretórios novos.
 #/bin/tar czf homeoutros-`date +%d%m%y`.tar.gz /home --exclude-from=/backup/dirhome.txt
 # backup do /tmp
 /bin/tar czf dirtemp-`date +%d%m%y`.tar.gz /tmp
 # remover arquivos com mais de 365 dias
 /usr/bin/find /backup/ServerBackup/ -name "*.tar.gz" -mtime +182 -exec rm {} \;
 # acrescente seus comandos para desligar, limpar lixeira e etc...
 MMES=$(echo `date +%b`)
 case $MMES in
 1) MMES=Jan ;;
 2) MMES=Fev ;;
 3) MMES=Mar ;;
 4) MMES=Abr ;;
 5) MMES=Mai ;;
 6) MMES=Jun ;;
 7) MMES=Jul ;;
 8) MMES=Ago ;;
 9) MMES=Set ;;
 10) MMES=Out ;;
 11) MMES=Nov ;;
 12) MMES=Dez ;;
 esac
 growisofs -Z /dev/dvd -R -J /backup/ServerBackup/$MMES/*
 exit 0

Lembre-se de corrigir os paths. Crie também, no diretório /backup/ServerBackup ( não necessariamente neste diretório, mas no diretório que você escolheu para se realizar o backup, onde serão criadas as pastas com os nomes dos meses) um arquivo de nome backuptodo.txt, que deverá conter os diretórios que serão copiados. Exemplo:

 /bin
 /cdrom
 /dev
 /etc
 /home
 /initrd
 /initrd.img
 /lib
 /opt
 /root
 /sbin
 /selinux
 /srv
 /tmp
 /usr
 /var
 /vmlinuz

Para restaurar o backup é ainda mais simples:

 sudo tar -xvpzf /nomedobackup.tar.gz -C /

Backup diário

Retirado deste link aqui

Este tipo de backup é útil para quem precisa compactar uma quantidade muito grande de arquivos diariamente sem perda de tempo. O método utilizado para compressão é o "TAR.GZ", que suporta (compactado) tamanhos superiores a 2 GB, diferentemente de arquivos "ZIP" que se corrompem.

Para começar, antes de mais nada precisaremos definir um local para guardar os scripts que serão criados.

Crie a pasta /script-backup:

# mkdir /script-backup
# cd /script-backup

Para cada dia da semana criei uma pasta dentro do meu drive (HD externo) e dei permissão total.

Antes precisei montar a partição (sdb1 é onde está meu HD externo ligado na USB):

 # mount /dev/sdb1 /backup
 # mkdir /backup/segunda
 # chmod 777 /backup/segunda
 # mkdir /backup/sexta
 # chmod 777 /backup/sexta
 # umount /dev/sdb1

Esta é uma forma mais organizada de armazenar os backups. Crie as pastas de acordo com a necessidade, colocando o nome de acordo com o dia da semana.

Para criar os scripts, abra seu editor de textos (no meu caso uso o VIM) e acrescente o código abaixo. Salve dentro da pasta /script-backup:

 # vim bkp-segunda

Faça este mesmo procedimento para os outros dias necessários. Como meu backup é diferenciado para cada dia da semana, fiz o mesmo procedimento 5 vezes (de segunda a sexta).

OBS.: Lembre-se de alterar a variável "DIA" que está na linha 6 para não correr o risco de apagar dados por engano.

#######################################
 # SCRIPT BACKUP DIÁRIO SERVIDOR DADOS #
 #######################################
 # DEFINE AS VARIÁVEIS QUE SERÃO UTILIZADAS
 DIA=segunda-feira
 DATA=`date +%d-%m-%Y-%H.%M`
 # MONTA O PONTO DE MONTAGEM /BACKUP
 mount /dev/sdb1 /backup
 montado=`mount | grep /backup`
 # SE A MONTAGEM NÃO ESTIVER UP ENTÃO FECHA, CASO CONTRÁRIO REALIZA O BACKUP
 if [ -z "$montado" ]; then
     exit 1
 else
 # APAGA OS BACKUPS ANTIGOS DO MESMO DIA DA SEMANA
 rm -rf /backup/"$DIA"/*.tar.gz
 # COMPACTA TODO O CONTEÚDO DAS PASTAS DENTRO DE /DADOS INDIVIDUALMENTE.
 tar -zcvf /backup/"$DIA"/contabil-"$DATA".tar.gz /dados/contabil/
 tar -zcvf /backup/"$DIA"/diretoria-"$DATA".tar.gz /dados/diretoria/
 tar -zcvf /backup/"$DIA"/financeiro-"$DATA".tar.gz /dados/financeiro/
 tar -zcvf /backup/"$DIA"/fiscal-"$DATA".tar.gz /dados/fiscal/
 tar -zcvf /backup/"$DIA"/pessoal-"$DATA".tar.gz /dados/pessoal/
 tar -zcvf /backup/"$DIA"/vendas-"$DATA".tar.gz /dados/vendas/
 # DESMONTA O PONTO DE MONTAGEM /BACKUP
 umount /backup
 fi
 # FIM DAS INSTRUÇÕES

Para tornar os scripts executáveis faça o seguinte:

 # chmod +x bkp-segunda 

Agendando a execução dos scripts

Agora vem a parte de agendar a execução dos scripts criados. Estou partindo do pressuposto que seu Linux já tenha o agendador de tarefas cron instalado e funcionando perfeitamente.

Edite o arquivo crontab:

 # vi /etc/crontab 
# run-parts
 # NESTA CONFIGURAÇÃO O BACKUP É REALIZADO À 1:00H DA MADRUGADA
 # (HORÁRIO EM QUE O SERVIDOR FICA OCIOSO), TODOS OS DIAS DO MÊS,
 # TODOS OS MESES.
 00 1 * * 1 root /script-backup/bkp-segunda
 00 1 * * 2 root /script-backup/bkp-terca
 00 1 * * 3 root /script-backup/bkp-quarta
 00 1 * * 4 root /script-backup/bkp-quinta
 00 1 * * 5 root /script-backup/bkp-sexta
 # DIA DA SEMANA 0-6 (O "0" É DOMINGO, "1" SEGUNDA, "2" TERCA...)

Feito isso salve o mesmo e veja os resultados. Vale lembrar que as opções são infinitas para se realizar backup. Esta que demonstrei é bem simples e serve para backupear os arquivos dos setores da empresa onde trabalho. Como tenho muitos setores e os dados são muitos, eu divido por dias da semana.

Ex.: Segunda, quarta e sexta faço backup do setor contábil. Terça e quinta do setor financeiro... e por aí vai.

Image Backup

Mondo

Retirado daqui

O AIX possui um backup chamado image backup, que é um backup "bootavel" a partir do qual pode-se restaurar a instalação do sistema.

No linux é possivel fazermos um backup "bootavel" tambem, utilizando um software chamado Mondo.

Este software gera um backup .ISO da sua instalação linux. Voce pode gerar um CD a partir desse .ISO e restaurar a sua máquina total ou parcialmente. Você pode usar esse .ISO tambem para clonar a sua instalação de linux. A partir do .ISO gerado você instala outras máquina idênticas as que deram origem ao backup.

Esse ISO pode ser gerado diretamente para o CD ou para outra máquina via NFS. Ele faz tambem o backup de partições windows montadas no seu linux.

O Mondo é distribuido sob a licenca GPL.

Mais informações, o download do programa e documentação podem ser encontrados aqui

DD

Como fazer uma imagem clone de um sistema linux para usar posteriormente para fazer um restore, ou para reinstalar esta mesma imagem em diversas máquinas rapidamente?

Fazendo uma cópia fiel do disco.

Tal comando deve ser executado sem que o disco a ser copiado esteja em uso, você pode fazer isso, utilizando o Live CD do seu Ubuntu.

 dd if=/dev/hda | gzip --fast > hda.img.gz

O comando dd irá criar uma cópia do if (Input File=hda - primeiro disco IDE) e jogará para o gzip comprimir tal imagem em hda.img.gz.

Para restaurar tal imagem:

 gzcat -dc hda.img.gz | dd of=/dev/hda

O comando gzcat faz um cat no arquivo imagem já executando o gunzip e manda para o dd of (Output File=hda - primeiro disco IDE).

O uso do Gzip pode salvar uma grande quantidade de espaço da imagem (geralmente 50%), sendo que o seu uso é opcional.

O dd lê cada nível de bloco do seu disco, ele irá ler cada bit no disco. Será um processo lento, porém se você tem um bom hardware, um bom espaço em disco livre disponível e é "insano", tal comando irá cair como uma luva. Uma grande vantagem, é que será copiada também a tabela de partições do disco, economizando assim, todo o tempo de instalação e criação das partições manualmente.

Backup da MBR

Geralmente quando você instala o Windows ele remove o MBR do disco e instala seu próprio gerenciador de boot.

Primeiro verifique o disco que está instalado. Como usuário root, no meu caso uso sudo, usando o comando "fdisk -l".

 sudo fdisk -l

 Disk /dev/sdc: 200.0 GB, 200049647616 bytes
 255 heads, 63 sectors/track, 24321 cylinders
 Units = cylinders of 16065 * 512 = 8225280 bytes

 Device Boot Start End Blocks Id System
 /dev/sdc1 * 1 5099 40957686 7 HPFS/NTFS
 /dev/sdc2 5100 10198 40957717+ 83 Linux
 /dev/sdc3 10199 24321 113442997+ f W95 Extd (LBA)
 /dev/sdc5 * 10199 10453 2048224+ 82 Linux swap / Solaris
 /dev/sdc6 10454 24321 111394678+ 83 Linux

No meu caso é o /dev/sdc.

Recomendo salvar o mbr em um pendrive para facilitar.

Para fazer o backup do Grub (MBR), como root:

 sudo dd if=/dev/sdc of=mbr.img count=1 bs=512

Para restaurar o Grub (MBR), como root:

 sudo dd of=/dev/sdc if=mbr.img

Lembrando que você pode usar um live cd do Linux qualquer e colocar o pendrive e usar o mbr.img que você fez backup.

Fonte

--Kamus Hadenes 20:19, 20 Abril 2008 (EDT)

Ferramentas pessoais
Criar página