Backup automático em Shell Script

A maioria do pessoal que trabalha com qualquer tipo de sistema Unix-like (tanto unix, linux, etc...) sempre precisa criar alguns scripts para auxiliar no funcionamento correto do sistema, para fazer backups automáticos e muitas outras coisas. Neste artigo mostrarei como criar um sistema bem simples de backup automático em Shell Script.

[ Hits: 261.258 ]

Por: Perfil removido em 21/11/2002


Folder 2 MNT



Bom, como dito, iremos fazer agora um script que faz o backup de uma pasta, monta um diretório específico, joga o arquivo nele e depois desmonta o diretório. Mas porque isso?

Esse tipo de backup é muito útil quando se trabalha com dados sigilosos, pois pode-se colocar um HD sobressalente em cima de uma maquina e somente montá-lo quando for feito o backup, e logo após desmontá-lo para ficar invisível a qualquer usuário.

Este script não requer nenhum programa em especial para trabalhar, ele usar o tar+gzip para compactar o diretório e, somente necessita que seu sistema aceite o sistema de arquivos smbfs caso seja usado isso.

Bom, vamos começar o script, o chamaremos de "backup_f2mnt.sh" (backup folder 2 MNT, ou backup de pasta para MNT):
#!/bin/sh
#
# Créditos do script, versão, etc.
#

# Confs do script
# Onde, DIR_ORIG é o diretório a ser backupeado, BKP_NAME é o nome do
# arquivo de backup a ser criado, MNT_DIR é o caminho para o diretório que
# será montado, e, MNT_USER e MNT_PASS são respectivamente o usuário
# e a senha a serem usados se montarmos partições SMBFS
# e finalmente MNT_SMB define se o diretorio a ser montado é SMBFS ou
# não (0 para não, 1 para sim)
# SMB_WORK é o workgroup a ser usado se for montada uma partição smbfs

DIR_ORIG="/diretorio/a/ser/compactado/"
BKP_NAME="nome-do-arquivo.tgz"
MNT_DIR="/dev/hdb5"
MNT_USER="usuario"
MNT_PASS="senha"
MNT_SMB="0"
SMB_WORK="workgroup"
# compactação do diretório de origem
tar -czpf ./${BKP_NAME} ${DIR_ORIG}

# verificando se o diretório a ser montado é SMBFS ou não, montando-o e
# copiando o arquivo para o diretório
if [ "$MNT_SMB" = "0" ]; then
mount ${MNT_DIR} ./mnt
cp ./${BKP_NAME} ./mnt
else
mount -t smbfs -o username=${MNT_USER},password=${MNT_PASS},workgroup=${SMB_WORK} ${SMB_DIR} ./mnt
cp ./${BKP_NAME} ./mnt
fi

# mensagem de resultado
echo "Seu backup foi realizado com sucesso."
echo "Diretório: ${DIR_ORIG}"
if [ "$MNT_SMB" = "0" ]; then
echo "Destino: ${MNT_DIR}"
else
echo "Destino: ${MNT_DIR} (smbfs)"
fi
exit 0
E pronto! Esse foi um pouco mais complicado, mas nem tanto, ele só pode ser um pouco falho na questão de ver se o diretório a ser montado é SMBFS se você for usa-lo como está, pois fiz somente como um exemplo, você deve adaptá-lo ao seu gosto, distinguindo ou não se é smbfs.

E lembre-se que se no caso for um diretório SMBFS, coloque o caminho desta forma:

//NOMEDAMAQUINA/diretorio/

Para o script conseguir montar corretamente o diretório.

Página anterior     Próxima página

Páginas do artigo
   1. Folder 2 Folder
   2. Folder 2 FTP
   3. Folder 2 MNT
   4. Agendando os backups
   5. Considerações Finais
Outros artigos deste autor

Uma "fábula" sobre acessar e mapear unidades de rede do Windows no Linux

Configure seu modem SmartAx MT810 no Ubuntu

Slapt-get 0.10.2s - Conceitos Básicos

Usando tabulações no OpenOffice.org

Instalação dual boot UEFI Linux Mint/Ubuntu com Windows 8.1/10

Leitura recomendada

Debugando shell scripts

AWK - Introdução

Programação com Shell Script

AWK - Manipulação de arquivos de texto

Variáveis, if, else e unless em Ruby

  
Comentários
[1] Comentário enviado por raiobr em 10/12/2002 - 13:53h

e pra quem estiver afim de um backup historico basta a variavel BKP_NAME="nome-do-arquivo.tgz" para
BKP_NAME=bk`date +%d-%m_%H%M`.tgz
onde:
%d = dia
%m = mes
%H = hora
%M = minuto

o resultado do nome do arquivo vai ser o seguinte

[raiobr@host1 tmp]$ date
Ter Dez 10 13:53:20 BRST 2002
[root@arara tmp]# ./t.sh
bk10-12_1353.tgz
[raiobr@host1 tmp]$


[]s
qualquer coisa ou duvida e so falar

[2] Comentário enviado por cmarcelo em 27/05/2003 - 19:43h

Gostei muito do script, mas na minha situação, eu tenho vários arquivos e vários diretórios diferentes para "backupar" no caso, tenho um arquivo contendo /home/cmarcelo/dirX/ ; /home/cmarcelo02/dirY/ ; /root/dirZ etc...
Gostaria de saber como que eu faria para que a variável $DIR_ORIG leia por exemplo todos os diretórios contidos no arquivo /home/cmarcelo/dirs-para-backup

Valeu
Carlos Marcelo

[3] Comentário enviado por emanuelbrunopb em 05/06/2003 - 10:47h

Valeu pela dica vou aproveitala muito bem
Bruno PB

[4] Comentário enviado por cluster_br em 28/08/2003 - 10:58h

Somente uma observação o valor da variavel DIR_DEST tem que terminar com / pois na hora de concatenar DIR_DEST com $BKP_NAME fica errado o caminho por exemplo
DIR_ORIG="/diretorio/a/ser/compactado/"
DIR_DEST="/diretorio/a/ser/enviado/o/arquivo"
BKP_NAME="nome-do-arquivo.tgz"
tar -czpf ${DIR_DEST}${BKP_NAME} ${DIR_ORIG}
na execução é substituido por
tar -czpf ="/diretorio/a/ser/enviado/o/arquivonome-do-arquivo.tgz /diretorio/a/ser/compactado/

teria que ser assim
DIR_ORIG="/diretorio/a/ser/compactado/"
DIR_DEST="/diretorio/a/ser/enviado/o/arquivo/"
BKP_NAME="nome-do-arquivo.tgz"
tar -czpf ${DIR_DEST}${BKP_NAME} ${DIR_ORIG}
na execução é substituido por
tar -czpf ="/diretorio/a/ser/enviado/o/arquivo/nome-do-arquivo.tgz /diretorio/a/ser/compactado/

[5] Comentário enviado por cluster_br em 28/08/2003 - 11:02h

Desculpe, no comentario acima tem um erro, é que copiei e colei e esqueci de tirar o ="

tar -czpf ="/diretorio ....
o certo seria
tar -czpf /diretorio ...

[6] Comentário enviado por removido em 06/10/2003 - 09:24h

Valeu pelas correcoes e pelas dicas pessoal :)
no proximo artigo espero a mesma ajuda.

Obrigado.

[7] Comentário enviado por lacierdias em 24/11/2003 - 07:21h

Gostaria de receber o script com as correções principlamente aquela de BKP em varias pastas e saber se é possivel ele buscar arquivos em maquinas win através do samba????Fazer um BKP geral na rede....

[8] Comentário enviado por arrb em 03/12/2003 - 03:06h

eu não sabia que tinha anos na crontab pensei que ao inves disto tinha dia da semana!

[9] Comentário enviado por caviar em 31/12/2003 - 11:13h

Nota: Este artigo foi publicado originalmente na edição online da Revista do Linux.

Uma dúvida muito comum entre as novas gerações de administradores Linux que vem sendo formadas na prática, muitas vezes sem treinamento formal, diz respeito aos backups - de fato, esta dúvida não se restringe aos administradores Linux: muitos administradores experientes de outros sistemas operacionais não têm nenhuma intimidade com as fitas DAT/DDS - e nem fazem idéia da simplicidade do manuseio destas jóias da tecnologia.

De fato, é comum vermos usuários perguntando sobre como "montar" a fita - como se ela fosse um disquete ou CD; outros perguntam sobre como formatar a fita. Embora o conceito de formatação até possa ser aplicado a fitas, você certamente não irá criar um sistema de arquivos nela - portanto, você não irá "montá-las" para gravar e ler arquivos nela.

Ao invés disto, utilizamos uma série de utilitários para gravar e ler dados das fitas. Alguns destes utilitários têm como objetivo único o backup - ferramentas especializadas como o BRU Backup, o OmniBack e o Amanda - e outros são ferramentas de uso geral, tradicionais do Unix e que podem ser aplicadas ao backup: mt, dd, dump, restore, tar, cpio, compress, gzip & cia.

Dependendo das suas necessidades, pode valer a pena recorrer a uma ferramenta integrada como o Amanda ou o OmniBack. Se você for um guru do Unix tradicional, provavelmente será capaz de implementar estratégias complexas de backup usando só o find e o cpio. Mas neste artigo não adotaremos nenhuma das duas visões, optando ao invés disso por apresentar os principais componentes básicos do backup em fita, demonstrando um esquema simples de cópia e indicando as fontes de consulta suplementar para orientar a busca por tópicos avançados.

As fitas
Existem várias opções de backup disponíveis no mercado, desde CD-ROMs e discos rígidos adicionais, até modernos sistemas de backup remoto via internet, passando por vários modelos de fitas. Neste artigo analisaremos uma das mídias mais comuns em instalações atuais: as fitas DDS (também chamadas, embora erroneamente, de fitas DAT). Este tipo de mídia tem um custo por megabyte armazenado relativamente baixo, não é muito suscetível a problemas de alinhamento dos drives e é bastante fácil de armazenar, desde que você tome cuidado com as condições ambientais.

Existem várias especificações de fitas DDS, variando desde o padrão original de 2 ou 4 GB por fita, até as modernas DDS-4, com capacidade nominal de 20GB. Se você puder optar, não se deixe impressionar pela diferença no custo dos drives: não há preço que pague a comodidade de poder fazer backups diários completos sem ter de treinar o vigia noturno para trocar fitas na madrugada, como acontece em algumas organizações onde o volume armazenado cresceu mais do que o orçamento dedicado à segurança da informação.

Para o Linux, o seu acionador de fitas será visto como um dispositivo de caracteres - ao contrário dos discos em geral, que são dispositivos de bloco. As unidades DDS em geral contam com interface padrão SCSI, e são tratadas pelo Linux como os dispositivos /dev/st0 (st1, st2 e assim por diante se você tiver múltiplas unidades) ou /dev/nst0. A diferença entre st0 e nst0 é o rebobinamento: quando você acessa sua unidade de fita através da primeira opção, ela irá rebobinar automaticamente após o término da operação, coisa que não ocorre com o nst0 - a letra "n" significa nonrewinding, ou sem rebobinamento.

Um pouco de filosofia
Planejar e executar backups pode ser uma atividade tediosa, até mesmo chata: selecionar o conjunto de diretórios que deverão ser copiados diariamente, lembrar de trocar as fitas nos horários corretos, procurar a fita do mês passado para recuperar aquele arquivo importante que sumiu do diretório de um usuário (subitamente atacado pela síndrome do "eu não mexi em nada!") estão longe de ser as rotinas mais amadas pelos administradores de sistemas.

Ao mesmo tempo, o backup adquire importância crucial nas piores horas. Um comando errado, uma invasão por pessoas não autorizadas, uma enchente ou tempestade e subitamente os seus dados armazenados no servidor não parecem mais tão seguros - e se você não tiver se preocupado com isto antes da tragédia, agora será tarde demais. Backups são parte importante da política de segurança, e você precisa pensar neles como o recurso estratégico que representam, e não como a rotina tediosa que geram.

O primeiro passo é conhecer bem as ferramentas de backup utilizadas. Neste artigo veremos apenas os fundamentos do comando tar, com o qual é possível criar backups bastante avançados - se você no futuro optar por outros softwares de backup, lembre-se de fazer o possível para conhecê-los profundamente antes de vir a precisar deste conhecimento na prática - para evitar surpresas desagradáveis.

O tar é um utilitário de linha de comando cuja sintaxe é bastante flexível - tão flexível a ponto de dificultar a discussão de todas as suas opções em um artigo introdutório como este. Iremos ver algumas das opções mais comuns através de exemplos práticos, mas lembre-se: uma visita ao manual do tar (www.gnu.org/manual/tar/html_mono/tar.html) é obrigatória para quem realmente quiser utilizar esta ferramenta.

Partindo do princípio
Digamos que você queira gravar todo o conteúdo dos diretórios home dos seus usuários, e todos eles estejam corretamente criados dentro da árvore /home. Sua fita de backup tem capacidade suficiente para armazenar todo o volume necessário, e está inserida em sua unidade de backup SCSI, reconhecida pelo Linux como /dev/st0. O que você tem a fazer é muito simples:

tar -cvf /dev/st0 /home

Este comando gravará todo o conteúdo do diretório /home (incluindo seus subdiretórios) na fita, rebobinando-a em seguida. As opções do tar utilizadas significam:

c - criar um novo arquivo (create)
v - exibir informações sobre a operação (verbose)
f /dev/st0 - gravar em /dev/st0 (file)
/home - o diretório de origem
Pareceu simples demais? Sim, mas estamos apenas começando! Que tal imaginar que além do /home, você tem um diretório /projetos, contendo os arquivos utilizados pelo setor de desenvolvimento da sua empresa, e neste mesmo servidor ainda reside o spool de mail de seus usuários? Neste caso você irá querer fazer o backup de todos os diretórios na mesma fita - ou ensinar o vigia noturno a trocar as fitas para você na madrugada.

Fazer o backup de vários diretórios em uma mesma operação é bastante simples. Em primeiro lugar, crie com seu editor de textos favorito um arquivo contendo a lista dos seus diretórios a ser copiados, um por linha. Por exemplo, vamos considerar que você criou um arquivo chamado /etc/backup_dirs contendo as seguintes linhas:

/home
/projetos
/var/spool/mail

Agora insira a fita, e emita o seguinte comando:

tar -cv -T /etc/backup_dirs -f /dev/st0

e aguarde a cópia ser executada. Para praticamente qualquer situação de backup real, você descobrirá que o tar possui opções adequadas - embora exija uma boa leitura da documentação para se tornar realmente útil.

Após escolher cuidadosamente a lista de diretórios a ser copiada, e gerar duas ou três fitas de teste (certificando-se de que consegue recuperá-las corretamente depois), você já pode inserir os comandos do seu backup na crontab, para que ele seja executado automaticamente em todas as madrugadas, e tudo o que você tenha a fazer seja trocar diariamente as fitas antes de terminar o expediente. Os procedimentos relacionadas à crontab seriam tema suficiente para mais um artigo inteiro, mas ao final deste texto você encontrará algumas referências para pesquisar sobre o assunto.

Recuperando backups
Naturalmente, um backup não serve para nada se você não tiver como recuperá-lo depois (embora todos torçam para nunca precisar recuperar). Recuperar um backup feito com o tar é bastante simples: insira a fita e emita o comando adequado.

Se você quer recuperar apenas um arquivo da fita, a operação exige apenas um comando. Vamos imaginar que a secretária da diretoria notou hoje a falta de um arquivo necessário para uma reunião de amanhã, e você precisa recuperá-lo do backup imediatamente. Eis o comando:

tar -xvf /dev/st0 /home/analucia/pauta.doc

As opções v e f já foram discutidas acima. A opção -x informa ao tar que ele deverá processar a eXtração de um arquivo da fita, e /home/analucia/pauta.doc é o nome do arquivo a ser recuperado. Note que com as versões GNU do tar (que são as que costumam vir incluídas nas distribuições de Linux) por padrão o arquivo não será gravado diretamente em /home/analucia, mas sim em um diretório criado a partir do seu diretório corrente - por exemplo, se você estiver em /root, ele será gravado como /root/home/analucia/pauta.doc - e você terá que movê-lo. Isto ocorre numa tentativa de protegê-lo contra erros (já imaginou sobrescrever todos os seus arquivos por versões de um mês atrás, devido a uma opção errada?), mas pode ser revertido através de opções do próprio tar, se você preferir.

Naturalmente você também pode extrair diversos arquivos de uma só vez (com a opção -T, que vimos acima), a fita inteira (basta não informar o nome de nenhum arquivo após o /dev/st0), diretórios e vários outros subconjuntos - para saber como (não custa repetir) leia o manual do tar diariamente, após as refeições.

Outras opções
Já vimos o básico do backup utilizando o tar, e agora está na hora de citarmos outras ferramentas sobre as quais você pode querer se informar antes de planejar sua política de backups.

Em primeiro lugar, as outras ferramentas tradicionais: o comando mt serve para manipular fitas em geral, permitindo avançá-las, retrocedê-las e ajudando na tarefa de manter mais de um backup diferente gravado na mesma fita (algo que você só deve fazer se realmente precisar muito). A dupla de comandos dump e restore realizam e retornam backups, e estão disponíveis para qualquer versão de Unix que você possa imaginar (assim como o tar e o cpio, seu grande rival).

O Amanda (www.amanda.org) merece menção especial, por ser uma ferramenta de livre distribuição capaz de fazer o mesmo que as ferramentas comerciais caríssima, com uma interface tão simples quanto as delas. Ele realiza facilmente o backup de vários computadores em um único servidor dispondo de uma unidade de fitas (ou outro dispositivo de backup), com transparência e flexibilidade.

Outra ferramenta que merece atenção dos iniciantes é o KDat (sunsite.auc.dk/qweb/kdat/), uma interface gráfica para os comandos tradicionais de backup bastante fácil de usar.

E temos também as ferramentas comerciais: OmniBack, BRU, e muitas outras. A possível vantagem de uma ferramenta comercial é contar com suporte técnico especializado pago e eventualmente com treinamento formal. As demais vantagens apregoadas, tais como a independência de plataforma, suporte a harware moderno e backup centralizado podem ser obtidas com as ferramentas livres.

Conclusão
Chegamos ao fim deste artigo muito longe de esgotar o assunto. Temas como backups diferenciais, incrementais, política de armazenamento de fitas, recuperação de desastres com discos e muitos outros poderiam render explanações capazes de ocupar todo o espaço desta revista, e possivelmente serão abordados em outros artigos no futuro.

Espero ter alcançado o objetivo de demonstrar que backups em fita não envolvem técnicas complexas, estando ao alcance de qualquer administrador de sistemas. Se você tem interesse maior pelo assunto, consulte os links indicados no quadro "Para saber mais", principalmente o livro "Unix Backup & Recovery" - que contém tudo o que você precisa saber sobre cópias de segurança em ambiente Linux.

Para saber mais:

Livro "Unix Backup & Recovery" - www.backupcentral.com/thebook.html
BRU - www.bru.com
Manual do tar - www.gnu.org/manual/tar/html_mono/tar.html
KDat - sunsite.auc.dk/qweb/kdat
Guia do backup com tar e kdat -linuxdoc.org/LDP/lame/LAME/linux-admin-made-easy/c1315.html
Introdução ao Backup - www.linux-mag.com/cgi-bin/printer.pl?issue=1999-07&article=guru"
Agendando tarefas com o cron - www.linux.trix.net/dicas_cron.htm

[10] Comentário enviado por Ti_j@der em 21/04/2005 - 21:40h

Otimo artigo

[11] Comentário enviado por bestmix em 10/10/2005 - 20:29h

show de bola de scripts valeu mesmo !!!!!

[12] Comentário enviado por kamal em 08/12/2005 - 11:04h

Muito legal o artigo, mas eu gostei muito foi do comentario que o companheiro acima fez. Alias, nao parece um comentario e sim um outro artigo. Eu precisava disso, pois aqui no meu serviço tenho exatamente esse tipo de backup. Tenho 2 serv. samba no qual tenho q fazer backup todos os dias em outro serv. Acho q esse comentario deveria ser criado como um novo artigo. Valeu companheiro

[13] Comentário enviado por xantecler em 21/06/2006 - 17:51h

Show...

[14] Comentário enviado por balani em 13/11/2006 - 04:15h

