quinta-feira, 14 de janeiro de 2016

Script de backup (para sistemas que não têm)


90% do meu trabalho é suporte. Dou suporte à usuários, manutenção de PCs e sistemas operacionais, etc. E, é claro, sempre em pequenas e médias empresas onde há sistemas de gestão mais simples, e tudo fica a cargo do usuário, inclusive o backup. Na maioria dos casos o "servidor"  é um PC qualquer da empresa, o que faz da questão um tanto delicada.
Deixar o usuário a cargo do backup é quase insano, ainda mais em computadores comuns onde os usuários fazem as tarefas comuns. Sem falar que muitos desses sistemas simplesmente não têm ferramenta de backup! O backup é feito copiando manualmente uma pasta ou os arquivos do banco de dados.

Alguns oferecem um script de backup que pode ser agendado como tarefa do Windows, outros não. É aqui onde quero chegar. Andei trabalhando com alguns softwares que o desenvolvedor não dá qualquer suporte ao backup e os usuários acabaram fazendo bagunça na hora de copiar os arquivos. Vou dar um exemplo de script de backup de uma pasta, o qual o usuário pode fazer um backup seguro com apenas um clique (e restaurá-lo da mesma forma) e você pode programar o Windows para executar em determinado horário.

Neste exemplo, como na maioria dos sistemas, será copiada toda a pasta para um arquivo zip nomeado com a data e o horário. Você deve fazer a cópia para pelo menos 2 locais em discos diferentes e de preferência agendar a tarefa em um horário de nenhum ou pouco movimento. Depois um segundo script será criado de forma que basta arrastar o arquivo zip para ele e o backup é restaurado.

Veja o exemplo abaixo, copie no bloco de notas e salve com extensão .CMD:

@echo off
color F0
title Backup pasta do Sistema
rem Definindo variáveis de data e horário para o nome do arquivo
set year=%date:~-4,4%
set month=%date:~-10,2%
set day=%date:~-7,2%
set hour=%time:~-11,2%
set hour=%hour: =0%
set min=%time:~-8,2%

rem Definindo Endereços das pastas e arquivos
set PastaSistema=C:\Sistema
set PastaTemp=%USERPROFILE%\Temp-BKP
set PastaDestino=%USERPROFILE%\BKP-Sistema
set PastaDestino2=\\127.0.0.1\Compartilhada

set NomeArqZip=Sistema-%year%.%month%.%day%.%hour%%min%.zip

rem Verificando instalação do 7zip
set App7zipPath="%ProgramFiles(x86)%\7-Zip\7z.exe"
if not exist %App7zipPath% set App7zipPath="%ProgramFiles%\7-Zip\7z.exe"
if not exist %App7zipPath% goto NaoInstalado

rem Verificando existencia de pastas
if not exist %PastaTemp% mkdir %PastaTemp%
if not exist %PastaDestino% mkdir %PastaDestino%
if not exist %PastaSistema% goto Fim

xcopy /E /H %PastaSistema%\* %PastaTemp%\

echo.
echo -----------
echo Copiando %PastaSistema% para %PastaDestino%\
echo -----------
echo.
%App7zipPath% a %PastaDestino%\%NomeArqZip% -r %PastaTemp%\*
%App7zipPath% a %PastaDestino2%\%NomeArqZip% -r %PastaTemp%\*
echo.
echo -----------
echo %PastaSistema%\ Copiada para %PastaDestino%\%NomeArqZip% 
echo -----------
echo.

goto Fim

:NaoInstalado
 echo.
echo Aplicativo 7zip não instalado - Acesse o site oficial em:
echo  http://www.7-zip.org/

:Fim
del /a /s /f /q "%PastaTemp%\*"
rmdir /s /q "%PastaTemp%\"
echo.
echo.
echo FIM !
echo.
echo.
pause

Você deve substituir os endereços das variáveis pelas respectivas pastas do sistema e do backup. Os arquivos são copiados para uma pasta temporária e em seguida é criado o arquivo de destino. Ainda há uma segunda pasta de destino (variável PastaDestino2) por segurança. Coloquei como exemplo uma pasta compartilhada.

Com um clique duplo o backup é feito. Você pode agendar uma tarefa no Windows para fazer automaticamente. Continuando, um segundo script deve ser colocado na pasta onde ficam os backups para poder restaurá-los de maneira simples, apenas arrastando o arquivo ZIP para o script. Veja o conteúdo abaixo o salve na pasta dos backups com o nome "Arraste aqui para Restaurar o Backup":

@echo off
color F0
rem definindo path do 7zip
set App7zipPath="%ProgramFiles(x86)%\7-Zip\7z.exe"
if not exist %App7zipPath% set App7zipPath="%ProgramFiles%\7-Zip\7z.exe"
if not exist %App7zipPath% goto NaoInstalado

rem Tratando argumento
set Endereco=%1
if not defined Endereco ( echo. & echo "Arraste o arquivo para este progama" & echo. & pause & exit )

set PastaSistema=c:\Sistema
title Restaurando %1 para %PastaSistema%\

rem Restaurar arquivo indicado para a pasta do sistema
echo.
echo -----------
echo Restaurando %1 para %PastaSistema%\
echo -----------
echo.
%App7zipPath% X -aoa %1 -o%PastaSistema%\
echo.
echo -----------
echo FIM !!!
echo -----------
echo.

rem Fim
:Fim
echo.
echo.
pause
exit

rem 7zip Não encontrado
:NaoInstalado
echo.
echo ---------- 
echo.
echo 7zip nao instalado - Baixe em:
echo  http://www.7-zip.org/
echo.
echo ----------
pause
goto Fim

Novamente, altere apenas a variável "PastaSistema" e o script de restauração está pronto. Basta arrastar o arquivo ZIP para ele e pronto. Veja a imagem: