DestaqueGuias

Rsnapshot: Backups diferenciais em *nix

Introdução

Este é um artigo sobre um programa relativamente simples, para efectuar backups diferenciais em certas datas repetitivas.
O programa chama-se Rsnapshot e depende do rsync e hard links para os backups e de ssh para acesso a máquinas remotas.

O objectivo é ter backups de um determinado período de tempo, totais, mas criados de uma forma diferencial, para ocupar o menos espaço possível. Isto é, a partir do segundo backup, só as diferenças é que são copiadas. O que é igual são criados hard links, que um utilizador vê como se fossem ficheiros ou pastas normais.
O período de tempo pode ser horário, diário, semanal ou mensal.

Esta aplicação pode ser instalada em qualquer Linux ou mesmo OS X.
A sua forma de funcionar não é muito diferente do “Time Machine“, mas sem Gui. A vantagem do rsync, na minha opinião, é simplicidade e robustez, em relação ao “Time Machine”.

Backups é algo que a maior parte do tempo não faz parte dos nossos pensamentos, mas quando um disco falha ou há qualquer outro problema com os dados, passa a ser algo vital e que não podemos deixar de considerar.
Assim sendo, a maior parte do tempo, backups é algo que serve apenas para termos a consciência tranquila, pois sabemos que se houver falhas, temos algo que pode recuperar o que for pedido.

Neste artigo vou mostrar como funciona o Rsnapshot usando duas máquinas, em Centos, mas é possível instalar noutras distros e mesmo em OS X, com algum trabalho.

A primeira máquina tem como nome “Servidor” e é onde vou instalar e correr o Rsnapshot. A segunda máquina tem como nome “Cliente” e é apenas uma máquina que tem alguns dados e que vou também querer fazer backups do seu conteúdo, ficando eles na máquina “Servidor”.

Assim sendo, na pasta “/root” do Servidor, tenho alguns pdfs que vou querer fazer backup e na máquina cliente, também em “/root” tenha algumas imagens, das quais vou querer fazer backups.

Instalação

Rsnapshot 03

Na máquina Servidor, onde vão ficar os backups, tenho um disco à parte que monto em “/backup”.
Isto não é obrigatório. Pode ser uma partição ou uma pasta no mesmo disco. Só criei assim, para ter os backups isolados.

Rsnapshot 04

Na máquina Cliente, onde não vai estar a correr o Rsnapshot, mas que quero fazer backups na mesma, só há um pacote que é necessário. O rsync.
Para o instalar em centos, basta correr o comando:

yum install rsync

É importante referir que apesar do rsnapshot usar rsync, quando faz backups remotos, não usa um daemon (serviço) do rsync. Acede por ssh e faz um túnel para a máquina de backups onde o rsync é executado.

Rsnapshot 05

O gestor de pacotes verifica as dependências, que neste caso, não tem e pergunta se queremos mesmo instalar a versão 3 do rsync, que como é óbvio, devemos dizer que sim.

Rsnapshot 06

A instalação em si demora poucos segundos e no fim deveremos ver como sucesso a instalação do pacote.

Rsnapshot 07

Na máquina Servidor, onde vão ficar os backups, temos que instalar o Rsnapshot e este ponto é um pouco mais complicado, visto ele não se encontrar nos repositórios do Centos.
Para tal, temos que instalar outro repositório, do EPEL (Extra Packages for Enterprise Linux), que contém muitos outros pacotes que não se encontram no Centos 6.

Para instalarmos o repositório, acedemos a esta página, para irmos buscar o rpm de instalação do repositório.
Sabendo qual é o rpm, podemos instalar na linha de comandos, com o seguinte comando:

rpm -ihv http://fedora-mirror02.rbc.ru/pub/epel/6/i386/epel-release-6-7.noarch.rpm

Rsnapshot 08

Este comando prepara e instala o pacote sem problemas, visto não ter dependências.
O conteúdo deste pacote não é mais que um ficheiro com as indicações do repositório que fica em “/etc/yum.repos.d”.

Rsnapshot 09

Com o repositório instalado, partimos então para a instalação do Rsnapshot na máquina Servidor.
Para tal, é só executar o comando:

yum install rsnapshot

Rsnapshot 10

Aparece novamente para confirmarmos que queremos a sua instalação. Dizemos que sim.

De notar que ele tem como dependência o rsync e o gestor de pacotes trata de instalar também este pacote.

Rsnapshot 11

Como o repositório do EPEL nunca tinha sido visto pelo sistema, temos que aceitar a assinatura digital deste repositório.

Rsnapshot 12

No fim, deveremos ter a instalação dos dois pacotes feitas com sucesso.

Este é o procedimento para instalar o rsnapshot em Centos. Em outras distribuições com gestores de pacotes, não será muito diferente.

Em OS X é um pouco mais complicado. Para o instalar, temos que o fazer com um gestor de pacotes que não é nativo do sistema operativos. Neste caso, o brew.
O brew requer outros pacotes, como o git, que pode ser instalado a partir dele e o Xcode, que pode ser instalado da App store da Apple.

Depois de instalado o brew, basta correr o comando:

brew install rsnapshot

O gestor de pacotes trata de todas as dependências e acções a tomar em OS X.
No fim, ele fica instalado em “/usr/local/Cellar/rsnapshot/1.3.1”.

Configuração

Rsnapshot 13

