Como Automatizar tus respaldos criticos con rdiff backup – Parte 1

Hace un tiempo tengo la idea de generar un script que automatize mis respaldos de archivos críticos usando rdiff-backup. Este post refleja mis intentos de lograrlo, quiero notar que todo lo que está aquí es fase beta

Lo primero que me gustaría dejar claro es que si bien es cierto que podemos respaldar todo en un sitio web remoto, dado que algunos de mis archivos son varias decenas de megas y no me interesa estar dependiendo de la latencia de la red, esta primera versión del script respalda en un pendrive. Pretendo que las versiones posteriores permitan indicar si se desea un respaldo remoto o en un medio físico.

El siguiente código applescript ejecuta un shell script, llamando al comando rdiff-backup (En la siguiente parte veremos como instalar rdiff-backup en OSX) que es el que en definitiva nos permitirá realizar los respaldos incrementales. Los detalles de la sintaxis puede encontrarse con man rdiff-backup.

set misalida to do shell script "/opt/local/bin/rdiff-backup --override-chars-to-quote '^a-zA-Z0-9_ -.' --print-statistics --include-globbing-filelist /Users/radaworks/.rdiff-backup/include.lst --exclude-globbing-filelist /Users/radaworks/.rdiff-backup/exclude.lst / " & destinostr & " >/tmp/rdiff;date >>/tmp/rdiff;more /tmp/rdiff"

Este comando guarda el output del shell script en la variable misalida, esto lo podemos usar luego mostrarlo con Growl o escribir un archivo de log.
El comando --override-chars-to-quote evita que rdiff-backup escape las mayúsculas.

Luego le pasamos el archivo de incluidos y excluidos y en la variable destinostr el path donde se realizará el respaldo (En nuestro caso el pendrive).

set destino to "TRAVELWORKS:rdiff"
set destinostr to POSIX path of destino as string

El siguiente trozo de código tiene por objetivo usar el sistema para respaldar en un dispositivo USB. Para lo cual es importante validar que el pendrive esté montado. Si no está disponible, desplegamos un mensaje usando Growl y abortando el proceso, en caso contrario, el flujo continúa.

tell application "Finder"
  try
    set this_folder to destino as alias
    if not (exists folder this_folder) then
      my sendGrowlMessage("Can't find Backup folder on device, abort backup", scriptpath)
      return 0
    else
      my sendGrowlMessage("USB Disk located", scriptpath)
    end if
    on error the error_message number the error_number
    set the error_text to "Error: " & the error_number & ". " & the error_message
    -- the following line evokes the sub-routine to write the error into an error log created on the desktop
    -- if the file "Script Error Log.txt" already exists, it will add one line to the log
    my write_log(the error_text)
    my sendGrowlMessage("Can't find USB device, abort backup", scriptpath)
    return 0
  end try
end tell

Tags: , ,

Leave a Reply