backup em shell script

1. backup em shell script

Sergio A.S. de Aguiar
ssaguiar

(usa Ubuntu)

Enviado em 08/02/2008 - 21:33h

Pessoal:
Em primeiro lugar, parabéns a todos pelo excelente conteúdo do site.
Eu gostaria de obter alguma ajuda para montar um script de backup.
O caso é o seguinte: estou usando o motion para capturar iagens de uma câmera. Estas imagens são armazenadas da seguinte forma:
na pasta home do site tem uma pasta chamada cameras.
Abixo desta tem uma pasta para cada câmera (cam1, cam2, cam3, cam4).
em cada uma destas tem uma pasta jpeg,uma pasta video e uma pasta time_lapse.
Depois disto, as pastas são criadas por data, para cada uma das pastas jpeg, video e time_lapse (por exemplo 02022008 - para 02 de fevereiro de 2008) e, finalmente (ufa), para cada data temos 24 pastas de cada hora (de 00 até 23).

Estrutura:

cameras-|
|-cam1-|-jpeg- |-02022008=|00 até 23
| | |-03022008=|00 até 23
| | |-04022008-|00 até 23
| |
| |-video |-02022008=|00 até 23
| | |-03022008=|00 até 23
| | |-04022008-|00 até 23
| |
| |-time_lapse-|-02022008=|00 até 23
| | |-03022008=|00 até 23
| | |-04022008-|00 até 23
| ^- apagar estas se -^
|-cam2 maior que 5 dias
| depois do backup
etc...

O problema é o seguinte : gostaria de fazer backup das pastas com mais de, digamos, 5 dias e, depois de fazer isto, apaga-las recursivamente (as pastas das datas com as horas,para cada pasta jpeg, video e time_lapse), isto para cada câmera (cam1, cam2, cam3, e cam4).

Eu adotei os nomes das pastas de datas assim, para poder usar o comando:

# Formatacao de data
dt=`date '+%d%m%Y'`

