Script de Backup para Google Drive no Linux

O problema

Com 5Gb de espaço grátis, o Google Drive pode ser uma boa opção para backups simples de servidores pequenos e desktops.

Nós vamos utilizar o Grive para suporte ao Google Drive e um pequeno script que você pode usar para ajustar às suas necessidades.

! Este é um artigo antigo (2013). É possível que o conteúdo esteja desatualizado.

Instalando Grive

Debian:

apt-get install grive

Ubuntu:

Utilizaremos um repositório PPA:

sudo add-apt-repository ppa:nilarimogard/webupd8
sudo apt-get update
sudo apt-get install grive

Preparando

Crie um diretório e entre nele:

mkdir /mnt/GoogleDrive
cd /mnt/GoogleDrive

Execute o comando grive com a opção -a para preparar e ter autorização:

# grive -a
-----------------------
Please go to this URL and get an authentication code:

https://accounts.google.com/o/oauth2/auth?scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile+https%3A%2F%2Fdocs.google.com%2Ffeeds%2F+https%3A%2F%2Fdocs.googleusercontent.com%2F+https%3A%2F%2Fspreadsheets.google.com%2Ffeeds%2F&redirect_uri=urn:ietf:wg:oauth:2.0:oob&response_type=code&client_id=22314510474.apps.googleusercontent.com

-----------------------
Please input the authentication code here:

Copie e cole o link no seu navegador, tendo a certeza de estar conectado à conta Google para acessar o Drive que você precisa. Copie e cole de volta o código de autorização, e está feito - a primeira sincronização será feita.

Observação: apenas arquivos "reais" serão sincronizados - o grive não suporta download de arquivos editados no Google Apps.

Script

Este script lê um diretório para sincronizar com o GoogleDrive.

Crie o seguinte script em /SOMEPATH/googledrive-sync.sh e lhe dê permissão de execução (chmod 755 /SOMEPATH/googledrive-sync.sh)

#!/bin/bash
# Google Drive Sync
#
# Author: Rafael Goulart <rafaelgou@gmail.com>
#
# Config BEGIN
# =====================================================================

# Directory to backup
BACKUPDIR=/var/backups

# Google Drive directory
GDRIVEDIR=/mnt/GoogleDrive

# Directory target in remote
TARGETDIR=/backups

# =====================================================================
# Config END

# Create backup dir if not exists
echo Creating ${GDRIVEDIR}/${TARGETDIR} if needed
if [ ! -d "${GDRIVEDIR}/${TARGETDIR}" ]; then mkdir ${GDRIVEDIR}/${TARGETDIR}; fi

# Moving to Gdrive Dir
echo Entering ${GDRIVEDIR}
cd ${GDRIVEDIR}

# Initial sync
echo Initial Google Drive Sync
grive

# Coping new content
echo Copying from ${BACKUPDIR}/* to ${GDRIVEDIR}/${TARGETDIR}/
cp -R ${BACKUPDIR}/* ${GDRIVEDIR}/${TARGETDIR}/

# Showing files copied
echo Files to sync
find ${GDRIVEDIR}/${TARGETDIR}/

# Final sync
echo Final Google Drive Sync
grive

Você tem 3 parâmetros:

  • BACKUPDIR: Diretório para backup - ponha seus arquivos aqui, faça o script para compactar seus arquivos antes - default /var/backups
  • GDRIVEDIR: Diretório Google Drive que você criou antes (onde será syncronizado) - default /mnt/GoogleDrive
  • TARGETDIR: Diretório de destino no lado remoto, será criado para não bagunçar seu Google Drive - default /backups

Ponha este arquivo no crontab:

ln -sf /SOMEPATH/googledrive-sync.sh /etc/cron.dayly/

ou execute manualmente:

/SOMEPATH/googledrive-sync.sh

Alertas e Dicas

  • Esteja atento às limitações do Grive
  • Você pode economizar algum espaço em disco fazendo seu backup diretamente em /mng/GoogleDrive/backups e apenas executando grive após isto. Eu prefiro fazer isto em 2 passos como sugeri, mas isto é com você

Atualização

Caso não exista o comando abaixo (para Ubuntu 12.04)

sudo add-apt-repository ppa:nilarimogard/webupd8

Instale com:

sudo apt-get install python-software-properties