Finalmente vamos ao famoso backup, para tal criei um script em shell, já mais elaborado que o primeiro, que fará essa tarefa pra gente. Segue o código, defina o nome de backup_geral.sh:
#!/bin/bash
###########################
# BACKUP GERAL COM SSH/SCP #
# Carlos Vinícius Braga dos Santos #
# msn: slaypher.code@hotmail.com #
# email: slaypher.code@gmail.com #
#########################
USUARIO="pequenogrilo"
SERVIDOR="192.168.0.1"
PORTA="2222"
DIRETORIO="/backup"
if [ $# -eq 0 ]; then
echo
echo "Nenhum diretório especificado."
echo "Usar: $0 DIR1 [DIR2] [DIR3] ..."
echo
exit 1
fi
echo
for i in $*; do
if [ -d $i ]; then
echo -n "Compactando o diretório: \"$i\" ... "
tar -czf BKP_`basename $i`_`date +%Y_D%d_M%m`.tar.gz $i
echo "Concluido!"
else
echo "O parâmetro \"$i\" não e um diretório ou não foi encontrado."
fi
done
sleep 1
echo
for i in $*; do
if [ $(du BKP_`basename $i`_`date +%Y_D%d_M%m`.tar.gz | cut -f1) -gt 10000 ]; then
echo -n "Quebrando BKP_`basename $i`_`date +%Y_D%d_M%m`.tar.gz em pedacos de 10MB ... "
split -b 10m BKP_`basename $i`_`date +%Y_D%d_M%m`.tar.gz BKP_`basename $i`_`date +%Y_D%d_M%m`.tar.gz.
echo "Concluido!"
fi
done
sleep 1
echo
for i in $*; do
if [ $(du BKP_`basename $i`_`date +%Y_D%d_M%m`.tar.gz | cut -f1) -le 10000 ]; then
echo -n "Enviando o anexo: BKP_`basename $i`_`date +%Y_D%d_M%m`.tar.gz ... "
scp -P $PORTA BKP_`basename $i`_`date +%Y_D%d_M%m`.tar.gz $USUARIO@$SERVIDOR:$DIRETORIO
echo "Concluido!"
rm BKP_`basename $i`_`date +%Y_D%d_M%m`.tar.gz
else
for j in `ls BKP_$(basename $i)_$(date +%Y_D%d_M%m).tar.gz.*` ; do
rm BKP_`basename $i`_`date +%Y_D%d_M%m`.tar.gz 2>/dev/null >/dev/null
echo -n "Enviando o anexo: $j ... "
scp -P $PORTA $j $USUARIO@$SERVIDOR:$DIRETORIO
echo "Concluido!"
rm $j
done
fi
done
echo
echo "BACKUP CONCLUIDO!"
echo
Como essa belezura funciona? Simples, devem ser especificados quais diretórios deverão ser "backupeados", lembre-se diretórios somente.
A partir daí ele irá compactar usando o comando tar e gzip como parâmetro, depois verificará se o tamanho do backup gerado é maior que 10MB, se for ele quebra em partes de 10MB usando o split que poderá ser montado facilmente com o comando cat.
Após quebrar o arquivo, se necessário claro, ele começa a enviar usando o scp direto para o servidor e diretório que foram especificados nas variáveis do script logo no inicio. Depois de tudo pronto, apaga os arquivos criados e finaliza o script.
Vale lembrar que os valores do tamanho a ser rateado o arquivo pode ser alterado se for essa a sua vontade, de 10MB para o valor que achar melhor.
Mas lembrando do início, ele não pode enviar sem especificar uma senha, por isso, devemos usar o comando ssh-keygen para gerar uma chave pública que possamos enviar ao servidor e dizer que o nosso host é confiável. Para tal, use o comando:
Ele vai criar as chaves no diretório ~/.ssh:
# ssh-keygen -t rsa
# cd ~/.ssh
# scp -P 2222 id_rsa.pub pequenogrilo@192.168.0.1:/backup
Informe a senha dessa vez, e ele enviará a chave para o servidor. Agora no servidor faça o seguinte:
Lembra que criamos o diretório .ssh não foi em vão:
# cd /home/pequenogrilo/.ssh
# mv /home/pequenogrilo/backup/id_rsa.pub .
# cat id_rsa.pub >> authorized_keys
# cp -R . /home/pequenogrilo/backup
Pronto, teoricamente... Basta agora reiniciar o servidor sshd com o comando:
# /etc/rc.d/rc.sshd restart
E vamos aos testes, com o script de backup já no servidor, execute-o e passe os diretórios que queira efetuar backup.
Com isso damos as permissões caso já não tenha feito e iniciamos o processo de backup dos diretórios "faculdade", "site" e "confidencial".
# chmod 700 backup_geral.sh
# ./backup_geral.sh faculdade/ site/ confidencial/
Após alguns instantes, tudo deverá estar lá em "/home/pequenogrilo/backup". Dê uma checada após o final do script e seja feliz!
Backup completo!