Como criar um índice de datas

Só está faltando uma coisa nessa configuração para que ela se torne prática, e essa coisa é um bom índice. Ao menos para mim, ter que descobrir em qual backup procurar por um arquivo seria bem mais fácil se eu pudesse procurar pela data. Ficar fazendo
contas para saber se o arquivo está no backup daily.29 ou no weekly.2 é muita complicação.

O pacote rsnapshot, infelizmente, não oferece um índice baseado em datas. Mas não é tão complicado criar um, e eu fiz meu próprio script em Python para cuidar disso. Para usar o script a seguir, grave-o como /usr/local/bin/datestamp_backups.py na
máquina myserver:

#!/usr/bin/env python
# Copyright (C) 2009 by Terry Hancock
#—————————————————————————————
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#—————————————————————————————

#– Datestamp Index for Backups —

from datetime import date
import os, glob

RSNAP_ROOT = ‘/backup/auto’
RSNAP_INTS = ‘daily’, ‘weekly’, ‘monthly’

date_dir = os.path.join(RSNAP_ROOT, ‘date’)

# get the date
today = date.today()
stamp = today.isoformat()

# put date in the top level of the current backup (daily.0)
os.remove(os.path.join(RSNAP_ROOT, ‘daily.0’, ‘DATE’))
open(os.path.join(RSNAP_ROOT, ‘daily.0’, ‘DATE’), ‘wt’).write(stamp+’n’)

# delete the old index entries
os.system(‘rm -r %s’ % os.path.join(RSNAP_ROOT, ‘date’))
os.mkdir(os.path.join(RSNAP_ROOT, ‘date’))

#for symlink in os.listdir(date_dir):
# os.remove(os.path.join(date_dir, symlink))

# read dates in all backups and write out symlinks for them as new index
append = ‘bcdefghijklmnopqrstuvwxyz’
for interval in RSNAP_INTS:
for dirname in glob.glob(os.path.join(RSNAP_ROOT, ‘%s.*’%interval)):
directory = os.path.join(RSNAP_ROOT, dirname)
datestamp = open(os.path.join(directory, ‘DATE’),’rt’).read().strip()
target = os.path.join(date_dir, datestamp)
i=0
while os.path.exists(target):
target = os.path.join(date_dir, datestamp + append[i])
i += 1
os.symlink(directory, target)

Tenho que admitir que fui meio preguiçoso, e defini rsnapshot_root e os nomes dos intervalos como constantes no script. Você vai ter que alterar essas duas definições (RSNAP_ROOT e RSNAP_INTS) de acordo com o seu sistema.

Você também vai ter que incluir uma linha no arquivo /etc/cron.d/rsnapshot em myserver para usar esse script, resultando nesta configuração:

30 4 * * * root /usr/bin/rsnapshot daily
0 4 * * 1 root /usr/bin/rsnapshot weekly
30 3 1 * * root /usr/bin/rsnapshot monthly
0 5 * * * root /usr/local/bin/datestamp_backups.py

Isso faz com que o programa seja executado diariamente, trinta minutos após os backups serem rotacionados. Ele simplesmente monta um diretório de links simbólicos, com nomes baseados nas datas, apontando para os backups apropriados. A lista de arquivos
do diretório mostra quais backups estão disponíveis:

myserver:/backup/auto/date# ls
2009-06-23 2009-08-04 2009-08-12 2009-08-20 2009-08-28
2009-06-29 2009-08-05 2009-08-13 2009-08-21 2009-08-29
2009-07-08 2009-08-06 2009-08-14 2009-08-22 2009-08-30
2009-07-17 2009-08-07 2009-08-15 2009-08-23 2009-08-31
2009-07-25 2009-08-08 2009-08-16 2009-08-24
2009-08-01 2009-08-09 2009-08-17 2009-08-25
2009-08-02 2009-08-10 2009-08-18 2009-08-26
2009-08-03 2009-08-11 2009-08-19 2009-08-27

Uma lista longa abreviada mostra mais explicitamente a relação dos links simbólicos com os diretórios de fato criados pelo rsnapshot.

myserver:/backup/auto/date# ls -l
total 0
lrwxrwxrwx 1 root root 21 2009-08-31 05:00 2009-06-23 -> /backup/auto/weekly.5
lrwxrwxrwx 1 root root 21 2009-08-31 05:00 2009-06-29 -> /backup/auto/weekly.4

. . .

lrwxrwxrwx 1 root root 20 2009-08-31 05:00 2009-08-28 -> /backup/auto/daily.3
lrwxrwxrwx 1 root root 20 2009-08-31 05:00 2009-08-29 -> /backup/auto/daily.2
lrwxrwxrwx 1 root root 20 2009-08-31 05:00 2009-08-30 -> /backup/auto/daily.1
lrwxrwxrwx 1 root root 20 2009-08-31 05:00 2009-08-31 -> /backup/auto/daily.0

Observe que este script não interfere no funcionamento do rsnapshot. Ele apenas cria um novo diretório de links simbólicos que fazem referência aos diretórios criados pelo rsnapshot.

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X