(este trecho foi extraído do artigo do Agrimar Teixeira em seu artigo: "Script de backup para Gravador de CD-R ou CD-rw".

Alguém pode me ajudar a montar isto em shell script?

Valeu pessoal. Obrigado.

Sérgio


  


2. Re: backup em shell script

Geraldo José Ferreira Chagas Júnior
gjr_rj

(usa Debian)

Enviado em 09/02/2008 - 00:46h

ssaguiar,

se não concordar com que eu vou dizer, é só escrever que eu respondo a pergunta da forma que você quer saber.

Mas antes gostaria de dar minha opinião
Acho que a data não deveria ser posta no nome dos diretórios com essa formatação, deveria ser aaaammdd e não ddmmaaaa pois dessa forma ao listar os diretórios eles aparecem ordenadas naturalmente.

usando dt=`date '+%Y%m%d'`

você poderia em seu script de backup determinar o número diretórios que você não quer que seja compactada, mover o restante para um diretório de backup e compactá-lo.

exemplo

#!/bin/bash

numMax=2 # Número de pastas (data) que não serão
# alteradas. Com o nome formatado da
# forma que mencionei os primeiros
# sempre serão os mais recentes

cd <diretório> # Para cada caminho que terá
# os diretórios a serem
# compactados

CONTADOR=0
for x in $(ls) ; do

if [ $CONTADOR -gt $numMax ] ; then
mv $x <destino> # pode ser um diretório com
#a mesma estrutura
fi
let CONTADOR=CONTADOR+1;
done

Assim você pode montar uma estrutura de backup igual a sua e compactá-la da forma que quiser.

Dessa forma evita ter que manipular data no script da backup


3. Re: backup em shell script

Perfil removido
removido

(usa Nenhuma)

Enviado em 09/02/2008 - 02:29h

É como o amigo aí de cima falou:
Mais uma hierarquia de pastas

ano(aaaa)---+
------+--mes(mm)---+
-------------------+---dia(dd)---+
--------------------------------+---hora(hh)---+
----------------------------------------------+---cam_n

Assim você terá seus arquivos extremamente organizados Além de um banco de dados sobre filmagens de segurança muito facil de pesquizar informações e arquiva-las.


4. Re: backup em shell script

Sergio A.S. de Aguiar
ssaguiar

(usa Ubuntu)

Enviado em 09/02/2008 - 11:57h

Obrigado grj_rj e /.wolferineblues pela ajuda.

Com relação ao formato da data, você tem razão pois fica bem mais organizado com indexação automática das pastas. Eu estou usando esta formatação pelo fato de querer usar os comandos do funcoeszz desta forma:

# Calcula 5 dias antes
dtbk=`/sbin/funcoeszz data hoje - 5 |cut -c 1,2,4,5,7,8,9,10`

O data hoje retorna a formatação que indiquei.
Vou dar uma olhada no código e refazer com o formato que você me sugeriu.

Com relação à hierarquia de pastas, preciso mantê-la da forma que está pois o programa monta um thread para cada camera (cada entrada de vídeo) e cada thread monta os arquivos.

Obrigado pessoal.

Sérgio


5. Re: backup em shell script

Sergio A.S. de Aguiar
ssaguiar

(usa Ubuntu)

Enviado em 09/02/2008 - 13:21h

Seguindo a dica do grj_rj e do /.wolferineblues, mudei o formato das datas e a estrutura de pastas para:

cameras=|
........|=20080209=|
...................|=======jpeg=|
...................|............|=12
...................|............|=13
...................|............|=14
...................|............|=etc...
...................|======video=|
...................|............|=12
...................|............|=13
...................|............|=14
...................|............|=etc...
...................|=time_lapse=|
................................|=12
................................|=13
................................|=14
................................|=etc...

Vamos ver agora, se acerto o resto..

Valeu.

Sérgio



6. Re: backup em shell script

Geraldo José Ferreira Chagas Júnior
gjr_rj

(usa Debian)

Enviado em 11/02/2008 - 15:30h

Poste aqui, no final, se funcionou, pois ficamos na curiosidade se a pessoa obteve sucesso ou não.


7. Re: backup em shell script

Sergio A.S. de Aguiar
ssaguiar

(usa Ubuntu)

Enviado em 11/02/2008 - 19:32h

Pode ficar tranqüilo que postarei. O meu maior problema é a idade... Tô tentando fazer funcionar o script, mas preciso antes aprender um pouco mais sobre o bash script.

Sérgio


8. Re: backup em shell script

Sergio A.S. de Aguiar
ssaguiar

(usa Ubuntu)

Enviado em 11/02/2008 - 21:24h

Pessoal:
Olha como está ficando o script - nem parece que sou eu ;) :

#! /bin/sh

for x in 1 2 3 4 5 6 7; do

SEARCH=/mnt/hdc1/www/cameras/$(date --date "$x day ago" +%Y%m%d);
echo $SEARCH;

if [ -d "$SEARCH" ]; then
ls -la $SEARCH;
#mv $SEARCH /home/backup
fi

done

- Procuro pelos últimos 7 dias (1 2 3 4 5 6 7)
- Formato um string com a data referente ao dia em questão, no mesmo formato usado para minhas sub-pastas, dentro da pasta cameras.
- Se a pasta existir (testa se é um diretório, automaticamente serve para testar se existe), então move ela para a pasta backup.

Depois disto, vou montar uma imagem iso das pastas dentro da pasta backup e vou gravar em dvd.

Assim que tiver mais alguma coisa, coloco aqui.

O que vocês acham, alguma sugestão para melhorar o script?
Obrigado pela ajuda pessoal.
Vou continuar a postar conforme vou avançando na solução deste problema.

Sérgio


9. Script de Backup

Sergio A.S. de Aguiar
ssaguiar

(usa Ubuntu)

Enviado em 12/03/2008 - 19:18h

Pessoal:

O script de backup ficou assim:


#! /bin/sh

############################################################
# Limpar Tela e Inicia Backup #
############################################################

clear
echo "Iniciando Backup." > /home/backup.log

#===========================================================
# Move Pastas Para Temporario
#===========================================================

NAME=`date +20%y-%m-%d`

for x in 1 2 3; do

SEARCH=/var/www/cameras/$(date --date "$x day ago" +%Y%m%d)

if [ -d "$SEARCH" ]; then
echo "Movendo pasta $SEARCH" >> /home/backup.log 2>&1
mv $SEARCH /home/backup
fi

done

#===========================================================
# Apaga Arquivo de log Antigo
#===========================================================

echo "Apagando /home/*.log" >> /home/backup.log
rm -f /home/*.log >> /home/backup.log 2>&1

#===========================================================
# Apaga ISO Antigo
#===========================================================

echo "Apagando /home/*.iso" >> /home/backup.log
rm -f /home/*.iso >> /home/backup.log 2>&1

#===========================================================
# Apagar Arquivos e Pastas de Backup Antigos
#===========================================================

echo "Apagando /home/backup/*" >> /home/backup.log
rm -Rf /home/backup/* >> /home/backup.log 2>&1

#===========================================================
# Cria Arquivo de Backup da pasta /root/
#===========================================================

echo "Backup do root" >> /home/backup.log
tar -cvzf /home/backup/root.tar.gz /root/ >> /home/backup.log 2>&1

#===========================================================
# Cria Arquivo de Backup da pasta /etc/
#===========================================================

echo "Backup do etc" >> /home/backup.log
tar -cvzf /home/backup/etc.tar.gz /etc/ >> /home/backup.log 2>&1

#===========================================================
# Cria Arquivo de Backup da pasta /var/www/
#===========================================================

#echo "Backup do www" >> /home/backup.log
#tar -cvzf /home/backup/www.tar.gz /var/www/ >> /home/backup.log 2>&1

#===========================================================
# Cria Arquivo de Backup da pasta /usr/loca/etc
#===========================================================

echo "Backup do usr/local/etc" >> /home/backup.log
tar -cvzf /home/backup/motion.tar.gz /usr/local/etc/ >> /home/backup.log 2>&1

#===========================================================
# Cria Arquivo ISO do Backup
#===========================================================

echo "Criando imagem iso" >> /home/backup.log
mkisofs -pad -l -r -J -v -V "Guardiao".$NAME -o /home/backup.iso /home/backup/ >> /home/backup.log 2>&1

#===========================================================
# Formata DVD RW
#===========================================================

#echo "Formatando DVD" >> /home/backup.log
#dvd+rw-format -force /dev/hdd >> /home/backup.log 2>&1

#===========================================================
# Grava DVD RW com imagem ISO
#===========================================================

echo "Gravando dvd de backup" >> /home/backup.log

#dvdrecord -dummy -v -fs=50M -dao speed=2 dev=/dev/dvdrw -data /home/backup.iso

growisofs -dvd-compat -Z /dev/dvdrw=/home/backup.iso >> /home/backup.log 2>&1

#===========================================================
# Envia e-mail com Aviso da Finalizacao do Backup
#===========================================================

echo "Enviando e-mail" >> /home/backup.log
cat /home/backup.log|mail -s "Guardiao - Backup Finalizado" fulano@site.com;

#===========================================================
# Fim do Backup!
#===========================================================

echo "Backup Finalizado!" >> /home/backup.log


Pergunto:

Preciso copiar todo o conteúdo da pasta /var/www MENOS a pasta /var/www/cameras.

Como consigo fazer isto? Alguma dica?

Um abraço e obrigado


10. Re: backup em shell script

Aldefax G. Kuhn
agk

(usa Debian)

Enviado em 24/03/2008 - 11:24h

Cria uma lista dos diretório que você quer fazer backup:
ls >lista

Para excluir um determinado diretório da sua lista pode usar o sed:
sed '/diretorio/d'

Depois use a opção -T do tar para chamar essa lista.

Dúvidas? pergunte,

[ ]'s.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts