Shell script para backup: nova versão
Translate original post with Google Translate
Outro dia atualizei o que faltava no meu shell script para fazer backup usando o rsync.
Adicionei o wakeonlan para ligar a máquina remotamente (necessário descobrir o HW address da sua máquina de destino e se certificar de que é possível ligá-la remotamente — possível que tenha que ativar essa opção na BIOS), dei uma arrumadinha, incluí a opção de excluir arquivos e pastas do backup (ver abaixo) e adicionei num cron job para fazer um backup diário. Além disso, o script desliga a máquina depois do fim do backup. Aqui está:
#!/bin/bash
# Script para backup via SSH usando o rsync
# Versão 0.8 - 2009/09/05
# # # # # # Configuração # # # # # #
# Mude os parâmetros abaixo, referentes ao seu sistema
# Arquivo log
LOG=/home/user0/.backup`date +%Y-%m-%d`.log
# IP ou hostname da máquina de destino
DESTINO=destino.local
# Usuário no destino
USR=user1
# Diretório de destino
DIR=/home/user1/Backup/
# Diretório de origem
SRC=/home/user0
# Arquivo com lista de arquivos e diretórios
# que não serão incluídos no backup
EXCLUIR=/home/user0/.rsync/exclude
# HW address
HW=00:ee:dd:cc:bb:aa
# # # # # # Configuração # # # # # #
# # # # # # # Funções # # # # # # #
function ligada
{
# Checar se a máquina de destino está ligada
echo -e "Checando se $DESTINO está ligada..."
/bin/ping -c 1 -W 2 $DESTINO > /dev/null
if [ "$?" -ne 0 ]; then
return 1
else
return 0
fi
}
function run_backup
{
HORA_INI=`date +%s`
echo -e `date +%c` >> $LOG
echo -e "\n$DESTINO ligado!" >> $LOG
echo -e "Iniciando o backup...\n" >> $LOG
rsync -ah --delete --stats --progress --log-file=$LOG --exclude-from=$EXCLUIR -e ssh $SRC $USR@$DESTINO:$DIR
HORA_FIM=`date +%s`
TEMPO=`expr $HORA_FIM - $HORA_INI`
echo -e "\nBackup finalizado com sucesso!" >> $LOG
echo -e "Duração: $TEMPO s\n" >> $LOG
echo -e "--- // ---\n" >> $LOG
echo -e "\nBackup finalizado com sucesso!"
echo -e "Duração: $TEMPO s\n"
echo -e "Consulte o log da operação em $LOG.\n"
}
# # # # # # # Funções # # # # # # #
# # # # # # # Programa # # # # # # #
# Checar se a máquina de destino está ligada
ligada
if [ "$?" -eq "1" ]; then
echo -e "\n$DESTINO desligado. Tentando acordá-lo..."
wakeonlan $HW
echo -e "\nPacote mágico enviado. Aguarde."
sleep 70
ligada
if [ "$?" = "1" ]; then
echo -e `date +%c` >> $LOG
echo -e "\n$DESTINO desligado." >> $LOG
echo -e "Backup não realizado\n" >> $LOG
echo -e "--- // ---\n" >> $LOG
echo -e "\n$DESTINO desligado."
echo -e "Backup não realizado.\n"
else
echo -e "\n$DESTINO ligado! Começando o backup..."
run_backup
fi
else
echo -e "\n$DESTINO ligado! Começando o backup..."
run_backup
fi
echo -e "Desligando o $DESTINO..."
ssh $USR@$DESTINO 'sudo halt'
echo -e "Pronto. Tchau!"
# # # # # # # Programa # # # # # # #
# # # # # # # Afazeres # # # # # # #
#
# - Criar alça para quando a transferência falhar (e.g.,falta de espaço)
Meu arquivo exclude, com a lista de arquivos e pastas que não serão incluídas no backup ficou assim:
.thumbnails/
Picasa.ini
Thumbs.db
.local/share/Trash/
.cache/
.gvfs/

Português
Paul 14:22 on 2010/01/26 Permalink |
gostei!
OrgaNeLaS - Shell script para backup usando rsync e ssh em DHCP no Ubuntu 14:13 on 2010/03/28 Permalink |
[...] [Fiz uma versão nova, mais completa, deste script. Confira aqui.] [...]
Juliano 14:46 on 2010/06/09 Permalink |
Esse script de backup é FANTÁSTICO, PERFEITO para o que estou precisando, ele serve para estações que tenham win XP ou 7 para enviar o backup ao windows server 2008??? Valeuuuuu
nelas 11:01 on 2010/06/10 Permalink |
Oi Juliano, não faço idéia. Você está dizendo rodar o script por uma máquina com linux para enviar o backup para a máquina com windows? Se for isso talvez até funcione se vc tiver ssh instalado no windows (e o rsync). Agora rodar o script partir do windows acho que não funciona não… teria que portar pra outra linguagem como python ou perl.
Gabriel Nunes 17:17 on 2010/11/22 Permalink |
Como eu devo colocar no arquivo exclude para que não seja realizada a cópias de arquivos do tipo .mp3, .avi, etc..
tentei de diversas formas e não funcionou.
nelas 16:14 on 2010/11/27 Permalink |
Oi Gabriel, é só colocar em uma nova linha: *.mp3
Assim o comando não vai mais copiar arquivos terminados em mp3. No entanto, se vc quiser excluir os arquivos mp3 que já estiverem no destino (eg pq vc já havia rodado o rsync) basta acrescentar na linha de comando a opção –delete-excluded. Ele vai ler suas regras de exclusão e apagar estes arquivos no destino.
Faça uns testes pra ver como funciona antes de rodar nos seus arquivos oficiais.
Loiro Jones 10:52 on 2011/09/13 Permalink |
Muito bom script, estou utilizando no meu servidor de arquivos para backup…
Loiro Jones 12:09 on 2011/09/13 Permalink |
Ótimo script… vc poderia torná-lo mais eficiente se na linha 54 “rsync -ah –delete –stats –progress –log-file=$LOG –exclude-…”, acrescentasse ao rsync a sintaxe ” rsync -Cravzup –delete –stats –progress –log-file=$LOG –exclude-from=$EXCLUIR -e ssh $SRC $USR@$DESTINO:$DIR
,ou seja, a sintaxe Cravzup
C: auto-ignorar arquivos idênticos;
-r: copiar de forma recursive, ou seja, todos os diretórios e subdiretórios no caminho especificado;
-a: indica que estarão sendo copiados arquivos;
-v: modo verboso, mais informações da cópia;
-z: comprime os arquivos durante a cópia;
– u : Update
-p: indicador de progresso de cópia.
Torna o backup mais eficiente…
falows
nelas 21:47 on 2011/09/14 Permalink |
Valeu, legal que está usando
O “-a” é equivalente à “-rlptgoD” portanto não precisaria do “-r” ou do “-p”. Na verdade o único que pode deixar mais eficiente é o “-z” que comprime os arquivos antes de enviar pela rede.
O “-u” faz o backup pular os arquivos cuja cópia no destino está com a data de modificação mais nova. Isso é útil para fazer sincronização entre computadores, mas neste caso é um backup de uma via só, sempre do meu computador para outra máquina. Portanto, independente do arquivo ter sido modificado no destino (eg. posso ter entrado e acessado alguma coisa por ela), a cópia da minha máquina vai sobrepor.
Já o “-p” serve para manter as permissões dos arquivos em ordem, o progresso é controlado pelo argumento “–progress”.
Tem a lista completinha das opções do rsync aqui: http://www.samba.org/ftp/rsync/rsync.html
Abraço