Depois da instalação, temos apenas um ficheiro de configuração, que devemos editar, em “/etc/rsnapshot.conf”. Em OS X, este ficheiro fica em “”/usr/local/Cellar/rsnapshot/1.3.1/etc/”.

Pode-se usar qualquer editor de texto, por exemplo o nano, com o comando:

nano /etc/rsnapshot.conf

Rsnapshot 14

Dentro do ficheiro de configuração temos várias opções.

Importante: O ficheiro de configuração do Rsnapshot requer que os elementos estejam separados por um tab. Se não estiverem, o Rsnapshot falha.

Vou tentar explica-las linha a linha.

config_version	1.2

Este é a versão do ficheiro de configuração. Ele vai na versão 1.2. Não alterar esta opção.

snapshot_root	/backup/

Esta é a localização onde vão ficar os ficheiros de backup. Pode ser a que pretenderem, mas tem que acabar em “/”.

no_create_root	1

Opção para o rsnapshot tentar ou não criar a directoria de topo dos backup. Em “1”, não tenta criar.

cmd_cp		/bin/cp

A partir daqui são dependências externas do rsnapshot. Algumas não são obrigatórias, como é este caso da localização do comando “cp” nativo do sistema operativo.
Em linux convém colocar. Em OS X é melhor comentar, porque dá problemas com o “cp” nativo.

cmd_rm		/bin/rm

Localização nativa do comando “rm”. Mais uma vez, em linux convém colocar. Em OS X dá problemas e é melhor comentar.

cmd_rsync	/usr/bin/rsync

Este é o único comando que é mesmo obrigatório usar, onde está a localização do comando “rsync”.

cmd_ssh	/usr/bin/ssh

Localização do comando “ssh”.

cmd_logger	/usr/bin/logger

Localização do comando para suporte do syslog, para ter logs.

cmd_du		/usr/bin/du

Localização do comando “du” para espaço em disco.

cmd_rsnapshot_diff	/usr/bin/rsnapshot-diff

Localização do comando “rsnapshot-diff” para ter as diferenças de ficheiros entre vários backups.

cmd_preexec	/path/to/preexec/script

Caso queiramos usar um script antes dos backups, localização desse script.

cmd_postexec	/path/to/postexec/script

Caso queiramos usar um script depois dos backups, localização desse script.

interval	hourly	6
interval	daily	7
interval	weekly		4
interval	monthly	3

Número de backups que queremos num certo período de tempo. Neste exemplo, estou a dizer que quero 6 backups horários, 7 diários, 4 semanais e 3 mensais.

verbose		3

Detalhe que queremos ver quando corremos o rsnapshot. 1 é silent, 5 é verbose.

loglevel	3

Detalhe para o ficheiro de log. 1 é silent, 5 é verbose.

logfile	/var/log/rsnapshot

Localização do ficheiro de log.

lockfile	/var/run/rsnapshot.pid

Ficheiro de execução do rsnapshot, para prevenir que se corra duas instâncias ao mesmo tempo.

rsync_short_args	-a
rsync_long_args	--delete --numeric-ids --relative --delete-excluded

Argumentos que se passa ao rsync. Estes são os de default.

ssh_args	-p 22 -C

Argumentos que se passa ao cliente ssh, quando se faz backups remotos. Adicionei o “-C” para comprimir os dados que passam por ssh.

du_args	-csh

Argumentos que devem ser passados ao comando “du”.

one_fs		0

Partir ou não uma partição num ponto de backup. Por default está a off.

include_file	/path/to/include/file
exclude_file	/path/to/exclude/file

Opções para incluir ou excluir ficheiros nos backups.

link_dest	1

Opção para efectuar backup de ficheiros especiais. O rsync tem que ser uma versão que já suporte este comando.
Por default está a 0 (Off).

sync_first	0

Controle do comportamento de rotação dos ficheiros. A 0, ele sincroniza primeiro e depois roda as pastas com menor valor. A 1, todas as pastas são rodadas.
Default está a 0 (Off)

use_lazy_deletes	0

Forma como é feito o delete da pasta mais antiga. A 0, a pasta mais antiga é apagada. A 1, a pasta é movida, é apagado o ficheiro de lock e só depois apagada a pasta.

rsync_numtries  3

Número de tentativas de backup que são passados ao rsync em caso de falha.

backup	/root/		localhost/

Comando de backup de uma pasta local. O primeiro parâmetro é a localização da pasta. O segundo é o nome da pasta dentro da pasta de backups.

Assim sendo, neste caso, estou a fazer backup da pasta “/root”, que vai ficar em “/backup/localhost”.

backup	[email protected]:/root/	cliente/

Comando de backup de uma pasta remota. A primeira parte é o utilizador que acede por ssh mais o nome ou ip do computador remoto mais a pasta que se quer fazer backup. A segunda parte é o nome da pasta dentro da directoria de backups.

Assim, estou a aceder com o utilizador “root” ao computador com o ip “192.168.1.226” à pasta “/root”, que vai ficar em “/backup/cliente”.

backup_script	/usr/local/bin/backup_rsnapshot_cvsroot.sh	cvsroot/

Caso queiramos executar um script no backup, usamos o comando “backup_script”, no ficheiro de configuração, com a origem do script e nome da pasta na pasta de backups (/backup).

backup	rsync://rsync.samba.org/rsyncftp/	rsync.samba.org/

Se o backup for de um servidor de rsync, passa-se o endereço rsync (rsync://).

1 2Página seguinte
Etiquetas

Artigos Relacionados

Close