Efectuar Backups (Automaticamente)
Introdução
Uma necessidade que é cada vez mais proeminente com a generalização dos computadores portáteis é a necessidade de manter cópias de segurança do trabalho que temos. Apesar de ser uma questão para a qual toda a gente alerta, na prática são poucas as pessoas que realmente cumprem o seu plano de backups.
As motivações que levam as pessoas a não fazer backups são diversas:
- dificuldade em manter informações sobre os ficheiros que têm de ser copiados e/ou actualizados;
- dificuldade em gerir várias versões;
- o tempo que se perde a organizar as coisas para o backup;
- o já faltar pouco para acabar um trabalho extenso e esperar pelo fim do mesmo para “fazer um backup direitinho”.
Em relação ao último ponto há algo a dizer: não se pretende que um backup tenha apenas os ficheiros já finalizados. Um backup é uma salvaguarda, é um ponto de partida para continuarmos as nossas actividades enquanto utilizadores de computadores no caso de ocorrer alguma catástrofe.
A quase totalidade dos fabricantes de Gravadores de CD/DVD incluem com o seu hardware algumas aplicações para tirar maior proveito do gravador, nomeadamente aplicações para fazer backups. Devido às limitações do sistema de ficheiros do Windows (pelo menos até à FAT32), realmente são necessárias aplicações com alguma complexidade para gerir os backups e, na quase totalidade dos casos, é obrigatório voltar a usar a mesma aplicação para repôr os backups. Os sistemas de ficheiros Unix há já muito tempo que contemplam opções que permitem facilitar a vida para backups, nomeadamente através de “hard-links”.
Compreendendo os "hard-links"
Os “hard-links”, aparentemente, não passam de uma cópia do ficheiro original mas vamos estudar o seu comportamento (utilize uma consola e não o modo gráfico):
- Crie um directório vazio e vá para o seu interior (
mkdir links && cd links
); - Crie um ficheiro com o conteúdo que muito bem entender (de preferência ASCII) e guarde-o como teste.txt;
- Execute o comando
du
dentro do directório; - Agora vamos ver qual o efeito da cópia… faça
cp teste.txt outro_teste.txt
; - Volte a executar o
du
- o resultado será o dobro do valor que obteve na primeira execução - isto demonstra que o outro_teste.txt é uma cópia integral do ficheiro teste.txt, ou seja, ambos estão a ocupar espaço físico no disco, ainda que o conteúdo seja exactamente o mesmo; - Agora apaguemos o outro_teste.txt:
rm outro_teste.txt
; - Recorrendo ao comando “ln”, vamos criar um “hard-link” para o nosso ficheiro original:
ln teste.txt mais_um_teste.txt
; - Volte a executar o
du
… Aparentemente nada aconteceu, mas se fizerls -l
pode constatar que tem dois ficheiros exactamente iguais; - O que acontece é que o
ln
registou apenas no sistema de ficheiros que existe um ficheiro com o nome “mais_um_teste.txt” mas que aponta para o mesmo sítio que o nome “teste.txt”. Para se poder ver tal informação, existe o comando “stat”. Se fizerstat teste.txt
estat mais_um_teste.txt
, apesar de “File” ter nomes diferentes, a restante informação é exactamente igual. Uma informação extremamente útil é o campo “Links” que nos indica quantos nomes de ficheiros apontam efectivamente para o mesmo conteúdo.
O processo de backup
Com o aparecimento do “Time Machine” no Mac OS, os utilizadores de GNU/Linux descobriram que há já muito tempo que têm condições para efectuar backups “à la” “Time Machine”.
O que o “Time Machine” tem de extraordinário é que permite recuar no tempo e repôr os directórios seleccionados exactamente no ponto em que se encontravam aquando a realização daquele backup mas sem estar sempre a copiar tudo de um lado para o outro.
Recorrendo aos comandos cp -al
e ao rsync
, é possível recriar o mesmo funcionamento. O cp -al
faz uma cópia de um ponto inicial para um ponto de destino em modo “archive” (-a
- recursivo e com preservação de toda a informação do ficheiro no que toca a tempos de acesso, proprietário do ficheiro, etc.) e, em vez de copiar fisicamente os ficheiros, faz “hard-links” para os mesmos (-l
). Imaginemos que, num disco externo, temos o hábito de criar directórios tipo “bck20080217215823”, que significa que se trata do backup feito às 21h58m23s de dia 17 de Fevereiro de 2008 (o uso do formato ISO - YYYYMMDDHHmmSS - é útil para efectuar ordenações).
O que teremos de fazer quando formos começar um novo backup é identificar qual o backup mais recente e fazer algo do tipo cp -al bck20080217215823 bck`date +'%Y%m%d%H%M%S'`
. Desta forma temos tudo o que tínhamos até ao momento do último backup. Falta sincronizar as alterações feitas até ao momento actual. Vamos considerar que o novo directório criado com esta cópia foi o “bck20080405161447”
Um comando que acompanha praticamente todas as distribuições é o “rsync”, que permite manter o sincronismo entre dois directórios. Com este comando podemos sincronizar o novo directório de backup com o sistema, por exemplo fazendo: rsync -av –one-file-system –delete /home/msilva/ /mount/backup_disk/bck20080405161447/
. Como o rsync só vai actualizar os ficheiros que tiverem sido alvo de alterações e como, normalmente, não fazemos backups de caches e afins (quem estiver a pensar fazer um script de backup à mão deve adicionar vários –exclude=/meu/directório/que/não/interessa/guardar
), é possível ter retratos fidedignos da home do utilizador sem ocupar muito espaço (a não ser que, entre backups,o utilizador altere praticamente todos os ficheiros que possui na sua home).
Automatizando o processo para utilizadores finais
Neste momento devo ter os utilizadores de GNU/Linux menos dados à utilização da consola a insultar-me e a dizerem que isto é demasiado complexo. A esses quero dizer-lhes o seguinte: apesar de ter o mínimo de conhecimentos para poder fazer isto directamente na shell (linha de comandos, se preferirem), sou demasiado preguiçoso para andar com estas coisas.
Alguém pegou neste conhecimento, olhou para o “Time Machine” dos outros senhores, e resolveu fazer uma coisa bonitinha para o efeito. O resultado chama-se “Fly Back” e pode ser descarregado do endereço http://code.google.com/p/flyback/
O “Fly Back” ainda não vem acompanhado com um ficheiro *.desktop para se colocar no Desktop, no menu ou num qualquer outro sítio que siga as definições do freedesktop.org, pelo que terá de ser invocado pela linha de comandos. Basta ir para o directório onde o descomprimiram e executar python flyback.py
. Precisam apenas dos “binding” Python das coisas GNOME, como o gconf e Glade.
Depois disto é uma questão de ir apontando e clicando! :D
O “Fly Back” irá fazer tudo aquilo que vimos anteriormente de forma automática.