Muito util seu artigo, e com o comentario da galera ficou mais show.

[15] Comentário enviado por fontebon em 06/03/2007 - 13:34h

Cara não funcionou...pode me passar o script certo.

contato :diones@pallu.com.br

[16] Comentário enviado por coelho.maximo em 29/03/2007 - 17:32h

Queria Sabe...

Como Fazer Esse Script

* backup local guardando os arquivos no home da dupla
HackerTeen.
* O backup deverá ser feito automaticamente 3 vezes por semana às
segundas, quartas e sextas, sempre as 22 horas
- Além do backup local, esse backup também deverá ser guardado em uma outra
máquina da QueijExpress; no caso esse backup deverá ser enviado via SSH.
Para isso, o servidor SSH deverá ser configurado para enviar o backup sem a
necessidade de colocar senha, uma vez que a dupla hacker não estará no local
(Barro Preto/MG) as 22 horas para colocar a senha

[17] Comentário enviado por flipe em 23/06/2007 - 11:52h

eu gostaria de saber se tem alguma forma, de não copiar o /proc usando este script.

grato.

[18] Comentário enviado por tiagonetwork em 29/11/2007 - 13:14h

excelente guri....

[19] Comentário enviado por paulistinha em 24/11/2008 - 06:13h

Problemas com a autenticação do usuario.

Pessoal,

Fiz o script e não consegui faze-lo funcionar.

Parece que ele não aceita autenticar o usuário conforme esse modelo. Dá o seguinte erro ao leer as variaveis de host, usuário e senha.

RFC 2228 authentication not implemented.
RFC 2228 authentication not implemented.
KERBEROS_V4 rejected as an authentication type

Como resolvo isso?

Grato.

[20] Comentário enviado por ffmalta em 08/01/2009 - 08:31h

Muito bom o seu artigo. Já testei e consegui fazer direitinho. Só fiquei na dúvida caso eu queira salvar o backup em uma máquina da rede. O que devo modificar?

[21] Comentário enviado por marcoshansen em 12/11/2009 - 11:29h

Boa tarde pessoal, gostaria de saber se tem como fazer um sistema de backup inteligente no meu servidor de dados!

Eu tenho um servidor de dados, esses dados são alterados todos os dias! Eu iria espelhar o HD (2 HD's com os mesmo dados) a medida que eu alterasse um determinado arquivo em um determinado HD uma vez por dia ele fizesse o backup para o outro HD só dos arquivos que eu alterei!

Se fizer de todos os arquivos vai demorar muito, são mais de 300 Gb e eu altero somente 1 ou 2 Gb por dia no máximo!!!

Se for possível e se alguém tiver o scrip pronto se puder me passar ...

pccfmarcos@gmail.com

Agradeço a todos ae, Obrigado!

[22] Comentário enviado por texwiller em 16/08/2010 - 00:02h

Excelente artigo e comentário!
Estão todos de parabéns por um trabalho desses!

[23] Comentário enviado por fschunig em 18/02/2011 - 13:34h

Demais pessoal! O 1º link da busca e já tem tudo que preciso.
valeuuuuuuuuuu

[24] Comentário enviado por hegnogois em 25/06/2013 - 11:44h

Boa Tarde, estou com um certo problema.. Estou elaborando um trabalho no Linux, e preciso criar um Backup de maquinas virtuais automatizados, e que isso seja listado em documento de texto, mostrando os registros de atividades de logs das maquinas virtuais em documento de texto.. enviando tudo para a maquina hospedeira. Qual seria a melhor forma de criar esses scripts em shell e também listar as atividades das maquinas virtuais para o hospedeiro?? Desde já agradeço..

[25] Comentário enviado por fagner_marques em 21/11/2016 - 23:30h

Muito bom e bem explicado , algumas diferenças devido as versões , usei o debian e no crontab -e

quando fui agendar a tarefa ao inves de /bin/bash usei /bin/sh


obrigado abraço

[26] Comentário enviado por vnkush em 06/05/2021 - 14:05h

Boa tarde, se por ventura eu quisesse que esses arquivos fossem sobrescritos após 30 dias e após isso os arquivos com menos de 1kb não sobrescrever, alguém p auxiliar?


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts