Backup de N diretórios e arquivos

Publicado por Thiago Diniz da Silveira 07/07/2009

[ Hits: 7.480 ]

Download bkpScript.sh




Apenas mais um script de backup, cada comando está bem explicado, será bom para o aprendizado.

  



Esconder código-fonte

#!/bin/bash

#==================================#
#                 Script para realizar backup                     #
#==================================#

# IMPORTANTE:
# Para o funcionamento deste script é necessário gerar uma chave do ssh
# e enviar a chave pub para o servidor destino.
# Isso é necessário para os comandos scp e ssh poderem ser emitidos
# sem uma requisição de senha.
# para realizar isso pode ser utilizado esses dois comandos (tem que executar
# os comandos com o usuário que for executar o script):
# O primeiro serve para gerar a chave rsa:
# 1 - $ ssh-keygen -t rsa
# O segundo envia a chave rsa para o servidor destino
# 2 - $ ssh-copy-id -i ~/.ssh/id_rsa.pub login@servidor
# Comandos tirado do site http://www.guiadohardware.net/tutoriais/dominando-ssh/pagina5.html
# se quiser conhecer um pouco mais sobre ssh recomendo.


# Configuração do servidor 1 (origem)
# Diretório onde ficara o backup temporariamente
DIR_ORIG="/tmp/"
# Diretório dos arquivos a receberem backups separados por espaço
# podem ter quantos quiser
BKP=("/home/$USER/" "/home/FTP/")

# Configuração do servidor 2 (destino)
# IP ou Name do servidor que receberá o backup
HOST="192.168.1.2"
# Usuário a ser utilizado no envio dos backups
USUARIO="root"
# Diretório onde irá ser enviado os backups
DIR_DEST="/tmp/"


# Configurações gerais
# Nome do arquivo compactado
ARQ="bkp.tgz"

# Criar Log? (default = 1)
# 1 = sim, 0 = não
LOG="1"
if [ $LOG -eq 1 ]; then
        # Nome do arquivo de log e diretório a ser gravado
        ARQ_LOG="${DIR_ORIG}logBKP"
fi
# Descompactar arquivo no servidor a ser enviado? (default = 1)
# 1 = sim, 0 = não
DESC_BKP="0"
if [ $DESC_BKP -eq "1" ]; then
        # Diretório onde irá ser descompactado os backups
        # OBS: quando descompactar o backup, o diretório de cada arquivo
        # é recriado, ou seja, se DIR_UNZIP for /backup e você fez backup do
        # /home/$USER/ criará um diretório chamado /backup/home/$USER
        # dentro do servidor destino. (se tiver permissão claro)
        DIR_UNZIP="/"
fi

# Inicio do script

if [ $LOG -eq 1 ]; then

        echo "Backup Execução - $(date +%d/%m/%Y)" >> $ARQ_LOG
        echo "Horaario da Inicialização do Backup - $(date +%k:%M:%S)" >> $ARQ_LOG
        echo >> $ARQ_LOG
        echo "Compactando arquivos" >> $ARQ_LOG

        # Nesta parte a variável bkp recebera todos os valores dentro do array BKP
        # e serão adicionados a váriavel tmp
        for bkp in ${BKP[@]}; do
                tmp="$tmp $bkp";
        done

        # Compacta os arquivos e diretórios mantendo as permissões
        tar -czpvf ${DIR_ORIG}${ARQ} ${tmp} >> $ARQ_LOG

        echo >> $ARQ_LOG

        echo "Transferindo arquivo para o servidor: ${HOST}" >> $ARQ_LOG;

        echo "Utilizando o user: ${USER}" >> $ARQ_LOG;
        echo "Para o diretório: ${DIR_DEST}" >> $ARQ_LOG;


        # Transfere o backup para o servidor destino
        scp ${DIR_ORIG}${ARQ} $thiagods.ti@${HOST}:${DIR_DEST} >> $ARQ_LOG;

        echo >> $ARQ_LOG;

        if [ $DESC_BKP -eq 1 ]; then
                echo "Descompactando arquivo no servidor" >> $ARQ_LOG;
                # Descompacta o backup no servidor destino
                ssh $thiagods.ti@${HOST} tar -xzpvf ${DIR_DEST}${ARQ} -C ${DIR_UNZIP} >> $ARQ_LOG;
                echo >> $ARQ_LOG;
        fi

        echo "Horário da Finalização do Backup - $(date +%k:%M:%S)" >> $ARQ_LOG


        echo "=======================================================================" >> $ARQ_LOG
        echo >> $ARQ_LOG

# Caso não queira log, porém não é recomendável
else
        for bkp in ${BKP[@]}; do
                tmp="$tmp $bkp";
        done
        tar -czpvf ${DIR_ORIG}${ARQ} ${tmp}
        scp ${DIR_ORIG}${ARQ} $thiagods.ti@${HOST}:${DIR_DEST}
        ssh $thiagods.ti@${HOST} tar -xzpvf ${DIR_DEST}${ARQ} -C ${DIR_UNZIP}
fi

Scripts recomendados

Conectar em rede Wireless

Atualização do AVG

Controle da bateria

Tradutor multi-línguas

Script para mostrar IP, usando zenity


  

Comentários
[1] Comentário enviado por thiagods.ti em 18/05/2012 - 00:17h

Aonde está escrito thiagods.ti foi alterado automáticamente pelo site porque usei ${USER} então para uqe o script fique correto utilizem ${USER} ao invés de thiagods.ti


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts